作者:猛猛的小盆友
一、前言
今天分享的是 lintOptions 配置,其作用是 协助我们发现项目中代码质量问题。
二、LintOptions 的结构简析
2.1 LintOptions 的存在位置
android {
lintOptions {
// lintOptions 的配置
}
}
复制代码
2.2 LintOptions 的继承
按照老规矩,我们知道 gradle 的配置均会映射到一个java类。
LintOptions 映射到 com.android.build.gradle.internal.dsl.LintOptions
类,其继承结构如下
graph LR
A[LintOptions] -.-> B[com.android.builder.model.LintOptions]
A[LintOptions] -.-> C[Serializable]
复制代码
2.3 LintOptions 运行
./gradlew app:lint
复制代码
注意小点
- window环境使用
gradlew
,mac 使用./gradlew
- 使用
app:lint
可以追加变体,我们这里只有release
和debug
所以,可以使用app:lintRelease
和app:lintDebug
分别对变体运行检查。
三、LintOptions 的属性
3.1 abortOnError
- 类型:boolean
- 描述:是否发现错误,则停止构建。
- 使用方法:
lintOptions {
abortOnError true
}
复制代码
- 啰嗦一下: 平常在打release包的时候,lint会默认开启检查,所以有时会看到类似如下的提示:
> Lint found errors in the project; aborting build.
Fix the issues identified by lint, or add the following to your build script to proceed with errors:
...
android {
lintOptions {
abortOnError false
}
}
...
The first 3 errors (out of 6) were:
/Users/zinc/Documents/code/gradle/GradleStudy/app/src/main/res/drawable/ic_arrow_drop_down_black_24dp.xml:1: Error: The resource R.drawable.ic_arrow_drop_down_black_24dp appears to be unused [UnusedResources]
<vector xmlns:android="http://schemas.android.com/apk/res/android"
^
/Users/zinc/Documents/code/gradle/GradleStudy/app/src/main/res/drawable/ic_launcher_background.xml:2: Error: The resource R.drawable.ic_launcher_background appears to be unused [UnusedResources]
<vector xmlns:android="http://schemas.android.com/apk/res/android"
^
/Users/zinc/Documents/code/gradle/GradleStudy/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: Error: The resource R.mipmap.ic_launcher_round appears to be unused [UnusedResources]
复制代码
此时我们有两个解决方案:
- 将 abortOnError 置为false,让错误不会中止我们的编译,但不建议这么做。
- 解决检测出来的问题,让编译正常运行,以上面这一段为例,则是将没有使用到的资源进行移除即可。
3.2 absolutePaths
- 类型:boolean
- 描述:报告文档是否输出全路径,默认为相对路径
- 使用方法:
lintOptions {
absolutePaths false
}
复制代码
相对路径时,图中红色部分路径则相对于我们设置该属性的 gradle 文件做起始地。
3.3 check
- 类型:Set< String >
- 描述:设置只检查的类型。
可以设置的类型id可以使用
lint --list
进行查看
- 使用方法:
lintOptions {
// 只检查 未使用的 资源
check 'UnusedResources'
}
复制代码
3.4 checkAllWarnings
- 类型:boolean
- 描述:是否检查所有警告,默认情况下,有些警告的检查类型是关闭的。开启时,则会全部检查。
- 使用方法:
lintOptions {
checkAllWarnings true
}
复制代码
3.5 checkReleaseBuilds
- 类型:boolean
- 描述:在 release 版本是否检查 fatal 类型错误,默认release版本为开启。开启后,检查到 fatal 类型错误则会关闭。
- 使用方法:
lintOptions {
checkReleaseBuilds true
}
复制代码
3.6 disable
- 类型:Set< String >
- 描述:关闭某个检查的类型,填写的值为类型的id,可以通过
lint --list
查看支持的id。 - 使用方法:
lintOptions {
// 关闭 UnusedResources 检查
disable 'UnusedResources'
}
复制代码
3.7 enable
- 类型:Set< String >
- 描述:开启某个检查的类型,填写的值为类型id,可以通过
lint --list
查看支持的id。 - 使用方法:
lintOptions{
enable 'UnusedResources'
}
复制代码
3.8 htmlOutput
- 类型:File
- 描述:指定一个文件,用于输出 html 类型的文件。会覆盖原有的内容。
- 使用方法:
lintOptions {
// 指定输出到 htmlReport.html 文件,相对的路径是设置这个属性的gradle的地址。
htmlOutput file('htmlReport.html')
}
复制代码
3.9 htmlReport
- 类型:boolean
- 描述:是否输出 html 类型报告,默认开启
- 使用方法:
lintOptions {
htmlReport true
}
复制代码
3.10 ignoreWarnings
- 类型:boolean
- 描述:是否忽略警告,只检查error。
- 使用方法:
lintOptions {
ignoreWarnings true
}
复制代码
3.11 lintConfig
- 类型:File
- 描述:配置用作备用的默认配置文件。如果有一个 检查的类型id 被设置为error级别的错误,而在 lintConfig 配置的文件中设置为ignore,最终还是被认为 error 级别,简而言之lintConfig优先级最低。
- 使用方法:
lintOptions {
lintConfig file('lint/rule_lint.xml')
}
复制代码
lint/rule_lint.xml 内容如下
<?xml version="1.0" encoding="utf-8"?>
<lint>
<!-- id可以通过 "lint \-\-list" 查看支持的id-->
<!-- severity 是设置的提示级别 -->
<issue id="UnusedResources" severity="error"/>
</lint>
复制代码
3.12 quiet
- 类型:boolean
- 描述:是否关闭一些信息输出,例如报告文件路径的输出
- 使用方法:
lintOptions {
quiet true
}
复制代码
3.13 showAll
- 类型:boolean
- 描述:是否输出全信息,不对信息缩减。
- 使用方法:
lintOptions {
showAll true
}
复制代码
3.14 textOutput
- 类型:File
- 描述:检查报告以文本类型输出的路径。
- 使用方法:
lintOptions {
textOutput file('report/zincTextReport.txt')
}
复制代码
3.15 textReport
- 类型:boolean
- 描述:是否开启检查报告以文本类型输出。
- 使用方法:
lintOptions {
textReport true
}
复制代码
3.16 warningsAsErrors
- 类型:boolean
- 描述:是否将全部的警告作为错误输出
- 使用方法:
lintOptions {
warningsAsErrors true
}
复制代码
3.17 xmlOutput
- 类型:File
- 描述:检查报告以xml类型输出的路径。
- 使用方法:
lintOptions {
xmlOutput file('report/zincXmlReport.xml')
}
复制代码
3.18 xmlReport
- 类型:boolean
- 描述:是否开启检查报告以文本类型输出。
- 使用方法:
lintOptions {
xmlReport true
}
复制代码
四、LintOptions 的方法
4.1 check
- check(id)
- check(ids)
id 只能添加一个,ids可以添加多个
描述:用于添加检查的类型id,id可以通过lint --list
查看。
使用方法:
lintOptions {
check 'id1'
check 'id1','id2'
}
复制代码
4.2 disable
- disable(id)
- disable(ids)
id 只能添加一个,ids可以添加多个
描述:用于关闭检查的类型id,id可以通过lint --list
查看。
使用方法:
lintOptions {
disable 'id1'
disable 'id1','id2'
}
复制代码
4.3 enable
- enable(id)
- enable(ids)
id 只能添加一个,ids可以添加多个
描述:用于开启检查的类型id,id可以通过lint --list
查看。
使用方法:
lintOptions {
enable 'id1'
enable 'id1','id2'
}
复制代码
4.4 error
- error(id)
- error(ids)
id 只能添加一个,ids可以添加多个
描述:用于将检查的类型id置为 error错误。
使用方法:
lintOptions {
error 'id1'
error 'id1','id2'
}
复制代码
4.5 fatal
- fatal(id)
- fatal(ids)
id 只能添加一个,ids可以添加多个
描述:用于将检查的类型id置为 fatal错误。
使用方法:
lintOptions {
fatal 'id1'
fatal 'id1','id2'
}
复制代码
4.5 ignore
- ignore(id)
- ignore(ids)
id 只能添加一个,ids可以添加多个
描述:用于将检查的类型id置为 ignore忽略。
使用方法:
lintOptions {
ignore 'id1'
ignore 'id1','id2'
}
复制代码
4.6 warning
- warning(id)
- warning(ids)
id 只能添加一个,ids可以添加多个
描述:用于将检查的类型id置为 warning错误。
使用方法:
lintOptions {
warning 'id1'
warning 'id1','id2'
}
复制代码