原文鏈接:https://blog.csdn.net/luzhenyuxfcy/article/details/79398761
Android lint是在ADT16(Android SDK Tools 16 )提供的新工具,它是一個(gè)代碼掃描工具,用于檢測(cè) Android 的代碼質(zhì)量邀杏。
可以在項(xiàng)目目錄下通過命令調(diào)用(Windows:gradlew lint叠赦、Mac:./gradlew lint)獲得 Lint 檢測(cè)結(jié)果锤躁,生成詳細(xì)的 xml 或者 html 報(bào)告文件;也可以通過 Android Studio 的工具欄【Analyze】->【Inspect Code】直接進(jìn)行Lint 檢查。
Lint優(yōu)化哪些問題
- 遺漏的翻譯(沒用上的翻譯)缝龄,比如國(guó)際化未被翻譯的字段值
- 布局性能(以前是 layoutopt工具寨闹,可以解決無用布局胶坠、嵌套太多、布局太多)
- 未使用的資源
- 不一致的數(shù)組大小
- 國(guó)際化問題(硬編碼)
- 圖標(biāo)的問題(重復(fù)的圖標(biāo)繁堡,錯(cuò)誤的大猩蛏啤)
- 可用性問題(如不指定的文本字段的輸入型)
- manifest文件的錯(cuò)誤
Lint 發(fā)現(xiàn)的每個(gè)問題都有描述信息和等級(jí),我們可以很方便地定位問題椭蹄,同時(shí)按照嚴(yán)重程度進(jìn)行解決闻牡。當(dāng)然這個(gè)“嚴(yán)重程度”可以手動(dòng)調(diào)節(jié),有些原則問題不容侵犯绳矩,必須提升到 error罩润,而有的個(gè)別問題也可以無視。
但我們也不能過分依賴該工具翼馆,因?yàn)橛行〇|西實(shí)際開發(fā)中會(huì)有自己的規(guī)則割以,有可能會(huì)出現(xiàn)沖突的地方,需根據(jù)實(shí)際需求应媚。
Lint問題種類
- Correctness: 不夠完美的編碼严沥,比如硬編碼、使用過時(shí) API 等 中姜;
- Performance: 對(duì)性能有影響的編碼消玄,比如:靜態(tài)引用,循環(huán)引用等 丢胚;
- Internationalization: 國(guó)際化翩瓜,直接使用漢字,沒有使用資源引用等 携龟;
- Security: 不安全的編碼兔跌,比如在 WebView 中允許使用 JavaScript Interface 等 ;
- Usability: 可用的骨宠,有更好的替換的浮定,比如排版、圖標(biāo)格式建議.png格式 等 层亿;
- Accessibility: 輔助選項(xiàng)桦卒,比如 ImageView 的 contentDescription 往往建議在屬性中定義等;
Lint問題等級(jí)
方法:AS -> Settings -> Editor -> Inspections(檢測(cè)配置頁(yè))
| Fatal :致命的
| Error :錯(cuò)誤
| Warning :警告
| Weak Warning:比較弱的警告匿又,提示比較弱
| Typo:拼寫錯(cuò)誤方灾,綠色波浪下劃線
| Information :一般信息,注釋文檔
↓ Ignore:忽略
檢查問題列表詳見 點(diǎn)我跳轉(zhuǎn)
下面簡(jiǎn)要列舉Android-Lint所檢查的常見問題:
1. Correctness
1) DuplicatedIds
Layout中id應(yīng)該唯一
2) NewApi
代碼中使用的某些API高于Manifest中的Min SDK
3) InconsistentArrays
字符串國(guó)際化中,同一名字的String-Array對(duì)應(yīng)的item值不相同
4) Registered
Activity/Service/ContentProvider沒有通過AndroidManifest注冊(cè)
5) Deprecated
使用已經(jīng)廢棄的API
6) PxUsage
避免使用px裕偿,使用dp
2. Correctness:Messeges
1) MissingTranslation
字符串國(guó)際化不完全
2) ExtraTranslation
國(guó)際化的字符串洞慎,在默認(rèn)位置(defaultlocale),沒有定義
3. Security
1) SetJavaScriptEnabled
不確定你的程序中確實(shí)需要JavaScript就不要執(zhí)行SetJavaScriptEnabled嘿棘。
2)ExportedContentProvider/ExportedReceiver/ExportedService/ExportedActivity
ContentProvider/Receiver/Service/Activity的exported為true時(shí)劲腿,設(shè)置一個(gè)Permission,讓使用者獲取了Permission才能使用鸟妙。
3) HardcodedDebugMode
不要在manifest中設(shè)置android:debuggable焦人。
設(shè)置,編譯的任何版本都要采用指定的debug模式重父。不設(shè)置花椭,編譯Eng版本采用debug模式;編譯User版本采用release模式房午。
4. Performance
1) DrawAllocation
避免在繪制或者解析布局(draw/layout)時(shí)分配對(duì)象矿辽。eg:Ondraw()中實(shí)例化Paint對(duì)象。
2) ObsoleteLayoutParam
Layout中無用的參數(shù)郭厌。
3) UseCompoundDrawables
可優(yōu)化的布局:如包含一個(gè)Imageview和一個(gè)TextView的線性布局袋倔,可被采用CompoundDrawable的TextView代替。
4) UseSparseArrays
盡量用Android的SparseArray代替Hashmap折柠。
5) DisableBaselineAlignment
如果LinearLayout被用于嵌套的layout空間計(jì)算奕污,它的android:baselineAligned屬性應(yīng)該設(shè)置成false,以加速layout計(jì)算液走。
6) FloatMath
使用FloatMath代替Math。
7) NestedWeights
避免嵌套weight贾陷,那將拖累執(zhí)行效率缘眶。
8) UnusedResources/UnusedIds
未被使用的資源會(huì)是程序變大,并且編譯速度降低髓废。
9) Overdraw
如果為RootView指定一個(gè)背景Drawable巷懈,會(huì)先用Theme的背景繪制一遍,然后才用指定的背景慌洪,這就是所謂的“Overdraw”顶燕。
可以設(shè)置theme的background為null來避免。
10) UselessLeaf/UselessParent
View或view的父親沒有用冈爹。
5. Usability:Typography
1) TypographyDashes
特殊字符需用編碼代替:“–”需要用“–”涌攻;“—”需要用“—”
2) TypographyEllipsis
特殊字符需用編碼代替:“…”需要用“…”
3) TypographyOther
問題:“(c)”需要用“?”
6. Usability:Icons
1) IconNoDpi
Icon在nodpi和指定dpi的目錄下都出現(xiàn)。
2) GifUsage
Image不要用GIF频伤,最好用PNG恳谎,可以用JPG。
7. Usability
1) BackButton
Android中不要設(shè)計(jì)有Back的按鈕,Android中一般有Back的硬按鍵因痛。
2) ButtonCase
Button的“Ok”/“Cancel”顯示大小寫一定不要全大寫或全小寫婚苹。有標(biāo)準(zhǔn)的資源的字符串,不要自己再定義鸵膏,而要用系統(tǒng)定義的:@android:string/ok和@android:string/cancel膊升。
8. Accessibility
1) ContentDescription
ImageView和ImageButton應(yīng)該提供contentDescription。
9. Internationalization
1) HardcodeText
硬編碼的字符串應(yīng)該在資源里定義谭企。
2) EnforceUTF8
所有XML資源文件都應(yīng)該以UTF-8編碼廓译。
...
兩種使用方式
1. 命令行執(zhí)行
命令行路徑
ADT:your ‘sdk’ dir\tools\lint.bat
AS:your ‘sdk’ dir\tools\bin\lint.bat
命令行使用
在 ’lint.bat’ 同級(jí)目錄打開 cmd,可以通過 ’–help’ 獲取對(duì)應(yīng)的幫助赞咙。
Issue列表
- lint –list : list 只是 issue的 id 和 summary 的列表
- lint –show :show 顯示詳細(xì)的 issue 信息
disable/enable/check
- lint –disable <list>
- lint –enable <list>
- lint –check <list>
Android-Lint 所支持要檢測(cè)的 Issue 列表责循,默認(rèn)有檢查(Severity為非Ignore)和忽略(Severity為Ignore)之分。
可以用 disable不檢查指定<list>中默認(rèn)要檢查的 id或 category攀操;用 enable檢查指定<list>中默認(rèn)忽略的 id或 category院仿;用 check只檢查指定<list>中的 id或 category。
- disable/enable是在 default列表的基礎(chǔ)上速和,disable/enable給定列表里的歹垫;check是只檢查列表里的。
- <list>是 issue id或 category列表颠放,用逗號(hào)隔開排惨。
生成html/xml報(bào)表
- lint –html <target_filename> <proj_dir>:生成 html 格式的報(bào)告 ;
- lint –html <target_filename> --url filepath=url:生成的 html 文件中碰凶,還會(huì)引用別的文件暮芭,可以通過 url 參數(shù)替換其中的地址,使其指向公共訪問的地方 欲低;
- lint –simplehtml <target_filename> <proj_dir>:生成格式簡(jiǎn)單的 html 報(bào)告 辕宏;
- lint –xml <target_filename> <proj_dir>:生成 html 格式的報(bào)告;
自定義分析策略
lint –config <custom-lint_config_filename> <target_filename> <proj_dir>
雖然 disable/enable/check 選項(xiàng)可以改變本次檢查的問題行為砾莱,但是下次還要再次指定瑞筐。可以通過 config選項(xiàng)指定默認(rèn)的全局配置文件腊瑟。
注意:如果項(xiàng)目中已經(jīng)有 lint.xml 文件聚假,對(duì)于某條 issue 的檢查來說,先用項(xiàng)目中 lint.xml 的規(guī)則闰非,然后是 config 指定的規(guī)則膘格,最后才是系統(tǒng)默認(rèn)的規(guī)則。
lint在Gradle中可以使用”gradlew lint”命令行(Windows),”./gradlew lint”(mac)執(zhí)行财松。詳細(xì)可移步至:https://developer.android.com/studio/write/lint.html#commandline
2. IDE集成操作
Android Studio 中內(nèi)置了 Lint闯袒,可以直接使用。
Lint 的使用路徑:
工具欄 -> Analyze -> Inspect Code…
具體使用轉(zhuǎn)至文章:代碼優(yōu)化--Android Lint(二)
參考文章:
官方,使用Lint改善您的代碼
Android Lint
Android Lint:自定義Lint調(diào)試與開發(fā)
Android自定義Lint實(shí)踐-美團(tuán)
Android ------ 美團(tuán)的Lint代碼檢查實(shí)踐
Android工具:被你忽視的Lint