Android - 将所有lint警告设置为错误,但某些错误除外

时间:2017-03-10 00:10:53

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

当我引入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检查时我都必须更新列表。

3 个答案:

答案 0 :(得分:3)

如果您不使用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一起测试它,但是我没有理由认为它不能在那里工作。

答案 1 :(得分:2)

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', ...
    }     
}

答案 2 :(得分:1)

对我来说,这种配置有效:

class CereCell : DatasourceCell {

    override var datasourceItem: Any?{
        didSet {
            guard let cere = datasourceItem as? CeremonyDay else { return }
            nameLabel.text = cere.name
            nameLabel.frame = CGRect(x: 0, y: 0, width: 10, height: 10)
currentBar.frame = CGRect(x: 100, y: 100, width: cere.percentage*100 , height: 10)

            position.x = cere.percentage

        }
    }

    let currentBar: UIView =  {
        let currentBar = UIView(frame: CGRect(x: 290, y: 100, width: 300, height: 10))
        currentBar.backgroundColor = .red
        return currentBar
    }()


    override func setupViews() {
        super.setupViews()
        contentView.addSubview(currentBar)
        let frame = currentBar.frame
print(frame)

似乎选项是按照“正确的顺序”(也就是“根据需要”)进行评估的,即首先将所有警告提升为错误,然后针对单个问题ID再次覆盖此设置。使用android { lintOptions { warningsAsErrors true warning 'MissingTranslation', ... } } 而不是warningdisable可以确保问题在报告或IDE中仍然可见。