自定義 Lint
如果你不熟悉自定義 Lint 的規(guī)則埠对,參考下面三篇就足夠了,其中「美團(tuán)」的教程 lint 版本比較低酬蹋,如果你要用新版可以忽略身笤。
下面有幾點(diǎn)上面的資料沒涉及到,做個(gè)補(bǔ)充
Lint 的依賴方式
通過參考資料知道斤彼,lint依賴的方式有兩種
- google:將 lint.jar 放到
~/.android/lint/
下分瘦,缺點(diǎn)是所有工程都會(huì)用 lint 規(guī)則,靈活度太差 - LinkedIn:用 aar 將 lint.jar 包裹琉苇,然后發(fā)布 aar嘲玫,哪個(gè)工程想用的話依賴 aar 即可
一般項(xiàng)目都會(huì)放棄 google 的做法,都會(huì)用第二種并扇,但是參考資料里面大都給了一個(gè)自己實(shí)現(xiàn)的方案(那會(huì) gradle 還沒做支持)去团,通過自定義 gradle configuration,進(jìn)行一個(gè)跨項(xiàng)目的 configuration 傳遞穷蛹,將 lint.jar copy 到 aar 工程中土陪,大概代碼是這樣的
lint-rules 工程
jar {
manifest {
attributes 'Lint-Registry': 'com.lint.TestLint'
}
}
configurations {
lintOutputJar
}
dependencies {
lintOutputJar files(jar)
}
lint-aar 工程
configurations {
lintImport
}
dependencies {
lintImport project(path: ":lint-rules", configuration: "lintOutputJar")
}
task copyLintJar(type: Copy){
from (configurations.lintOutputJar) {
rename {
String fileName ->
'lint.jar'
}
}
into 'build/intermediates/lint/'
}
通過 google-lint-samples 的示例代碼得知,gradle 已經(jīng)有默認(rèn)支持的 configuration 了肴熏,叫 lintPublish
鬼雀,所以只需要在 lint-aar 工程中這樣配置
/** Package the given lint checks library into this AAR */
dependencies {
lintPublish project(':lint-rules')
}
Lint 的坑
開發(fā)環(huán)境
Android Studio: 4.0.1
gradle version: 5.4.1
android-gradle-build-tools: 3.5.3
lint api: 27.0.1
按照自定義 Lint 教程一頓操作后,發(fā)現(xiàn) IDE 上可以完美提示蛙吏,但是用 ./gradlew lint
死活都不會(huì)把 error 報(bào)告到 xml 里源哩,lint 配置了 abortOnError=true
也不會(huì)報(bào)錯(cuò)鞋吉,report.xml里只有一條 Issue Obsolete custom lint check
。
參考文章里一般說的問題都是励烦,IDE 不會(huì)提示谓着,但是報(bào)告里會(huì)有,這次正好相反坛掠。于是想到了之前看到過的信息 lint 和 android-gradle-build-tools 的版本是有依賴關(guān)系的赊锚,有深坑,然后就查這方面的信息屉栓,結(jié)果查到了這篇 自定義lint 報(bào)錯(cuò):Obsolete custom lint check
最終把 lint api 的版本降低后就一切正常了改抡。
除此之外,新版本 lint 的 api 沒有文檔系瓢,注釋有的也沒有阿纤,只能靠猜靠調(diào)試,只能靠個(gè)人積累了夷陋。