性能優化工具知識梳理(8) Lint

1、概述

LintAndroid Studio中提供的代碼分析工具,它可以檢查出代碼當中存在的問題,定義該問題的嚴重程度,並給出相應的解決方案,這樣咱們就能夠快速地定位和修復問題。 整個lint檢查的架構以下圖所示:html

從圖中來看它包含如下幾個組件:

  • App Source Files:對應於咱們工程當中的源文件,包括Java代碼、XML文件、Icons圖片、ProGuard configuration files
  • lint.xml:定義了須要檢查的問題,以及該問題對應的等級。
  • lint tool:靜態的代碼掃描工具,咱們能夠從命令行或者Android Studio中啓動,它會根據lint.xml中定義的規則,來檢查App Source Files中的代碼。
  • lint檢查結果:把lint tool檢測出的問題分爲不一樣的類別,方便開發者修復,目前問題分爲如下幾類:

下面,咱們就分如下幾部分來介紹lint的使用:android

  • 定義lint檢查的範圍
  • 如何使用lint
  • 使用lint檢查無用資源
  • Gradle配置

2、Lint使用

2.1 Lint配置

File -> Settings,在其中搜索lint,能夠獲得以下的界面: bash

經過這個界面,咱們能夠配置在開發的過程當中須要檢測哪些問題,以及這些問題所對應的嚴重程度。 當咱們配置完成以後,將它保存爲一個新的 Profile,同時能夠將這個配置文件導出用於以後的項目:
它會保存成爲 xml文件,假如咱們相對於默認的配置有所修改,那麼會在文件中添加一條記錄:

2.2 使用Lint

2.2.1 配置檢查的範圍

使用Lint的步驟以下: 第一步:點擊Analyze -> Inspect Code,以後,會彈出下面的界面: 架構

上半部分是定義須要檢查的範圍:

  • Whole Project:整個工程
  • Module Browser-Browser:當前咱們所處的模塊
  • File xxx:某個文件
  • Custom Space:自定義的範圍,下拉列表中通常包括:
  • Project Files:全部項目文件
  • Project Production Files:項目的代碼文件
  • Project Test Files:項目的測試文件
  • OpenFiles:當前打開的文件
  • Module xx:某個模塊
  • Current File:當前文件

點擊右邊的……,能夠定義本身的Scope工具

在這裏,咱們能夠選擇須要分析的文件。

2.2.2 結果分析

咱們在上面選擇對整個項目進行分析,以後會在下面獲得分析的結果: 測試

  • 區域的最左邊提供了一組操做,咱們能夠經過它來改變結果展示的形式
  • 區域的中心列出了檢查的問題,當咱們點擊某條分析結果以後,會在右邊展示更爲具體的信息
  • 區域的右邊列出了分析的具體信息
  • Name:文件名
  • Location:文件所處位置
  • Problem synopsis :問題的具體描述,一般會給出解決的方法
  • Problen resolution:提供了一些快速修復問題的途徑,只須要點一下連接,就會執行它所描述的操做。
  • Suppress:若是想要忽略這條錯誤,那麼須要怎麼作。

2.3 只分析某個具體的問題

在上面的操做當中,咱們是分析了全部的問題,有時候,咱們只想處理某一方面的問題,那麼能夠經過另外一個入口來分析,Analyze -> Run inspection by name,以後會彈出一個窗口,然咱們選擇須要檢查的問題類型: gradle

選擇好以後,點回車,那麼就會彈出和 2.2同樣的選擇檢查文件範圍的窗口:
假如咱們選擇了 Unused resources,那麼最後的結果是這樣的,咱們只會看到和這個問題相關的代碼:

3、使用lint刪除無用資源文件

在通過一段時間的開發以後,咱們項目中不免會出現無用的資源文件,而Lint就提供了很好的方式,日常,咱們對於資源的無效引用方式主要有如下幾種:ui

3.1 drawable在任何地方都沒有用到

這種方式很好理解,Lint必定會爲咱們檢查出來spa

3.2 drawable僅僅被style.xml引用,可是style沒有被Java代碼,或者xml文件引用:

此時檢測的結果爲 styledrawable沒有被引用:

3.3 drawablestyle.xml引用,style又被layout引用,可是layout沒有被引用:

此時檢測的結果爲 layoutdrawablestyle沒有被引用

3.4 前面和3.3相同,可是layoutJava代碼所引用,而Java代碼沒有被引用:

這種狀況,只經過 Unused resources是檢測不出來的,
這時候,就須要用到另一個分類, Unused declaration,此時的檢測結果爲:
咱們在上面點擊右鍵,而後選擇 Safe delete就能夠刪除這個類了。

3.5 小結

經過Unused declarationUnused resources結合,就能夠刪除咱們大多數無用的資源,而小部分因爲代碼引用到,可是由於業務邏輯變了,致使不可能走到那一路的邏輯這種狀況,就只能經過開發者本身處理了。.net

4、使用gradle構建時的配置

當咱們使用Gradle構建時,能夠經過lintoptions配置選項,並定義是否須要中止編譯,強制讓開發者處理較爲嚴重的問題,這些選項以下表:

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'
    }
}
複製代碼

5、總結

經過lint能在編寫代碼的過程當中,實時地發現一些問題,這不只有利於提升應用的質量,咱們還能夠經過lint提供的提示來了解到怎麼樣編寫高效的代碼。

6、參考文獻

1.http://blog.csdn.net/lihenair/article/details/50915441 2.http://hubingforever.blog.163.com/blog/static/17104057920121069261691/ 3.http://www.jianshu.com/p/74a50b770816


更多文章,歡迎訪問個人 Android 知識梳理系列:

相關文章
相關標籤/搜索