使用Android Studio Lint靜態分析(三)

主要內容

  1. 在終端經過Gradle命令執行Lint檢查。
  2. 在編譯時進行lint檢查。
  • Android Studio中Project目錄下有兩個文件gradlewgradlew.bat分別是在Mac/Linux系統和Windows系統上的Gradle命令工具。在Mac系統Project目錄下執行./gradlew -p ${module_dir} lint命令,就能夠執行對指定module按照Android Studio默認支持的掃描規則進行Lint檢查。html

  • Gradle提供了名爲lintOptions的插件對Lint掃描進行個性化配置。android

Gradle文件中的Lint配置

在${module_dir}/build.gradle文件android塊內使用DSL對象lintOptions對Lint進行配置,配置項能夠參考Android Plugin DSL Reference: LintOptionsgit

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

  1. 檢查結果警報級別四個:fatal、error、warning、ignore。
  2. 檢查結果輸出方式三種:textReport、htmlReport、xmlReport,每一種都有開關並能夠指定輸出位置。後兩種默認放在${module_dir}/build/reports/目錄下。
  3. enable、disable是對某些檢查作臨時的開關設置。
  4. lintConfig指定一個lint文件,文件的內容格式與使用Android Studio Lint靜態分析(二)中的lint.xml同樣,文件名沒必要指定爲lint.xml,文件路徑傳給lintConfig的file作參數。

配置本地編譯時執行lint檢查

配置Gradle腳本可實現編譯Android工程時執行Lint檢查:好處是既能夠儘早發現問題,又能夠有強制性;缺點是對編譯速度有必定的影響。api

編譯Android工程執行的是assemble任務,讓assemble依賴lint任務,便可在編譯時執行Lint檢查;同時配置LintOptions,發現Error級別問題時中斷編譯。app

  • 在Application模塊的gradle中加入配置
android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def lintTask = tasks["lint${variant.name.capitalize()}"]
        output.assemble.dependsOn lintTask
    }
}
複製代碼
  • 在library模塊的gradle中加入配置
android.libraryVariants.all { variant ->
    variant.outputs.each { output ->
        def lintTask = tasks["lint${variant.name.capitalize()}"]
        output.assemble.dependsOn lintTask
    }
}
複製代碼

參考文章

相關文章
相關標籤/搜索