【工利其器】必會工具之(九)Android Lint篇——為Android量身定做的程式碼審查利器
- 2019 年 11 月 11 日
- 筆記
前言
我們在進行程式碼優化的時候,往往是通過開發者的經驗來判斷哪些程式碼可能存在潛在問題,哪些資源的使用不合規範等。實際上Android SDK提供了一款功能非常強大的工具,來幫助開發者自動檢測程式碼的品質及安全問題,這款工具就叫Android Lint。Lint提供了命令行方式以及與IDE集成的方式來執行,現在Android開發者基本上都使用Android Studio(後文簡稱AS,下同)來進行開發,強大的AS也集成了該工具,本文就基於AS3.2版本來介紹Lint。
一、Android Lint簡介
Android Lint是SDK Tools 16(ADT16,當前筆者使用的ADT已經是26了,所以現在就不用擔心自己所使用的SDK中不包含lint工具了)開始引入的一個程式碼掃描工具,路徑為:Sdktoolsbinlint.bat。通過它對Android工程源程式碼進行掃描和檢查,可發現潛在的問題,以便程式設計師及早修正這個問題。通過Lint,無需實際執行應用,也不必編寫測試用例,就可以檢查Android項目中源文件是否存潛在的錯誤,以及在正確性、安全性、性能、易用性、無障礙性和國際化方面是否需要優化改進。
二、Lint的工作原理
會使用Lint了,可以簡單了解一下它的原理,即工作過程。Android Lint 的工作過程比較簡單,一個基礎的 Lint 過程由 Lint Tool(檢測工具),Source Files(項目源文件) 和 lint.xml(配置文件) 三個部分組成,Lint Tool 讀取 Source Files,根據 lint.xml 配置的規則(issue)輸出結果(如下圖)。
三、Lint在AS中的使用
由於現在Lint是直接集成到AS中的,所以可以直接使用,無需再安裝。
1、Lint的啟動
Lint在Android Studio中的使用步驟非常簡單,有兩條途徑可以啟動Lint:
(1)從主菜單欄中啟動
點擊主菜單 > Analyze > Inspect Code會彈出檢查範圍選擇對話框
該對話框用於選擇要檢查的範圍,根據實際需要選擇即可。其中選擇“Custom scope”時可以自定義檢查範圍,
選擇好檢查範圍後,點擊“OK”後,Lint就開始啟動了,AS介面的底部會表示正在運行中,稍等一會兒就能看到檢查結果了。
(2)通過右鍵菜單啟動
在AS介面文件或編輯介面點擊右鍵,在彈出的菜單中也可以看到“Analyze > Inspect Code”選項,後面就和上面的方法一樣了,這裡不再贅述。
2、查看檢查結果
檢查完成後會可以看到如下介面板了:
在這個面板中,“Lint檢查結果區”展示的就是通過Lint工具檢查出來的結果。當點擊這些結果中的問題項時,可以在右邊看到該類問題或者具體問題的詳情,然後自動完成修改或者根據對問題的描述手動修改。
3、結果面板功能說明
上述結果面板從左到右可以分為三個大區域:工具欄,結果區和問題詳情區。
(1)工具欄
工具欄中提供了多個常用的功能,把滑鼠移到圖標上時會給出相應的提示,這裡對部分按鈕進行說明:
1)圖中①處,Group By Serverity:檢查結果按照問題嚴重程度分組。
2)圖中②處,Group By Directory:檢查結果按照目錄分組。
3)圖中③處,Filter resolved items:過濾掉已經解決的問題項。
4)圖中④處,Export:導出為HTML或者XML文檔。
5)圖中⑤處,Edit Settings:編輯設置,通過這裡可以對Lint進行設置,後面會詳細介紹。
6)圖中⑥處,Apply a quickfix:快速修復,點擊這裡可以直接對所選問題進行快速修復。
(2)檢查結果區
由於這裡檢查程式碼不僅僅只有Lint在工作,還有很多其它插件也在執行,所以結果中有很多其它工具檢查出來的問題,Android > Lint下面的目錄就是Lint的結果區了。如果展開Lint的結果,會發現這些問題都是Android所特有的問題,比如布局文件、控制項、AndroidManifest文件中的問題,可見Lint就是為Android而量身定做的。默認時這些結果是按照一定的分類來分組的,比如,Correctness、Performance、Security等,這問題類型是否需要檢查,也是在設置中設置的,後面會詳細介紹。當然通過這個結果區還可以看到Java、Kotlin、Spelling等的問題,也一樣解決。
(3)問題詳情區
如果滑鼠在結果區選擇的是某一類問題,這部分顯示了所選問題的詳情,解決建議,以及快速修復等功能。其中“Run inspection on”按鈕,點擊後會彈出如下對話框:
這裡選擇在哪個範圍內檢查同類問題。
如果在結果區選擇的是具體的問題項,那麼右邊顯示的就是對問題所在的位置進行預覽。如下圖所示:
通過上面的介紹,可以看到Lint的基本使用還是比較簡單的。
四、對Lint進行設置
1、進入設置介面的兩種方式
有兩種途徑可以進入到Lint的設置介面:
(1)File > Settings > Editor > Inspections;
(2)Lint控制面板工具欄的設置按鈕,即第二節中的按鈕⑤。
2、設置面板預覽
3、設置項功能介紹
設置介面中的各個區域和按鈕的功能都在圖中標註了,這裡再對按鈕①和按鈕②進行說明。
(1)篩選按鈕
這是一個下拉框,通過該處可以篩選要顯示的功能項。
(2) 問題嚴重等級設置
下拉列表,會顯示可以自定義的等級及對應顏色,可以通過此處編輯選擇項的嚴重等級。點擊“Edit severities”可以添加新的嚴重等級,以及編輯各等級德顏色和字體。當然,系統默認的問題嚴重性等級和這裡略有區別,系統默認的嚴重等級由高到低依次為:Fatal、Error、Warning、Information、Ignore 5個等級。
五、Lint問題種類
從設置面板中可以看到,問題可以分為如下幾個大類:
(1)Accessibility 輔助選項,比如ImageView的contentDescription往往建議在屬性中定義等。
(2)Compliance 合規性,違反了Google Play的要求,比如使用了過期的庫版本,性能、安全性、API等級等沒有遵循新系統的要求等。
(3)Correctness 不夠完美的編碼,比如硬編碼、使用過時API等。
(4)Internationalization 國際化,直接使用漢字,沒有使用資源引用等
(5)Interoperability 互操作性,比如和Kotln的交互等。
(6)Performanc 對性能有影響的編碼,比如:靜態引用,循環引用等
(7)Security 不安全的編碼,比如在 WebView 中允許使用 JavaScriptInterface等
(8)Usability 可用的,有更好的替換的 比如排版、圖標格式建議.png格式等
六、根據規則名稱來檢查
有時候我們需要明確檢查某一類問題,比如查找項目中沒有使用的資源,並將它們刪除,它們會耗性能。可以通過如下的方式來找到這些沒有使用的資源:點擊Analyze > Run Inspection By Name,會彈出對話框
輸入該規則的名稱,按“Enter”鍵,提示選擇檢查範圍:
點擊“OK”按鈕,結果中只會顯示“Unused resoures”的問題項目:
該功能能幫我們明確定位某一類問題。
七、自定義Lint
對於多數情況,默認的Lint已經足夠使用了,但總有一些需求是Lint自帶規則不能滿足的,這個時候就需要自定義Lint規則了。當然,限於筆者對Liint的使用經驗有限,對自定義Lint還不太熟悉,這裡推薦一篇文章,有興趣的可以深入研究:
自定義Lint實踐https://blog.csdn.net/ouyang_peng/article/details/80374867。
參考:
https://blog.csdn.net/luzhenyuxfcy/article/details/79398761
http://tools.android.com/tips/lint
https://developer.android.google.cn/studio/write/lint
https://blog.csdn.net/hudashi/article/details/8333349
https://www.jianshu.com/p/9eaf7c0eee67
結語
本文只介紹了Android Lint常見的一些使用方法,一定還有很多很牛的功能,希望讀者們多多探索,多多交流,共同進步,謝謝!