一、概述
Lint
是Android Studio
中提供的程式碼分析工具,它能夠檢查出程式碼當中存在的問題,定義該問題的嚴重程度,並給出相應的解決方案,這樣我們就可以快速地定位和修復問題。
整個lint
檢查的架構如下圖所示:
App Source Files
:對應於我們工程當中的原始檔,包括Java
程式碼、XML
檔案、Icons
圖片、ProGuard configuration files
。lint.xml
:定義了需要檢查的問題,以及該問題對應的等級。lint tool
:靜態的程式碼掃描工具,我們可以從命令列或者Android Studio
中啟動,它會根據lint.xml
中定義的規則,來檢查App Source Files
中的程式碼。lint
檢查結果:把lint tool
檢測出的問題分為不同的類別,方便開發者修復,目前問題分為以下幾類:
下面,我們就分以下幾部分來介紹lint
的使用:
- 定義
lint
檢查的範圍 - 如何使用
lint
- 使用
lint
檢查無用資源 Gradle
配置
二、Lint
使用
2.1 Lint
配置
選File -> Settings
,在其中搜尋lint
,可以得到如下的介面:
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
,之後會彈出一個視窗,然我們選擇需要檢查的問題型別:
2.2
一樣的選擇檢查檔案範圍的視窗:
假如我們選擇了Unused resources
,那麼最後的結果是這樣的,我們只會看到和這個問題相關的程式碼:
三、使用lint
刪除無用資原始檔
在經過一段時間的開發之後,我們專案中難免會出現無用的資原始檔,而Lint
就提供了很好的方式,平常,我們對於資源的無效引用方式主要有以下幾種:
3.1 drawable
在任何地方都沒有用到
這種方式很好理解,Lint
一定會為我們檢查出來
3.2 drawable
僅僅被style.xml
引用,但是style
沒有被Java
程式碼,或者xml
檔案引用:
此時檢測的結果為style
和drawable
沒有被引用:
3.3 drawable
被style.xml
引用,style
又被layout
引用,但是layout
沒有被引用:
此時檢測的結果為layout
、drawable
和style
沒有被引用
3.4 前面和3.3
相同,但是layout
被Java
程式碼所引用,而Java
程式碼沒有被引用:
這種情況,只通過Unused resources
是檢測不出來的,
這時候,就需要用到另外一個分類,Unused declaration
,此時的檢測結果為:
我們在上面點選右鍵,然後選擇Safe delete
就可以刪除這個類了。
3.5 小結
通過Unused declaration
和Unused resources
結合,就可以刪除我們大多數無用的資源,而小部分由於程式碼引用到,但是因為業務邏輯變了,導致不可能走到那一路的邏輯這種情況,就只能通過開發者自己處理了。
四、使用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'
}
}
複製程式碼
五、總結
通過lint
能在編寫程式碼的過程中,實時地發現一些問題,這不僅有利於提高應用的質量,我們還可以通過lint
提供的提示來了解到怎麼樣編寫高效的程式碼。
六、參考文獻
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 知識梳理系列:
- Android 知識梳理目錄:www.jianshu.com/p/fd82d1899…
- 個人主頁:lizejun.cn
- 個人知識總結目錄:lizejun.cn/categories/