【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错

首先当你看到这个标题的你不要急着想去怎么解决,而要去想lint这个东东到底是个什么玩意儿。我摘录了lint的英文原文介绍,希望能给大家带来了解,英文原文地址http://tools.android.com/tips/lint

Android Lint is a new tool introduced in ADT 16 (and Tools 16) which scans Android project sources for potential bugs. It is available both as a command line tool, as well as integrated with Eclipse (described below), and IntelliJ (details). The architecture is deliberately IDE independent so it will hopefully be integrated with other IDEs, with other build tools and with continuous integration systems as well.

英译:Android Lint是在ADT16引入的一个新工具,它能够扫描到安卓项目中的潜在bug,它既可以作为命令行使用,也可以在eclipse和as等集成环境中使用。这个工具是与集成开发环境无关的,因此可以很好的与其他集成开发环境以及构建工具集成起来。

Here are some examples of the types of errors that it looks for:

  • Missing translations (and unused translations)
  • Layout performance problems (all the issues the old layoutopt tool used to find, and more)
  • Unused resources
  • Inconsistent array sizes (when arrays are defined in multiple configurations)
  • Accessibility and internationalization problems (hardcoded strings, missing contentDescription, etc)
  • Icon problems (like missing densities, duplicate icons, wrong sizes, etc)
  • Usability problems (like not specifying an input type on a text field)
  • Manifest errors

英译:它能够找到代码中的如下错误

  • 丢失和未使用的翻译(这个没太搞懂意思,按照理解应该是未定义或者未使用的变量的意思)
  • 布局性能(以前是 layoutopt工具,可以解决无用布局、嵌套太多、布局太多)
  • 未使用到资源
  • 不一致的数组大小
  • 可访问性和国际化问题(硬编码字符串,内容描述等)
  • 图标的问题(重复的图标,错误的大小)
  • 可用性问题(如不指定的文本字段的输入型)
  • manifest文件的错误

Android官方也总结了lint可以解决的问题

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

既然这个工具这好用,那我们该怎么用呢?

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

然后再选择扫描的范围

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

点击ok后就可以开始扫描啦,下图展示了lint可以检查出来的所有问题分类

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

当然你也可以据此设置哪些检查包含在lint的检查范围内,哪些排除。

lint 虽然好用,能帮我们找出代码中不少的bug,但是有时候我们仅仅只想做一个与代码无关的项目测试,如笔者我就是搭建jenkins持续集成环境,然而在构建项目的时候经常由于lint错误终止,而这些错误又可能是第三方库中的,还有可能是由于开发的原因,lint检查出来的错误我们不可能立刻就去改正,因此想暂时性的禁止掉。我的报错情况是这样的

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

提示很明显了,我就去app下面的build.gradle里面添加lint禁用好了

    abortOnError false
}```

重新运行又报了如下的错误

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

提示也很明显了,我就去library下面的build.gradle里面添加lint禁用好了

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

然后重新再build项目,果然不再报错了,项目成功构建,激动啊

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

这个时候再去工作区里面查看,发现已经生成相应的apk文件了

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

当你再去点击下载的时候就会出现如下图所示的成功画面

《【android】gradle lint介绍以及通过禁用lint来解决lint相关的报错》

之前我在解决问题的时候没有太仔细去看日志报错,如上面的两张图片中的报错的模块位置是不一样的,结果我就以为设置abortOnError false不起作用,然后去网上搜禁用lint 的方法,主要是以下几种,稍微整理一下没准以后用得上:

1、如果你想永久的跳过lint检查,把下面的这段代码加到你app的build.gradle文件中,并且放到apply plugin: ‘com.android.application’之前

    if (task.name.equals("lint")) {
        task.enabled = false
    }
}```

> 2、如果你的项目当中包含了多个子项目,那么在**项目的build.gradle**文件下面添加如下代码
```task lintCheck() {
    getAllTasks(true).each {
        def lintTasks = it.value.findAll { it.name.contains("lint") }
        lintTasks.each {
            it.enabled = false
        }
    }
}```
> 3、添加如下代码到app下面的build.gradle中
```android {
    lintOptions {
        tasks.lint.enabled = false
    }
}```
> 4、添加如下代码到app下面的build.gradle中
```lintOptions { 
    abortonError false 
}```

**lint参考配置**

android {
lintOptions {
// 设置为 true时lint将不报告分析的进度
quiet true
// 如果为 true,则当lint发现错误时停止 gradle构建
abortOnError false
// 如果为 true,则只报告错误
ignoreWarnings true
// 如果为 true,则当有错误时会显示文件的全路径或绝对路径 (默认情况下为true)
//absolutePaths true
// 如果为 true,则检查所有的问题,包括默认不检查问题
checkAllWarnings true
// 如果为 true,则将所有警告视为错误
warningsAsErrors true
// 不检查给定的问题id
disable ‘TypographyFractions’,’TypographyQuotes’
// 检查给定的问题 id
enable ‘RtlHardcoded’,’RtlCompat’, ‘RtlEnabled’
// * 仅 * 检查给定的问题 id
check ‘NewApi’, ‘InlinedApi’
// 如果为true,则在错误报告的输出中不包括源代码行
noLines true
// 如果为 true,则对一个错误的问题显示它所在的所有地方,而不会截短列表,等等。
showAll true
// 重置 lint 配置(使用默认的严重性等设置)。
lintConfig file(“default-lint.xml”)
// 如果为 true,生成一个问题的纯文本报告(默认为false)
textReport true
// 配置写入输出结果的位置;它可以是一个文件或 “stdout”(标准输出)
textOutput ‘stdout’
// 如果为真,会生成一个XML报告,以给Jenkins之类的使用
xmlReport false
// 用于写入报告的文件(如果不指定,默认为lint-results.xml)
xmlOutput file(“lint-report.xml”)
// 如果为真,会生成一个HTML报告(包括问题的解释,存在此问题的源码,等等)
htmlReport true
// 写入报告的路径,它是可选的(默认为构建目录下的 lint-results.html )
htmlOutput file(“lint-report.html”)
// 设置为 true, 将使所有release 构建都以issus的严重性级别为fatal(severity=false)的设置来运行lint
// 并且,如果发现了致命(fatal)的问题,将会中止构建(由上面提到的 abortOnError 控制)
checkReleaseBuilds true
// 设置给定问题的严重级别(severity)为fatal (这意味着他们将会
// 在release构建的期间检查 (即使 lint 要检查的问题没有包含在代码中)
fatal ‘NewApi’, ‘InlineApi’
// 设置给定问题的严重级别为error
error ‘Wakelock’, ‘TextViewEdits’
// 设置给定问题的严重级别为warning
warning ‘ResourceAsColor’
// 设置给定问题的严重级别(severity)为ignore (和不检查这个问题一样)
ignore ‘TypographyQuotes’
}
}“`

如果文章当中有任何不正确的地方,还请广大读者纠正,非常感谢!

    原文作者:当时不是寻常
    原文地址: https://www.jianshu.com/p/326c91e344a8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞