在保證代碼沒有功能問題,完成業務開發之餘,有追求的程序員還要追求代碼的規範、可維護性。html
今天,以「成爲優秀的程序員」爲目標的拭心將和你們一塊兒精益求精,學習使用 Lint 優化咱們的代碼。java
Lint 是Android Studio 提供的 代碼掃描分析工具,它能夠幫助咱們發現代碼結構/質量問題,同時提供一些解決方案,並且這個過程不須要咱們手寫測試用例。android
Lint 發現的每一個問題都有描述信息和等級(和測試發現 bug 很類似),咱們能夠很方便地定位問題,同時按照嚴重程度進行解決。程序員
固然這個「嚴重程度」咱們能夠手動調節,有些原則問題不容侵犯,必須提高到 error,而有的個別問題也能夠無視,畢竟人非聖賢孰能無過嘛。android-studio
Lint 會根據預先配置的檢測標準檢查咱們 Android 項目的源文件,發現潛在的 bug 或者能夠優化的地方,優化的內容主要包括如下幾方面:安全
Lint 檢測代碼的過程以下圖所示:服務器
Lint 的命令很簡單:app
lint [flags] <project directory>
Lint 也可使用 Gradle 運行:ide
Windows:工具
gradlew lint
Mac:
./gradlew lint
具體命令行相關的操做這裏就不介紹了,由於這個過程實在太痛苦,上一張命令行運行 Lint 後獲得的 XML 文件截圖讓你體驗一下:
看着渾身不舒服,想了解如何從命令行使用 Lint 的同窗能夠點擊這裏前往官方學習。
咱們仍是直接進入 Lint 的 GUI 操做吧。
Android Studio 中內置了 Lint,咱們小手一點就能夠直接使用。
Lint 的使用路徑:
工具欄 -> Analyze -> Inspect Code…
點擊 Inspect Code 後會彈出檢查範圍的對話框:
默認是檢查整個項目,咱們能夠點擊 Custom scope 自定義檢查範圍。
點擊右邊的下拉框,會出現如下選擇:
分別有:
除了內置的選項咱們還能夠本身選擇特定的類進行檢查,點擊下圖中的紅色框部分:
會彈出自定義範圍選擇框,默認是空的,咱們能夠點擊左上角的「+」號新增一個檢查範圍:
- Local:只能當前項目使用
- Shared:其餘 Android Studio 項目也可使用
咱們選擇 Shared,而後起個帥氣的名字 「ShixinCuteLint」,默認按項目顯示,這時檢查的文件數爲 0 :
上圖中右邊的四個按鈕表示要操做的類型:
咱們點擊左邊的 app 文件夾後,點擊右邊的 Include Recursively 按鈕,把 app 下的全部文件添加到檢查列表:
能夠看到,這時 app 下的文件都變綠了,總共有 689 個文件夾要掃描。
點擊 OK 進行檢測,稍等一下子,會彈出 Inspection 對話框,顯示檢查結果,沒想到個人代碼竟然有 1769 個警告!這數字觸目驚心啊:
咱們主要關注紅框內的警告,先來看看個人代碼 Performance 有什麼問題:
哈哈,沒想到我還有這麼多進步空間!
上圖能夠看到,Lint 真是神器,能夠幫咱們發現本身忽略或者沒有意識到的問題,尤爲是性能方面,若是你以爲本身代碼想優化又不知道從何作起,不妨讓 Lint 給你指指路。
雖然 Lint 能夠幫咱們檢查代碼的問題,但多人合做時,咱們更指望能夠在寫代碼時就發現問題、解決問題。
鑑於團隊成員中水平參差不齊,靠我的意識有時候很難保證質量,這時能夠修改 Lint 對於特定問題的警告等級,以最直觀的 IDE 提示來警醒成員。
Lint 的警告嚴重程度有如下幾種:
平常開發中,好一點的程序員會關注 Warning 的警告,根據警告優化代碼,但那也只是不多一部分。可是紅色的 Error 就不同了,基本上看到就想要消滅掉。
咱們拿命名拼寫錯誤舉個例子。
類、對象、遍歷拼寫錯誤看起來不是什麼問題,可是若是你見過大量的無心義或者錯誤命名,你必定會贊同個人接下來作法。
默認的拼寫錯誤是 Typo ,提示很弱,因此常被人忽略:
上面的 String 類型變量 login 寫成了 logn,Lint 默認對拼寫錯誤是個下滑波浪線,很不起眼。咱們修改一下。
打開 Preferences/Settings,搜索 Inspections,會出現 Lint 的檢測配置頁面:
要修改拼寫的警告等級,搜索「spelling」:
而後選擇出現的 Typo,再點擊右邊的 Severity 就是嚴重程度,改爲 Error,OK。
能夠看到,如今拼寫錯誤就會出現紅色的錯誤警告了,讓你很差好寫變量名!
Lint 就像是一個潔癖患者,雖然可讓咱們代碼乾淨許多,可是若是真要把它提示的全解決,恐怕老闆要發怒了:給你發工資每天玩電腦,怎麼不出活呢?!
Lint 報的某些警告的確是不必,這時咱們能夠選擇忽略這些警告。忽略警告能夠分兩種:
忽略 Lint 警告的註解跟 @SuppressWarnings 很相似,@SuppressLint(「忽略的警告名稱」)。
下面的代碼演示瞭如何忽略 Lint 對使用新 API 的警告:
@SuppressLint("NewApi") @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
要是你不清楚要忽略的警告具體是什麼名字,那就直接忽略 all,固然是當前類/方法/對象:
@SuppressLint("all")
只需兩步:
例如:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:ignore="all" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@color/white">
Gradle 中也能夠配置 Lint 的關鍵操做,好比是否開啓 Lint 警告,或者關閉指定的警告。
在 module 下的 build.gradle 中添加 lintOptions{…}, 樣例代碼以下:
android { ... lintOptions { // Turns off checks for the issue IDs you specify. disable 'TypographyFractions','TypographyQuotes' // Turns on checks for the issue IDs you specify. These checks are in // addition to the default lint checks. enable 'RtlHardcoded','RtlCompat', 'RtlEnabled' // To enable checks for only a subset of issue IDs and ignore all others, // list the issue IDs with the 'check' property instead. This property overrides // any issue IDs you enable or disable using the properties above. check 'NewApi', 'InlinedApi' // If set to true, turns off analysis progress reporting by lint. quiet true // if set to true (default), stops the build if errors are found. abortOnError false // if true, only report errors. ignoreWarnings true } } ...
代碼迭代版本一多,很容易會遺留一些無用的代碼、資源文件,咱們可使用 Lint 進行清除。
點擊 Android Studio 工具欄 -> Analyze -> Run Inspection By Name..,輸入要檢測的內容,這裏是無用資源:
而後選擇 Unused resources,再選擇範圍後就開始檢測。
檢測出這麼多無用文件:
注意,右邊有解決方法:Remove All Unused Resources,放個大圖顯眼一點:
點擊後,將刪除全部的無用資源。
Lint 是優秀程序員之友。