【问题标题】:Android - set all lint warnings as errors except for certain onesAndroid - 将所有 lint 警告设置为错误,但某些警告除外
【发布时间】:2017-07-31 04:18:23
【问题描述】:

当引入不在 lint-baseline.xml 文件中的新 lint 警告时,我试图让我的持续集成失败。我希望将所有 lint 警告视为错误(因此构建被中止),但我想要一种方法来指定某些 lint 检查被视为信息或警告级别,以便它们仍然出现在 lint 结果中,但不要'不会导致构建中止。

这是我想做的基本示例(除非这不起作用,如果存在任何未忽略的警告,则构建失败):

lintOptions {
    lintConfig file("lint.xml")
    baseline file("lint-baseline.xml")
    checkAllWarnings true
    warningsAsErrors true
    abortOnError true
    informational 'MissingTranslation, ...' // don't fail the build for these
}

是否有一种简单的方法可以将所有 lint 检查都视为错误,不包括某些错误?我考虑过手动将所有 200 多个 lint 检查设置为错误级别,但这不会成为未来的证明,因为每次添加新的 lint 检查时我都必须更新列表。

【问题讨论】:

    标签: android android-studio android-gradle-plugin lint android-lint


    【解决方案1】:

    如果不使用 Gradle lintOptionscheckAllWarningswarningsAsErrors 等)来配置哪些警告应该被视为错误,你应该能够实现你想要的。请改用 lint.xml。在那里您可以执行以下操作:

    <?xml version="1.0" encoding="UTF-8"?>
    <lint>
       <issue id="MissingTranslation" severity="warning" />
    
       <!-- The following must be at the bottom of your file!
            All lint issues (not listed above) will be treated as errors. -->
       <issue id="all" severity="error" />
    </lint>
    

    在我的测试中,这似乎工作正常,所有警告都被视为错误,除了 lint.xml 顶部列出的警告。 但是,我没有将它与 lint-baseline.xml 结合使用进行测试,但我认为它不应该在那里工作。

    【讨论】:

      【解决方案2】:

      对我来说,这个配置很有效:

      android {
          lintOptions {
              warningsAsErrors true
              warning 'MissingTranslation', ...
          }
      }
      

      似乎选项是按照“正确的顺序”(又名“我需要它”)进行评估的,即首先所有警告都被提升为错误,然后针对单个问题 ID 再次覆盖此设置。使用 warning 而不是 disableignore 可确保问题在报告或 IDE 中仍然可见。

      【讨论】:

        【解决方案3】:

        我建议,this doc 提供的信息似乎不是一个真正的选择:

        android {
            lintOptions {
                checkAllWarnings true
                warningsAsErrors true
                // use this line to check all rules except those listed
                disable 'MissingTranslation', ...
                //OR this line to check but not worry about result (i think this is what you want)
                ignore 'MissingTranslation', ...
            }     
        }
        

        【讨论】:

        • 问题是我希望警告仍然在 IDE 中被标记,如果可能的话,也在 Android Studio 检查结果中。寻找一种在引入新的 l​​int 警告时让持续集成构建失败的方法,并能够指定某些不应使构建失败的警告。不过,我不希望这些警告被完全忽略或禁用。
        • Ignore 似乎是一个较弱的 disable 版本 - 它运行但不会使构建失败,因此仍应记录。记录所有测试是否打开还不够好?还是我理解错了忽略的意思?
        • 我认为忽略会阻止 lint 检查运行。我在 Android Studio 或 lint 结果中看不到忽略的 lint 警告。
        • android { lintOptions { // 设置为 true 以关闭 lint 的分析进度报告 quiet true // 如果为 true,如果发现错误则停止 gradle 构建 abortOnError false // 如果为 true,仅报告错误忽略警告真 } }
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-23
        • 2013-07-06
        • 2023-03-23
        • 2013-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多