自定义Lint检查规则


LintAndroid Studio里面提供的一个代码检查工具,相信大多数Android开发者都用过或了解过Lint,它可以用来对项目做一些基本的但却非常有必要的代码检查,以帮助开发者提升程序的可靠性和性能,以及提高程序的可维护性。比如:XML中存在无用的命名空间代码中调用了已被弃用的API多余的装箱操作等,Lint通通可以一次检查出来并给予提示和修改建议。

然而这样的检查仅限于检查Lint支持的问题,并且需要开发者主动操作进行检查。那我们可不可以自定义Lint检查规则呢?可不可以让Lint在我们输入代码的时候就给出错误提示呢?或者在编译项目的时侯自动检查呢?答案是:可以的。

这篇文章我们将着重讲解自定义Lint检查规则Lint自动检查配置。但在开始之前,不妨先简单介绍一下Lint的基本使用方法。


一、Lint基本使用介绍

有两种方式可以运行Lint检查。


1. 界面操作

在 Android Studio中选择 Analyze -> Inspect Code,会弹出如下对话框:

在这个对话框中有两个可配置项:

  • Inspection scope:选择检查的范围,可以选择整个项目检查或是只检查某些模块,也可以自定义检查范围。
  • Inspection profile:用来配置检查的问题项,这里点进去可以看到Lint内置的所有检查项。比如下图中用红色框标出来的,表示它支持检查Handler引用可能导致内存泄漏的问题。如果想取消某项检查,只需取消勾选就行。
    在这里插入图片描述

点击Ok按钮,即启动Lint检查。

检查完成之后,Android Studio底部将弹出一个检查结果对话框,列出所有检查到的问题及所在文件位置,点击即可直接打开文件进行修改。如下图所示:
在这里插入图片描述


2 命令行运行

Terminal中输入命令行

gradlew lint

即可启动Lint检查。检查完成后会生成一份名叫 lint-results.html的文档,列出所有检查到的问题。

以上两种运行Lint的方式,我个人偏向于使用第一种,因为比较直观,而且检查完成后可以直接定位修改问题。

更详细的关于Lint的使用方法,请参考官方文档 Improve your code with lint checks



二、自定义Lint规则


前面我们介绍了如何运行Android Studio自带的Lint检查,以及介绍了如何查看或者勾选/取消其自带的检查规则。
自定义Lint检查规则,其实就是把自己写的规则加入到Lint里面去。这个过程有些麻烦,下面我们分步来讲解。

请注意:在不同版本的Android Studio里面,Lint检查的版本有所不同。这篇文章的内容只针对 Android Studio 4 以上的版本。


第一步:创建一个Lint规则库

首先,我们要单独建一个 Java库来写自定义的Lint规则。请注意,是 Java Library,不是 Android Library

要自定义Lint检查规则,首先需要导入两个Lint官方库,导入方式为 compileOnly,因为Lint检查只在编译时有效。

dependencies {    
        compileOnly 'com.android.tools.lint:lint-api:27.1.1'    
        compileOnly 'com.android.tools.lint:lint-checks:27.1.1'
}

注意:这两个库的版本号必须与Android Studio里面Lint的版本号对应起来,对应关系是 Gradle plugin的版本号加上23要等于这两个库的版本号。例如这两个库的版本号是 27.1.1,那么com.android.tools.build:gradle的版本号就应该是 4.1.1,如下:

dependencies {    
        classpath "com.android.tools.build:gradle:4.1.1"   
}

版本号如果不匹配,自定义的Lint规则将无法生效。

导入合适的库之后就可以开始自己写检查规则了,自定义规则有三个重要的类:

  • Detector :用来寻找和定位代码中的问题。我们需要创建自己的探测器,来检查代码;
  • Issue:用来定义和描述问题;
  • IssueRegistry:问题注册器,通过该注册器,我们可以把自定义的问题注册到Android Studio里面。

我们以一个例子来详细介绍上面这三个类以及自定义Lint规则的整个过程。

假设我们的项目中封装了一个打印日志的类,名叫 LogUtil,我们希望项目中所有要打印日志的地方都使用该类提供的方法。如果有人直接调用了 android.util.Log 来打印日志,我们就让Android Studio报错,并提示他/她使用已经封装好的 LogUtil类。


1.1 定义Issue

Issue所定义的就是前面的 Inspection profile列表里面的问题项。可以用如下方法创建一个Issue:


                
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值