【工利其器】Android Lint篇——爲Android量身定作的靜態代碼審查工具

前言android

       咱們在進行代碼優化的時候,每每是經過開發者的經驗來判斷哪些代碼可能存在潛在問題,哪些資源的使用不合規範等。實際上Android SDK提供了一款功能很是強大的工具,來幫助開發者自動檢測代碼的質量及安全問題,這款工具就叫Android Lint。Lint提供了命令行方式以及與IDE集成的方式來執行,如今Android開發者基本上都使用Android Studio(後文簡稱AS,下同)來進行開發,強大的AS也集成了該工具,本文就基於AS3.2版原本介紹Lint。程序員

 

1、Android Lint簡介安全

       Android Lint是SDK Tools 16(ADT16,當前筆者使用的ADT已是26了,因此如今就不用擔憂本身所使用的SDK中不包含lint工具了)開始引入的一個代碼掃描工具,路徑爲:Sdk\tools\bin\lint.bat。經過它對Android工程源代碼進行掃描和檢查,可發現潛在的問題,以便程序員及早修正這個問題。經過Lint,無需實際執行應用,也沒必要編寫測試用例,就能夠檢查Android項目中源文件是否存潛在的錯誤,以及在正確性、安全性、性能、易用性、無障礙性和國際化方面是否須要優化改進。工具

 

2、Lint的工做原理佈局

       會使用Lint了,能夠簡單瞭解一下它的原理,即工做過程。Android Lint 的工做過程比較簡單,一個基礎的 Lint 過程由 Lint Tool(檢測工具),Source Files(項目源文件) 和 lint.xml(配置文件) 三個部分組成,Lint Tool 讀取 Source Files,根據 lint.xml 配置的規則(issue)輸出結果(以下圖)。性能

 

3、Lint在AS中的使用測試

       因爲如今Lint是直接集成到AS中的,因此能夠直接使用,無需再安裝。字體

  一、Lint的啓動優化

       Lint在Android Studio中的使用步驟很是簡單,有兩條途徑能夠啓動Lint:ui

    (1)從主菜單欄中啓動

       點擊主菜單 > Analyze > Inspect Code會彈出檢查範圍選擇對話框

    

該對話框用於選擇要檢查的範圍,根據實際須要選擇便可。其中選擇「Custom scope」時能夠自定義檢查範圍,

選擇好檢查範圍後,點擊「OK」後,Lint就開始啓動了,AS界面的底部會表示正在運行中,稍等一下子就能看到檢查結果了。

    (2)經過右鍵菜單啓動

       在AS界面文件或編輯界面點擊右鍵,在彈出的菜單中也能夠看到「Analyze  > Inspect Code」選項,後面就和上面的方法同樣了,這裏再也不贅述。

 二、查看檢查結果

       檢查完成後會能夠看到以下界面板了:

 

在這個面板中,「Lint檢查結果區」展現的就是經過Lint工具檢查出來的結果。當點擊這些結果中的問題項時,能夠在右邊看到該類問題或者具體問題的詳情,而後自動完成修改或者根據對問題的描述手動修改。

  三、結果面板功能說明

        上述結果面板從左到右能夠分爲三個大區域:工具欄,結果區和問題詳情區。

     (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的基本使用仍是比較簡單的。

 

4、對Lint進行設置

  一、進入設置界面的兩種方式

       有兩種途徑能夠進入到Lint的設置界面:

    (1)File > Settings > Editor > Inspections;

    (2)Lint控制面板工具欄的設置按鈕,即第二節中的按鈕⑤。

  二、設置面板預覽

 三、設置項功能介紹

       設置界面中的各個區域和按鈕的功能都在圖中標註了,這裏再對按鈕①和按鈕②進行說明。

    (1)篩選按鈕   

       這是一個下拉框,經過該處能夠篩選要顯示的功能項。

    (2) 問題嚴重等級設置

  

下拉列表,會顯示能夠自定義的等級及對應顏色,能夠經過此處編輯選擇項的嚴重等級。點擊「Edit severities」能夠添加新的嚴重等級,以及編輯各等級德顏色和字體。固然,系統默認的問題嚴重性等級和這裏略有區別,系統默認的嚴重等級由高到低依次爲:Fatal、Error、Warning、Information、Ignore 5個等級。

 

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格式等

 

6、根據規則名稱來檢查

       有時候咱們須要明確檢查某一類問題,好比查找項目中沒有使用的資源,並將它們刪除,它們會耗性能。能夠經過以下的方式來找到這些沒有使用的資源:點擊Analyze > Run Inspection By Name,會彈出對話框

輸入該規則的名稱,按「Enter」鍵,提示選擇檢查範圍:

點擊「OK」按鈕,結果中只會顯示「Unused resoures」的問題項目:

該功能能幫咱們明肯定位某一類問題。

 

7、自定義Lint

       對於多數狀況,默認的Lint已經足夠使用了,但總有一些需求是Lint自帶規則不能知足的,這個時候就須要自定義Lint規則了。固然,限於筆者對Liint的使用經驗有限,對自定義Lint還不太熟悉,這裏推薦一篇文章,有興趣的能夠深刻研究:

自定義Lint實踐https://blog.csdn.net/ouyang_peng/article/details/80374867

 

參考:

       http://www.javashuo.com/article/p-nnisujjk-ns.html

       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常見的一些使用方法,必定還有不少很牛的功能,但願讀者們多多探索,多多交流,共同進步,謝謝!

相關文章
相關標籤/搜索