- 在終端經過Gradle命令執行Lint檢查。
- 在編譯時進行lint檢查。
Android Studio中Project目錄下有兩個文件gradlew和gradlew.bat分別是在Mac/Linux系統和Windows系統上的Gradle命令工具。在Mac系統Project目錄下執行./gradlew -p ${module_dir} lint命令,就能夠執行對指定module按照Android Studio默認支持的掃描規則進行Lint檢查。html
Gradle提供了名爲lintOptions的插件對Lint掃描進行個性化配置。android
在${module_dir}/build.gradle文件android塊內使用DSL對象lintOptions對Lint進行配置,配置項能夠參考Android Plugin DSL Reference: LintOptions。git
android {
lintOptions {
// true--關閉lint報告的分析進度
quiet true
// true--錯誤發生後中止gradle構建
abortOnError false
// true--只報告error
ignoreWarnings true
// true--忽略有錯誤的文件的全/絕對路徑(默認是true)
//absolutePaths true
// true--檢查全部問題點,包含其餘默認關閉項
checkAllWarnings true
// true--全部warning當作error
warningsAsErrors true
// 關閉指定問題檢查
disable 'TypographyFractions','TypographyQuotes'
// 打開指定問題檢查
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
// 僅檢查指定問題
check 'NewApi', 'InlinedApi'
// true--error輸出文件不包含源碼行號
noLines true
// true--顯示錯誤的全部發生位置,不截取
showAll true
// 回退lint設置(默認規則)
lintConfig file("default-lint.xml")
// true--生成txt格式報告(默認false)
textReport true
// 重定向輸出;能夠是文件或'stdout'
textOutput 'stdout'
// true--生成XML格式報告
xmlReport false
// 指定xml報告文檔(默認lint-results.xml)
xmlOutput file("lint-report.xml")
// true--生成HTML報告(帶問題解釋,源碼位置,等)
htmlReport true
// html報告可選路徑(構建器默認是lint-results.html )
htmlOutput file("lint-report.html")
// true--全部正式版構建執行規則生成崩潰的lint檢查,若是有崩潰問題將中止構建
checkReleaseBuilds true
// 在發佈版本編譯時檢查(即便不包含lint目標),指定問題的規則生成崩潰
fatal 'NewApi', 'InlineApi'
// 指定問題的規則生成錯誤
error 'Wakelock', 'TextViewEdits'
// 指定問題的規則生成警告
warning 'ResourceAsColor'
// 忽略指定問題的規則(同關閉檢查)
ignore 'TypographyQuotes'
}
}
複製代碼
下面前三條所涉及的配置項,後面跟的參數都是issue_id,這些ID值跟lint.xml文件中使用的ID是同一個集合。github
配置Gradle腳本可實現編譯Android工程時執行Lint檢查:好處是既能夠儘早發現問題,又能夠有強制性;缺點是對編譯速度有必定的影響。api
編譯Android工程執行的是assemble任務,讓assemble依賴lint任務,便可在編譯時執行Lint檢查;同時配置LintOptions,發現Error級別問題時中斷編譯。app
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def lintTask = tasks["lint${variant.name.capitalize()}"]
output.assemble.dependsOn lintTask
}
}
複製代碼
android.libraryVariants.all { variant ->
variant.outputs.each { output ->
def lintTask = tasks["lint${variant.name.capitalize()}"]
output.assemble.dependsOn lintTask
}
}
複製代碼