谷歌java安卓代码检查工具,Android Studio 代码检查工具介绍
前言
利用好相關(guān)代碼檢查工具,是一種自我的CodeReview,可以有效降低Bug率,提升自我的代碼優(yōu)化意識(shí)。常用的代碼檢查工具有AndroidStudio 自帶的Lint工具、 Alibaba Java Coding Guidelines
什么是 Lint
Android Lint 是 SDK Tools 16(ADT 16)開始引入的一個(gè)代碼掃描工具,通過(guò)對(duì)代碼進(jìn)行靜態(tài)分析,可以幫助開發(fā)者發(fā)現(xiàn)代碼質(zhì)量問(wèn)題和提出一些改進(jìn)建議。除了檢查 Android 項(xiàng)目源碼中潛在的錯(cuò)誤,對(duì)于代碼的正確性、安全性、性能、易用性、便利性和國(guó)際化方面也會(huì)作出檢查。Android Lint 作為項(xiàng)目的代碼檢測(cè)工具,是因?yàn)樗哂幸韵聨讉€(gè)特性:
已經(jīng)被集成到 Android Studio,使用方便;
能在編寫代碼時(shí)實(shí)時(shí)反饋出潛在的問(wèn)題;
可以自定義規(guī)則。Android Lint 本身包含大量已經(jīng)封裝好的接口,能提供豐富的代碼信息,開發(fā)者可以基于這些信息進(jìn)行自定義規(guī)則的編寫。
1、開始使用
Android Lint 的工作過(guò)程比較簡(jiǎn)單,一個(gè)基礎(chǔ)的Lint過(guò)程由Lint Tool(檢測(cè)工具),Source Files(項(xiàng)目源文件) 和 lint.xml(配置文件) 三個(gè)部分組成,Lint Tool讀取 Source Files,根據(jù)lint.xml配置的規(guī)則(issue)輸出結(jié)果(如下圖)。
2、操作步驟
Android Studio 中,Android Lint 已經(jīng)被集成,只需要點(diǎn)擊 Analyze-----Inspect Code 即可運(yùn)行 Android Lint:
操作步驟
在彈出的對(duì)話框中可以設(shè)置執(zhí)行 Lint的范圍,可以選擇整個(gè)項(xiàng)目,也可以只選擇當(dāng)前的子模塊或者其他自定義的范圍:
選擇操作范圍
檢查完畢后會(huì)彈出 Inspection 的控制臺(tái),并在其中列出詳細(xì)的檢查結(jié)果:
image.png
如上圖所展示的,Android Lint 對(duì)檢查的結(jié)果進(jìn)行了分類,同一個(gè)規(guī)則(issue)下的問(wèn)題會(huì)聚合,其中針對(duì) Android 的規(guī)則類別會(huì)在分類前說(shuō)明是Android 相關(guān)的,主要是六類:
Accessibility 無(wú)障礙,例如 ImageView 缺少contentDescription 描述,String 編碼字符串等問(wèn)題。
Correctness 正確性
Internationalization 國(guó)際化,如字符缺少翻譯等問(wèn)題。
Performance 性能,例如在 onMeasure、onDraw 中執(zhí)行 new,內(nèi)存泄露,產(chǎn)生了冗余的資源,xml 結(jié)構(gòu)冗余等。
Security 安全性,例如沒有使用 HTTPS 連接 Gradle,AndroidManifest 中的權(quán)限問(wèn)題等。
Usability 易用性,例如缺少某些倍數(shù)的切圖,重復(fù)圖標(biāo)等。
其他的結(jié)果條目則是針對(duì) Java 語(yǔ)法的問(wèn)題,另外每一個(gè)問(wèn)題都有區(qū)分嚴(yán)重程度(severity),從高到底依次是:Fatal、Error、Warning、Information、Ignore
其中 Fatal 和 Error 都是指錯(cuò)誤,但是 Fatal 類型的錯(cuò)誤會(huì)直接中斷 ADT 導(dǎo)出 APK,更為嚴(yán)重。
在結(jié)果列表中點(diǎn)擊一個(gè)條目,可以看到詳細(xì)的源文件名和位置,以及命中的錯(cuò)誤規(guī)則(issue)、解決方案或者屏蔽提示
除了直接在菜單中運(yùn)行 Lint 外,大部分問(wèn)題代碼在編寫時(shí) Android Studio 就會(huì)給出提醒。
3、自定義配置
對(duì)于執(zhí)行 Lint 操作的相關(guān)配置,是定義在 gradle 文件的 lintOptions 中,可定義的選項(xiàng)及其默認(rèn)值
android {
lintOptions {
// 設(shè)置為 true,則當(dāng) Lint 發(fā)現(xiàn)錯(cuò)誤時(shí)停止 Gradle 構(gòu)建
abortOnError false
// 設(shè)置為 true,則當(dāng)有錯(cuò)誤時(shí)會(huì)顯示文件的全路徑或絕對(duì)路徑 (默認(rèn)情況下為true)
absolutePaths true
// 僅檢查指定的問(wèn)題(根據(jù) id 指定)
check 'NewApi', 'InlinedApi'
// 設(shè)置為 true 則檢查所有的問(wèn)題,包括默認(rèn)不檢查問(wèn)題
checkAllWarnings true
// 設(shè)置為 true 后,release 構(gòu)建都會(huì)以 Fatal 的設(shè)置來(lái)運(yùn)行 Lint。
// 如果構(gòu)建時(shí)發(fā)現(xiàn)了致命(Fatal)的問(wèn)題,會(huì)中止構(gòu)建(具體由 abortOnError 控制)
checkReleaseBuilds true
// 不檢查指定的問(wèn)題(根據(jù)問(wèn)題 id 指定)
disable 'TypographyFractions','TypographyQuotes'
// 檢查指定的問(wèn)題(根據(jù) id 指定)
enable 'RtlHardcoded','RtlCompat', 'RtlEnabled'
// 在報(bào)告中是否返回對(duì)應(yīng)的 Lint 說(shuō)明
explainIssues true
// 寫入報(bào)告的路徑,默認(rèn)為構(gòu)建目錄下的 lint-results.html
htmlOutput file("lint-report.html")
// 設(shè)置為 true 則會(huì)生成一個(gè) HTML 格式的報(bào)告
htmlReport true
// 設(shè)置為 true 則只報(bào)告錯(cuò)誤
ignoreWarnings true
// 重新指定 Lint 規(guī)則配置文件
lintConfig file("default-lint.xml")
// 設(shè)置為 true 則錯(cuò)誤報(bào)告中不包括源代碼的行號(hào)
noLines true
// 設(shè)置為 true 時(shí) Lint 將不報(bào)告分析的進(jìn)度
quiet true
// 覆蓋 Lint 規(guī)則的嚴(yán)重程度,例如:
severityOverrides ["MissingTranslation": LintOptions.SEVERITY_WARNING]
// 設(shè)置為 true 則顯示一個(gè)問(wèn)題所在的所有地方,而不會(huì)截短列表
showAll true
// 配置寫入輸出結(jié)果的位置,格式可以是文件或 stdout
textOutput 'stdout'
// 設(shè)置為 true,則生成純文本報(bào)告(默認(rèn)為 false)
textReport false
// 設(shè)置為 true,則會(huì)把所有警告視為錯(cuò)誤處理
warningsAsErrors true
// 寫入檢查報(bào)告的文件(不指定默認(rèn)為 lint-results.xml)
xmlOutput file("lint-report.xml")
// 設(shè)置為 true 則會(huì)生成一個(gè) XML 報(bào)告
xmlReport false
// 將指定問(wèn)題(根據(jù) id 指定)的嚴(yán)重級(jí)別(severity)設(shè)置為 Fatal
fatal 'NewApi', 'InlineApi'
// 將指定問(wèn)題(根據(jù) id 指定)的嚴(yán)重級(jí)別(severity)設(shè)置為 Error
error 'Wakelock', 'TextViewEdits'
// 將指定問(wèn)題(根據(jù) id 指定)的嚴(yán)重級(jí)別(severity)設(shè)置為 Warning
warning 'ResourceAsColor'
// 將指定問(wèn)題(根據(jù) id 指定)的嚴(yán)重級(jí)別(severity)設(shè)置為 ignore
ignore 'TypographyQuotes'
}
}
lint.xml 這個(gè)文件則是配置 Lint 需要禁用哪些規(guī)則(issue),以及自定義規(guī)則的嚴(yán)重程度(severity),lint.xml文件是通過(guò) issue 標(biāo)簽指定對(duì)一個(gè)規(guī)則的控制,在項(xiàng)目根目錄中建立一個(gè) lint.xml 文件后 Android Lint 會(huì)自動(dòng)識(shí)別該文件,在執(zhí)行檢查時(shí)按照 lint.xml 的內(nèi)容進(jìn)行檢查。如上面提到的那樣,開發(fā)者也可以通過(guò) lintOptions 中的 lintConfig 選項(xiàng)來(lái)指定配置文件。lint.xml 示例如下:
issue 標(biāo)簽中使用 id 指定一個(gè)規(guī)則,severity="ignore" 則表明禁用這個(gè)規(guī)則。需要注意的是,某些規(guī)則可以通過(guò) ignore 標(biāo)簽指定僅對(duì)某些屬性禁用,例如上面的 Deprecated,表示檢查是否有使用不推薦的屬性和方法,而在issue 標(biāo)簽中包裹一個(gè) ignore 標(biāo)簽,在ignore 標(biāo)簽的 regexp 屬性中使用正則表達(dá)式指定了 singleLine,則表明對(duì) singleLine 這個(gè)屬性屏蔽檢查。
另外開發(fā)者也可以使用 @SuppressLint(issue id) 標(biāo)注針對(duì)某些代碼忽略某些 Lint 檢查,這個(gè)標(biāo)注既可以加到成員變量之前,也可以加到方法聲明和類聲明之前,分別針對(duì)不同范圍進(jìn)行屏蔽。
Alibaba Java Guidelines的使用
這是一款阿里巴巴基于Java規(guī)范開發(fā)的AndroidStudio插件,需要單獨(dú)安裝在AndroidStudio中,它可以規(guī)范我們的代碼編寫,進(jìn)行實(shí)時(shí)代碼規(guī)范提示。
1、如何安裝插件
Android Studio --> File --> Settings... --> Plugins --> 搜索Alibaba Java Guidelines --> 安裝并重啟Android Studio
阿里巴巴Java規(guī)范插件
2、使用
在日常編寫代碼時(shí),插件會(huì)實(shí)時(shí)對(duì)代碼進(jìn)行檢測(cè)給出相應(yīng)的提示信息,并給出對(duì)應(yīng)的代碼優(yōu)化方案。示例如下:
下面switch語(yǔ)句塊,按照J(rèn)ava規(guī)范,是缺少default語(yǔ)句的,插件會(huì)提示加上。
image.png
Apk 體積分析
當(dāng)我們打包apk之后,有時(shí)候apk有點(diǎn)大,想要針對(duì)apk進(jìn)行“瘦身”,此時(shí)我們需要知道哪些哪些東西占用較多,才有針對(duì)性的進(jìn)行apk體積優(yōu)化,可以使用AndroidStudio自帶功能檢測(cè)apk。
在AndroidStudio中雙擊打包的apk文件之后右側(cè)會(huì)彈出對(duì)應(yīng)的apk分析窗口,如下所示:
可以清楚看到哪些文件占用apk大小的比重信息,同時(shí)也可以將兩個(gè)apk進(jìn)行比對(duì)。
apk分析.png
依賴占用過(guò)大,可以選擇將一些沒有使用到的依賴進(jìn)行剔除,資源圖片沒有使用到的也可以剔除掉,資源圖片占用過(guò)大,可使用TinyPng將圖片進(jìn)行無(wú)損壓縮處理。
TinyPng官網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的谷歌java安卓代码检查工具,Android Studio 代码检查工具介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java mediainfo.dll_求
- 下一篇: BOSE汽车系统荣膺通用汽车“年度供应商