一.在Android Studio中,新建Module,选择Java Library,起名junte
二.自定义lint规则需要继承一些特定的类,所以需要在junte的build.gradle中添加依赖:
三.在junte中新建一个LoggerDetector类,用来检测用户代码中是否使用了android.util.Log类,如果有,就报告一个issue,代码如下:
传入的6个参数意义如下:
LogUtilsNotUseds: 我们这条lint规则的id,这个id必须是独一无二的。
You must use our 'LogUtils':对这条lint规则的简短描述。
Logging should be avoided in production for security and performance reasons. Therefore, we created a LogUtils that wraps all our calls to Logger and disable them for release flavor.:对这条lint规则更详细的解释。
Category.MESSAGES:类别。
9:优先级,必须在1到10之间。
Severity.ERROR:严重程度。其他可用的严重程度还有FATAL、WARNING、INFORMATIONAL、IGNORE。
Implementation:这是连接Detector与Scope的桥梁,其中Detector的功能是寻找issue,而scope定义了在什么范围内查找issue。在我们的例子中,我们需要在字节码级别分析用户有没有使用android.util.Log。
四.在junte中新建一个JunteLintRegistry类,它继承自IssueRegistry。这个类用来注册我们自己定义了哪些issue,代码如下:
五.对于自定义lint生成的jar,我们必须在它的清单文件中指明它的主类,通过配置junte的build.gradle文件来完成:
由于我们要把上一步生成的jar文件包含到一个aar中,配置如下:
六.新建一个Android Library项目,命名为junte_aar,用来输出aar:
在junte_aar的build.gradle的根节点加入以下内容:
七.在用户app中使用我们的自定义lint,在用户自己的应用程序module中,打开app的build.gradle文件,在dependencies中加入以下依赖:
这里我们在app的MainActivity中使用了android自带的Log功能:
在终端中,我们执行./gradlew lint来执行lint任务