作者:猛猛的小盆友

 

一、前言

今天分享的是 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 可以追加变体,我们这里只有 releasedebug 所以,可以使用 app:lintReleaseapp: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]
复制代码

此时我们有两个解决方案:

  1. 将 abortOnError 置为false,让错误不会中止我们的编译,但不建议这么做
  2. 解决检测出来的问题,让编译正常运行,以上面这一段为例,则是将没有使用到的资源进行移除即可。

3.2 absolutePaths

  • 类型:boolean
  • 描述:报告文档是否输出全路径,默认为相对路径
  • 使用方法:
lintOptions {
	absolutePaths false
}
复制代码

相对路径时,图中红色部分路径则相对于我们设置该属性的 gradle 文件做起始地。

Android R源码关闭lint检测_Android R源码关闭lint检测

 

 

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'
}
复制代码