Android 自定义lint规则 打包aar

2020-06-16  本文已影响0人  星辰大海TT

关于自定义lint的开发, 不是本文的重点, 网上有很多相关的博客文章,推荐几篇
Android Studio 工具:Lint 代码扫描工具(含自定义lint)

Android自定义Lint实践

本文主要讨论写好的自定义lint.jar如何使用。

主要有两种方案:

1、google的自定义方案

http://tools.android.com/tips...

这个是google的官方解决方案,需要将写好的lint.jar拷贝到开发人员机器中的.android/lint文件夹下,再下一次运行Android Studio时,AS会检测其内的jar文件。

缺点:开发人员的机器上所有的Android工程都会受到影响,而且每个开发人员都需要拷贝到自己的机器上。

2、LinkedIn方案

https://engineering.linkedin....

LinkedIn提供了另一种思路 : 将lint.jar放到一个aar中。将需要lint检测的项目中引入这个aar,仅对当前工程有效。

google 的官方文档也提到过aar中可以包含lint.jar。https://developer.android.com/studio/projects/android-library.html#aar-contents

如图所示:

Screenshot from 2020-06-15 11-15-02.png

但是google没有给出aar如何包含jar的具体步骤。

2.1、LinkedIn方案具体步骤

需要我们建一个Java library和Android library。Java library是我们定义的lint规则,Android library是我们定义的空的android library,只为了打包aar。
先看下完整的项目图:

downloadfile (1).png

如图所示:

lint_library 是java-library,里面存放我们写的自定义lint的java类,编译后会生成lint.jar。

lint_module_aar 是一个空的Android library,专门用来引入lint.jar并打包成aar。
(文末附demo地址)

Android Gradle Plugin 3.4.0 之前打包

打包lint.jar进aar需要在lint_module_aar这个模块的build.gradle进行配置,网上大多数文章都是这样配置,包括LinkedIn的官方文档:

Screenshot from 2020-06-15 13-53-06.png

这种写法在Android Gradle Plugin 3.4.0之前是可以的。

Android Gradle Plugin 3.4.0 之后打包

按照网上大部分资料的写法,发现打包出来的aar文件中并没有包含lint.jar,导致生成的aar文件无效。这个问题搞了好久(大坑啊)
最后通过查阅google的官方文档,原来google在android gradle plugin 3.4.0之后用lintChecks不再支持将lint.jar打包进aar中。

Screenshot from 2020-06-15 14-03-42.png

https://developer.android.google.cn/studio/build/dependencies

就是说android gradle plugin 3.4.0之后,需要使用lintPublish, 而不能用lintChecks。

lintPublish的使用很简单,Google文档上也给出了示例:

只需在dependencies下使用lintPublish即可。

lintPublish project(":lint_library")

编译下lint_module_aar模块,可以发现在build/aar 目录下生成了aar文件,解压缩后可以看到里面包含了lint.jar。


Screenshot from 2020-06-15 15-56-33.png

2.2、使用AAR文件

有本地依赖或者上传远程仓库,这里只介绍本地依赖。将上小结生成的AAR文件拷贝在app的libs文件夹。并配置app组件的build.gradle


dependencies {
 implementation (name:'lnt_module_aar', ext:'aar')
}

到这里,就能使用自定义的lint规则了。如果不生效,重启Android Studio看看。

附上:

demo Github地址:https://github.com/wxkly8888/Android_lint_sample/

上一篇下一篇

猜你喜欢

热点阅读