版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】提高Android代碼質(zhì)量的工具有什么
這篇文章主要為大家分析了提高Android代碼質(zhì)量的工具有什么的相關(guān)知識點,內(nèi)容詳細(xì)易懂,操作細(xì)節(jié)合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨在下一起來看看,下面跟著在下一起深入學(xué)習(xí)“提高Android代碼質(zhì)量的工具有什么”的知識吧。在這篇文章中,我將通過不同的自動化工具如CheckStyle,F(xiàn)indBugs,PMD以及AndroidLint來介紹(如何)提高你的安卓代碼質(zhì)量。通過自動化的方式檢查你的代碼非常有用,尤其當(dāng)你在一個團(tuán)隊中工作,為了在你的代碼中保持嚴(yán)格的語法格式以及避免很多壞習(xí)慣和錯誤。我將仔細(xì)地介紹如何在你空閑的時候直接運(yùn)用這些工具通過Gradle構(gòu)建腳本以及如何配置它們。Fork該示例我強(qiáng)烈建議你拷貝下這個項目工程,盡管我將介紹的案例都是來自它。與此同時,你將能夠測試下自己對這些工具的了解情況。關(guān)于Gradle任務(wù)Gradle任務(wù)的概念(在Gradle中的含義)是理解該篇文章(以及如何以一種通用的方式寫Gradle腳本)的基礎(chǔ)。我強(qiáng)烈建議你去看下這兩篇關(guān)于Gradle任務(wù)的文檔(這篇和這篇)。這個文檔包含了大量的例子,因此它非常容易開始學(xué)習(xí)?,F(xiàn)在,我假定你拷貝了我的Repo,你導(dǎo)入這個工程到你的AndroidStudio,并且你熟悉Gradle任務(wù)。如果不是,別擔(dān)心,我將盡我***的努力讓我的講解更有意義。關(guān)于示例項目的層次結(jié)構(gòu)你可以將gradle腳本文件分割成很多文件,我現(xiàn)在已經(jīng)有3個gradle文件:根文件夾中的文件,這些文件或多或少都是關(guān)于這個項目的配置的(用的哪個MavenRepos,用的哪個版本的Gradle)。App子文件夾中的文件,這些文件是典型的用于創(chuàng)建安卓應(yīng)用的gradle文件。config子文件夾中的文件,這里的文件才是我們關(guān)系的重點,因為我用這里的文件保存和配置項目中的所有工具。Checkstyle簡介“Checkstyle是一個開發(fā)工具用來幫助程序員編寫符合代碼規(guī)范的Java代碼。它能自動檢查Java代碼為空閑的人進(jìn)行這項無聊(但重要)的任務(wù)?!闭鏑heckstyle的開發(fā)者所言,這個工具能夠幫助你在項目中定義和維持一個非常精確和靈活的代碼規(guī)范形式。當(dāng)你啟動CheckStyle,它會根據(jù)所提供的配置文件分析你的Java代碼并告訴你發(fā)現(xiàn)的所有錯誤。Gradle的形式下面的代碼向你展示了在你的項目中使用Checkstyle的最基本的配置(如Gradle任務(wù)):task
checkstyle(type:
Checkstyle)
{
configFile
file("${project.rootDir}/config/quality/checkstyle/checkstyle.xml")
//
Where
my
checkstyle
config
is...
configProperties.checkstyleSuppressionsPath
=
file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath
//
Where
is
my
suppressions
file
for
checkstyle
is...
source
'<span
id="24_nwp"><a
id="24_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=src&k0=src&kdi0=0&luki=5&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">src</a>'
include
'**/*.<span
id="25_nwp"><a
id="25_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=java&k0=java&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">java</a>'
exclude
'**/gen/**'
classpath
=
files()
}</span></span>所以,基本上這個任務(wù)會根據(jù)checkstyle.xml和suppressions.xml分析你的代碼。通過AndroidStudio執(zhí)行它僅僅需要從工具面的CheckStyle來啟動它。啟動CheckStyle之后,你講收到一個報告用于展示在你項目中發(fā)現(xiàn)的每個錯誤。這是非常直接的方式。如果你想在checkstyle上做更多的配置,可以參考這篇文檔。Checkstyle的使用技巧Checkstyle會發(fā)現(xiàn)大量的問題,特別是在你運(yùn)用了大量的規(guī)則配置,如同你設(shè)置了一個非常精確的語法。盡管我通過Gradle使用checkstyle,例如在我進(jìn)行推送之前,我仍然推薦你為IntellJ/AndroidStudio使用checkstyle插件(你可以通過AndroidStudio的工作面板文件/設(shè)置/插件直接安裝插件)。這種方式下,你可以根據(jù)那些為Gradle配置的相同文件在你的工程中使用checkstyle,但是遠(yuǎn)不止這些,你可以直接在AndroidStudio中獲取帶有超鏈接結(jié)果,這些結(jié)果通過超鏈接在你的代碼中對應(yīng),這是非常有用的(Gradle的這種方式仍然很重要的,因為你可以使用它自動構(gòu)建系統(tǒng),如Jenkins)。Findbugs簡介Findbugs是否需要一個簡介呢?我想它的名稱已經(jīng)讓人顧名思義了。“FindBugs使用靜態(tài)分析方法為出現(xiàn)bug模式檢查Java字節(jié)碼”。FindBugs基本上只需要一個程序來做分析的字節(jié)碼,所以這是非常容易使用。它能檢測到常見的錯誤,如錯誤的布爾運(yùn)算符。FindBugs也能夠檢測到由于誤解語言特點的錯誤,如Java參數(shù)調(diào)整(這不是真的有可能因為它的參數(shù)是傳值)。Gradle的形式下面的代碼向你展示了在你的項目中使用Findbugs的最基本的配置(以Gradle任務(wù)為例):task
findbugs(type:
FindBugs)
{
ignoreFailures
=
false
effort
=
"max"
reportLevel
=
"high"
excludeFilter
=
new
File("${project.rootDir}/config/quality/findbugs/findbugs-filter.<span
id="15_nwp"><a
id="15_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=xml&k0=xml&kdi0=0&luki=7&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">xml</a>")
classes
=
files("${project.rootDir}/<span
id="16_nwp"><a
id="16_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=app&k0=app&kdi0=0&luki=3&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">app</a>/build/classes")
source
'<span
id="17_nwp"><a
id="17_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=src&k0=src&kdi0=0&luki=5&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">src</a>'
include
'**/*.<span
id="18_nwp"><a
id="18_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=java&k0=java&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">java</a>'
exclude
'**/gen/**'
reports
{
xml.enabled
=
false
<span
id="19_nwp"><a
id="19_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=html&k0=html&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">html</a>.enabled
=
true
xml
{
destination
"$project.buildDir/reports/findbugs/findbugs.xml"
}
html
{
destination
"$project.buildDir/reports/findbugs/findbugs.html"
}
}
classpath
=
files()
}</span></span></span></span></span>它是如此的像一個Checkstyle任務(wù)。盡管Findbugs支持HTML和XML兩種報告形式,我選擇HTML形式,因為這種形式更具有可讀性。而且,你只需要把報告的位置設(shè)置為書簽就可以快速訪問它的位置。這個任務(wù)也會失敗如果發(fā)現(xiàn)Findbgus錯誤失敗(同樣生成報告)。執(zhí)行FindBugs任務(wù),就像執(zhí)行CheckStyle任務(wù)(除了任務(wù)的名稱是“FindBugs”)。Findbugs的使用技巧由于Android項目是從Java項目略有不同,我強(qiáng)烈推薦使用FindBugs過濾器(規(guī)則配置)。你可以在這一個例子(例如項目之一)。它基本上忽略了R文件和你的Manifest文件。順便說一句,由于(使用)FindBugs分析你的代碼,你至少需要編譯一次你的代碼才能夠測試它。PMD簡介這個工具有個有趣的事實:PMD不存在一個準(zhǔn)確的名稱。(所以)在官網(wǎng)上你可以發(fā)現(xiàn)很有有趣的名稱,例如:PrettyMuchDoneProjectMeetsDeadline事實上,PMD是一個工作有點類似Findbugs的強(qiáng)大工具,但是(PMD)直接檢查源代碼而不是檢查字節(jié)碼(順便說句,PMD適用很多語言)。(PMD和Findbugs)的核心目標(biāo)是相同的,通過靜態(tài)分析方法找出哪些模式引起的bug。因此為什么同時使用Findbugs和PMD呢?好吧!盡管Findbugs和PMD擁有相同的目標(biāo),(但是)他們的檢查方法是不同的。所以PMD有時檢查出的bug但是Findbugs卻檢查不出來,反之亦然。Gradle的形式下面的代碼向你展示了在你的項目中使用PMD的最基本的配置(以Gradle任務(wù)為例):task
pmd(type:
Pmd)
{
ruleSetFiles
=
files("${project.rootDir}/config/quality/pmd/pmd-ruleset.<span
id="9_nwp"><a
id="9_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=xml&k0=xml&kdi0=0&luki=7&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">xml</a>")
ignoreFailures
=
false
ruleSets
=
[]
source
'<span
id="10_nwp"><a
id="10_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=src&k0=src&kdi0=0&luki=5&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">src</a>'
include
'**/*.<span
id="11_nwp"><a
id="11_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=java&k0=java&kdi0=0&luki=10&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">java</a>'
exclude
'**/gen/**'
reports
{
xml.enabled
=
false
<span
id="12_nwp"><a
id="12_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=html&k0=html&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">html</a>.enabled
=
true
xml
{
destination
"$project.buildDir/reports/pmd/pmd.xml"
}
html
{
destination
"$project.buildDir/reports/pmd/pmd.html"
}
}
}</span></span></span></span>就PMD來說,它幾乎與Findbugs相同。PMD支持HTML和XML兩種報告形式,所以我再次選擇HTML形式。我強(qiáng)烈建議你使用自己的通用配置集文件,正如同我在這個例子(checkthisfile)中一樣。所以,你當(dāng)然應(yīng)該去看下這些通用配置集文件。我建議你,因為PMD可比FindBugs更有爭議的很多,例如:如果你不聲明”ifstatement”或”ifstatement”為空,它基本上會給你警告信息。如果這些規(guī)則是正確的,或這對于您的項目(來說是正確的),我真的認(rèn)可你和你隊友的工作。我不希望程序因為”ifstatement”崩潰,我認(rèn)為這樣程序的可讀性很差。執(zhí)行PMD任務(wù),就像是(執(zhí)行)CheckStyle任務(wù)(除了任務(wù)的名稱是“PMD”)。PMD的使用技巧我建議你不要使用默認(rèn)的規(guī)則配置集,你需要添加這行代碼(已經(jīng)加上):ruleSets
=
[]否則,因為默認(rèn)值是這些基本的規(guī)則配置集,基本的規(guī)則配置集會和你定義的規(guī)則集一起執(zhí)行。所以,如果你的自定義規(guī)則集不在那些基本配置集中,他們?nèi)匀粫?zhí)行。AndroidLint簡介“Androidlint工具是一個靜態(tài)代碼分析工具,它能檢查安卓項目源文件的潛在缺陷和優(yōu)化改進(jìn)的正確性,安全性,性能,可用性,可訪問性和國際化?!闭绻俜骄W(wǎng)站所說,AndroidLint是另一種靜態(tài)分析工具,專門為Android服務(wù)。它是非常強(qiáng)大的,能給你大量的建議以提高你的代碼質(zhì)量。Gradle的形式android
{
lintOptions
{
abortOnError
true
lintConfig
file("${project.rootDir}/config/quality/lint/lint.<span
id="6_nwp"><a
id="6_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=xml&k0=xml&kdi0=0&luki=7&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&tu=u1922429&u=http%3A%2F%2Fwww%2Eadmin10000%2Ecom%2Fdocument%2F6546%2Ehtml&urlid=0"
target="_blank">xml</a>")
//
if
true,
generate
an
HTML
report
(with
issue
explanations,
sourcecode,
etc)
<span
id="7_nwp"><a
id="7_nwl"
href="/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=71b135827dd4deba&k=html&k0=html&kdi0=0&luki=2&n=10&p=baidu&q=06011078_cpr&rb=0&rs=1&seller_id=1&sid=baded47d8235b171&ssp2=1&stid=0&t=tpclicked3_hc&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 株洲市房屋買賣合同中的合同違約調(diào)解
- 清算后期服務(wù)協(xié)議
- 小紅書:教你打造小紅書藍(lán)V專業(yè)號【互聯(lián)網(wǎng)】【藍(lán)V運(yùn)營】
- 九年級化學(xué)上冊 第六單元 碳和碳的化合物 課題1 金剛石、石墨、C60教案 (新版)新人教版
- 二年級體育上冊 2.2出升的太陽教案
- 2024秋八年級英語下冊 Module 1 Feelings and impressions Unit 3 Language in use教案含教學(xué)反思(新版)外研版
- 2024-2025學(xué)年學(xué)年高中英語 Module2 A job worth doing教案 外研版必修5
- 2024-2025學(xué)年高中英語下學(xué)期第18周教學(xué)設(shè)計
- 2024秋八年級英語上冊 Unit 7 Will people have robots教案 (新版)人教新目標(biāo)版
- 2023七年級地理上冊 第一章 地球和地圖 第四節(jié) 地形圖的判讀說課稿 (新版)新人教版
- GB/T 19630.2-2005有機(jī)產(chǎn)品第2部分:加工
- GB/T 14074-2017木材工業(yè)用膠粘劑及其樹脂檢驗方法
- 小學(xué)三年級上冊語文部編版課件口語交際:身邊的“小事”(配套課件)
- HPE 3PAR8400、HPE 3000B SAN Switch安裝及維護(hù)手冊
- 鋼棧橋工程安全檢查和驗收
- FDS軟件介紹及實例應(yīng)用
- 無配重懸挑裝置吊籃施工方案
- (完整版)計算方法練習(xí)題與答案
- 強(qiáng)基計劃解讀系列課件
- 2022-2023學(xué)年山東省濟(jì)南市高一上學(xué)期期中考試英語試題 Word版含答案
- 《24點大挑戰(zhàn)》教學(xué)-完整版課件
評論
0/150
提交評論