安卓開(kāi)發(fā)中有個(gè)很好的靜態(tài)代碼分析工具AndroidLint(已集成在AndroidStudio中)漫仆,當(dāng)你代碼寫(xiě)的差不多準(zhǔn)備打包發(fā)布的時(shí)候可以用Lint檢查一遍代碼,Lint會(huì)向你報(bào)告你的代碼中可以進(jìn)一步優(yōu)化的地方求橄。
本文不打算詳細(xì)講述Lint的用法赋续,寫(xiě)這篇文章的目的是希望能給經(jīng)驗(yàn)不足的新手們提供一個(gè)Lint警告信息速查手冊(cè)干奢,以快速明白Lint中常見(jiàn)的警告信息含義忿磅。本文會(huì)保持頻繁更新糯彬!
Android > Lint > Accessibility
1.Image without contentDescription
[Accessibility] Missing 'contentDescription' attribute on image
contentDescription 這個(gè)屬性是為了給一些生理功能有缺陷的人使用應(yīng)用程序提供方便的,比如有一個(gè) ImageView 里面放置一張色彩豐富的圖片葱她,一些色弱色盲的人可能會(huì)分不清這張圖片中畫(huà)的是什么東西撩扒。如果用戶安裝了輔助瀏覽工具比如 TalkBack,TalkBack 就會(huì)大聲朗讀出用戶目前正在瀏覽的內(nèi)容吨些。TextView控件TalkBack可以直接讀出里面的內(nèi)容搓谆,但是 ImageView TalkBack就只能去讀 contentDescription的值,告訴用戶這個(gè)圖片到底是什么豪墅。
Android > Lint > Correctness
1.Layout Inflation without a Parent
Avoid passing 'null' as the view root (needed to resolve layout parameters on the inflated layout's root element)
出現(xiàn)這條警告你肯定使用 LayoutInflater 類(lèi)的方法加載布局了泉手,具體緣由請(qǐng)查看這篇博文。
2.Missing commit() on SharedPreference editor
'SharedPreferences.edit()' without a corresponding 'commit()' or 'apply()' call
一般是因?yàn)槟銏?zhí)行了 SharedPreference.Editor 的 put 方法然后忘了執(zhí)行 apply 或 commit 方法偶器。
3.Using inlined constants on older versions
這個(gè)是因?yàn)槟阏{(diào)用的比你聲明的 minSdkVersion 級(jí)別更高的 API.
Android > Lint > Internationalization > Bidirectional Text
1.Using left/right instead of start/end attributes
這條警告建議你將布局文件(多為相對(duì)布局)中聲明的 ×××Left 或 ×××Right 替換成對(duì)應(yīng)的 ×××Start 或 ×××End 以兼容從右至左的屏幕方向(這個(gè)取決于特定語(yǔ)境的閱讀習(xí)慣)斩萌。
Android > Lint > Performance
1.Overdraw: Painting regions more than once
直譯過(guò)來(lái)叫過(guò)度繪制,你應(yīng)該明確當(dāng)前的 subView 是否有覆蓋上一級(jí) View 的需求屏轰,如果有可忽略此條提示
2.Unused resources
這個(gè)不用我過(guò)多解釋了吧颊郎,提示你項(xiàng)目里未使用的資源文件,請(qǐng)酌情刪除霎苗。
Android > Lint > Security
待續(xù)…………
Android > Lint > Usability
Using setJavaScriptEnabled
Using 'setJavaScriptEnabled' can introduce XSS vulnerabilities into your application, review carefully.
使用'setJavaScriptEnabled'可以將XSS漏洞引入到應(yīng)用程序中姆吭,請(qǐng)仔細(xì)檢查確定有打開(kāi) JS 的必要。
嗯唁盏,一般用到 WebView 的地方都有必要打開(kāi) JS 支持内狸。
待續(xù)…………
Android > Lint > Usability > Icons
1.Image defined in density-independent drawable folder
在密度無(wú)關(guān)的可繪制文件夾中定義的圖像,我一般選擇忽略厘擂,原因改天專(zhuān)門(mén)開(kāi)篇文章解釋答倡。
Class structure
提示你類(lèi)的結(jié)構(gòu)可進(jìn)一步優(yōu)化的地方。
1.Field can be local
這個(gè)主要是有些變量可聲明為局部變量驴党。
2.'private' method declared 'final'
這個(gè)一般刪掉 final 符就行瘪撇。
Control flow issues
1.Unnecessary 'return' statement
不必要的 return 語(yǔ)句,這個(gè)一般是你在返回類(lèi)型為 void 的方法的方法體內(nèi)使用了 return 語(yǔ)句港庄,到底有沒(méi)有必要使用要視情況而定倔既。比如你想在方法中加個(gè)條件判斷,如果不符合條件就提前返回方法鹏氧,這個(gè)時(shí)候返回 void 類(lèi)型的方法里使用 return 語(yǔ)句是有必要的渤涌。
Declaration redundancy
1.Actual method parameter is the same constant
某個(gè)方法的某個(gè)參數(shù)在整個(gè)項(xiàng)目里被調(diào)用的地方總是個(gè)固定不變的值,所以這個(gè)形參是否有聲明的必要呢把还?
2.Declaration access can be weaker
提示你類(lèi)中的字段或方法聲明的訪問(wèn)權(quán)限可優(yōu)化实蓬。詳細(xì)部分一般提示 Can be private茸俭,嗯。
3.Declaration can have final modifier
某類(lèi)的某個(gè)字段可聲明為 常量 即添加 final 修飾符安皱。
4.Method returns the same value
此提示常出現(xiàn)于創(chuàng)建菜單以及菜單的選擇點(diǎn)擊回調(diào)方法處调鬓,使返回父類(lèi)的方法調(diào)用即可。
General
1.Default File Template Usage
這個(gè)你自己肯定能看懂酌伊,我就不說(shuō)了腾窝。
Imports
一般提示你一些未使用的導(dǎo)入語(yǔ)句,刪掉就好居砖。(右鍵可快速刪掉)
Java language level migration aids
一些 JAVA 語(yǔ)言相關(guān)的優(yōu)化建議虹脯。
Spelling
嗯。
……
……
未完待續(xù)……