Android 工程师需要了解的 Lint 知识入门篇

前言

项目开发过程中,通过对代码规范的约束对于代码质量的提升是非常重要的。这其中除了人为的代码审查之外,我们还可以使用 lint 工具来定位并修改一些有问题的代码,帮助提高我们的代码规范程度。今天我们就一起来学学 lint 的使用。

自动提示

Android Studio 内置了很多常用的 lint 规则,我们在平时中都能使用到。比如我们直接调用一些可能引发空指针的方法,就会出现如下图中的提示。我们平时开发过程中需要关注到这些提示并进行对应的修改。

Android 工程师需要了解的 Lint 知识入门篇_第1张图片

手动调用

除了自动提示,我们还可以在 Android Studio 的终端运行gradlew lint 就可以,等运行完成后会看到类似如下提示。

> Task :cameralibrary:lintSxfDebug
Wrote HTML report to file:///D:/project/app-project/build/reports/lint-results-sxfDebug.html

我们可以打开生成的 html 文件,具体对照着查看哪些代码是有问题的。

html 中详细的列出了检测出来的代码和具体的问题,如图所示。

Android 工程师需要了解的 Lint 知识入门篇_第2张图片
如果某些问题配置的错误等级是可以中断编译流程的,我们的 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 配合注解可以发挥更大的作用,在代码开发中,我们也可以适当的使用这些注解。

null 注解

@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) { }

Typedef 注解

@IntDef@StringDef 注解可以创建整数和字符串的集合来替代枚举的使用。代码如下。

@StringDef(IN, OUT)
@Retention(AnnotationRetention.SOURCE)
annotation class Type
​
const val IN = "IN"
const val OUT = "OUT"

我们在使用时就可以通过@TransContractType type: String 来约束传入的数据。

Keep 注解

@Keep 可以加在方法和类上,避免混淆时被删除。

总结

借助于 lint 工具,在平时开发中能够及时发现一些存在问题的代码,提高我们应用的可靠性,减少我们找 bug 的时间。也能够提高团队成员的代码规范性,整体上提高我们的工作效率。所以,赶快学起来用起来吧。

你可能感兴趣的:(Android,android,android,studio)