项目开发过程中,通过对代码规范的约束对于代码质量的提升是非常重要的。这其中除了人为的代码审查之外,我们还可以使用 lint 工具来定位并修改一些有问题的代码,帮助提高我们的代码规范程度。今天我们就一起来学学 lint 的使用。
Android Studio 内置了很多常用的 lint 规则,我们在平时中都能使用到。比如我们直接调用一些可能引发空指针的方法,就会出现如下图中的提示。我们平时开发过程中需要关注到这些提示并进行对应的修改。
除了自动提示,我们还可以在 Android Studio 的终端运行gradlew lint
就可以,等运行完成后会看到类似如下提示。
> Task :cameralibrary:lintSxfDebug
Wrote HTML report to file:///D:/project/app-project/build/reports/lint-results-sxfDebug.html
我们可以打开生成的 html 文件,具体对照着查看哪些代码是有问题的。
html 中详细的列出了检测出来的代码和具体的问题,如图所示。
如果某些问题配置的错误等级是可以中断编译流程的,我们的 lint 流程也会被中断,并提示 BUILD FAILED in 1m 11s
,这时候我们就需要检查下具体的问题点并进行修改了。当然我们也可以在 build.gradle 文件中配置忽略中断编译,见下一小节。
在代码中我们可以使用@SuppressLint
来停止 lint 检查。@SuppressLint("MissingPermission")
可以禁止权限检查,@SuppressLint("all")
可以禁止所有检查。
在 xml 文件中也是同样的可以通过tools:ignore="NewApi,StringFormatInvalid"
来进行配置。
在模块的build.gradle
文件中,我们也可以进行一些配置,比如上一节中的忽略中断编译等。
android {
...
lintOptions {
// 禁止某些检查
disable 'TypographyFractions','TypographyQuotes'
// 开启某些检查
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
// 只开启某些检查,这个选项会覆盖上面两个选项
checkOnly 'NewApi', 'InlinedApi'
// true 关闭分析进度展示
quiet true
// true(默认)错误会中断编译
abortOnError false
// true 只报告 error
ignoreWarnings true
// 建立基准文件
baseline file("lint-baseline.xml")
}
}
...
这里的基准文件相对于当前版本的一个快照,第一次设置的时候会生成,之后的检查提示就会基于当前版本新增部分的代码进行了,而不是对已有代码进行,这样方便我们一些已有的项目也可以方便的使用 lint 检查了。
lint 配合注解可以发挥更大的作用,在代码开发中,我们也可以适当的使用这些注解。
@Nullable
代表可空
@NonNull
代表非空
代码中我们对于一些数据可以添加上这两个注解,当然在 kotlin 里面就不需要了。
@StringRes
等
我们设置一些资源时,这些资源系统都会时通过 R 类的 int 类型传递的,可能会导致传递错误,这个注解就是用在这种情况下的,类似的还有@DrawableRes @DimenRes @ColorRes
等。
@IntRange
、@FloatRange
、@Size
注解可以验证我们传递的参数。
fun setHour(@IntRange(from = 0, to = 24) h: Int) { }
fun setSpeed(@FloatRange(from = 0.0, to = 1.0) s: Float) { }
fun getLocation(@Size(2) list: List) { }
@IntDef
、@StringDef
注解可以创建整数和字符串的集合来替代枚举的使用。代码如下。
@StringDef(IN, OUT)
@Retention(AnnotationRetention.SOURCE)
annotation class Type
const val IN = "IN"
const val OUT = "OUT"
我们在使用时就可以通过@TransContractType type: String
来约束传入的数据。
@Keep
可以加在方法和类上,避免混淆时被删除。
借助于 lint 工具,在平时开发中能够及时发现一些存在问题的代码,提高我们应用的可靠性,减少我们找 bug 的时间。也能够提高团队成员的代码规范性,整体上提高我们的工作效率。所以,赶快学起来用起来吧。