成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

四個工具,讓你的Android代碼質量翻倍!

移動開發 Android
Gradle任務的概念(在Gradle中的含義)是理解該篇文章(以及如何以一種通用的方式寫Gradle腳本)的基礎。我強烈建議你去看下這兩篇關于Gradle任務的文檔(這篇和這篇)。這個文檔包含了大量的例子,因此它非常容易開始學習。

在這篇文章中,我將通過不同的自動化工具如CheckStyle,FindBugs,PMD以及Android Lint來介紹(如何)提高你的安卓代碼質量。通過自動化的方式檢查你的代碼非常有用,尤其當你在一個團隊中工作,為了在你的代碼中保持嚴格的語法格式以及避免很多壞習慣和錯誤。我將仔細地介紹如何在你空閑的時候直接運用這些工具通過Gradle構建腳本以及如何配置它們。

Fork該示例

我強烈建議你拷貝下這個項目工程,盡管我將介紹的案例都是來自它。與此同時,你將能夠測試下自己對這些工具的了解情況。

關于Gradle任務

Gradle任務的概念(在Gradle中的含義)是理解該篇文章(以及如何以一種通用的方式寫Gradle腳本)的基礎。我強烈建議你去看下這兩篇關于Gradle任務的文檔(這篇和這篇)。這個文檔包含了大量的例子,因此它非常容易開始學習?,F在,我假定你拷貝了我的Repo,你導入這個工程到你的Android Studio,并且你熟悉Gradle任務。如果不是,別擔心,我將盡我***的努力讓我的講解更有意義。

關于示例項目的層次結構

你可以將gradle腳本文件分割成很多文件,我現在已經有3個gradle文件:

根文件夾中的文件,這些文件或多或少都是關于這個項目的配置的(用的哪個Maven Repos,用的哪個版本的Gradle)。

 

App子文件夾中的文件,這些文件是典型的用于創建安卓應用的gradle文件。

 

config子文件夾中的文件,這里的文件才是我們關系的重點,因為我用這里的文件保存和配置項目中的所有工具。

 

Checkstyle

 

簡介

 

“Checkstyle是一個開發工具用來幫助程序員編寫符合代碼規范的Java代碼。它能自動檢查Java代碼為空閑的人進行這項無聊(但重要)的任務。”

正如Checkstyle的開發者所言,這個工具能夠幫助你在項目中定義和維持一個非常精確和靈活的代碼規范形式。當你啟動CheckStyle,它會根據所提供的配置文件分析你的Java代碼并告訴你發現的所有錯誤。

 

Gradle的形式

 

下面的代碼向你展示了在你的項目中使用Checkstyle的最基本的配置(如Gradle任務):

 

 

  1. task checkstyle(type: Checkstyle) { 
  2. configFile file("${project.rootDir}/config/quality/checkstyle/checkstyle.xml"// Where my checkstyle config is... 
  3. configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath // Where is my suppressions file for checkstyle is... 
  4. source '<span id="24_nwp"><a id="24_nwl" href="http://cpro.baidu.com/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>' 
  5. include '**/*.<span id="25_nwp"><a id="25_nwl" href="http://cpro.baidu.com/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>' 
  6. exclude '**/gen/**' 
  7. classpath = files() 
  8. }</span></span> 

所以,基本上這個任務會根據checkstyle.xml和suppressions.xml分析你的代碼。通過Android Studio執行它僅僅需要從工具面的CheckStyle來啟動它。

啟動CheckStyle之后,你講收到一個報告用于展示在你項目中發現的每個錯誤。這是非常直接的方式。

如果你想在checkstyle上做更多的配置,可以參考這篇文檔。

 

Checkstyle的使用技巧

 

Checkstyle會發現大量的問題,特別是在你運用了大量的規則配置,如同你設置了一個非常精確的語法。盡管我通過Gradle使用 checkstyle,例如在我進行推送之前,我仍然推薦你為IntellJ/Android Studio使用checkstyle插件(你可以通過Android Studio的工作面板文件/設置/插件直接安裝插件)。這種方式下,你可以根據那些為Gradle配置的相同文件在你的工程中使用 checkstyle,但是遠不止這些,你可以直接在Android Studio中獲取帶有超鏈接結果,這些結果通過超鏈接在你的代碼中對應,這是非常有用的(Gradle的這種方式仍然很重要的,因為你可以使用它自動構建系統,如Jenkins)。

Findbugs

 

簡介

 

Findbugs是否需要一個簡介呢?我想它的名稱已經讓人顧名思義了。“FindBugs使用靜態分析方法為出現bug模式檢查Java字節碼”。FindBugs基本上只需要一個程序來做分析的字節碼,所以這是非常容易使用。它能檢測到常見的錯誤,如錯誤的布爾運算符。FindBugs也能夠檢測到由于誤解語言特點的錯誤,如Java參數調整(這不是真的有可能因為它的參數是傳值)。

 

Gradle的形式

 

下面的代碼向你展示了在你的項目中使用Findbugs的最基本的配置(以Gradle任務為例):

 

 

  1. task findbugs(type: FindBugs) { 
  2. ignoreFailures = false 
  3. effort = "max" 
  4. reportLevel = "high" 
  5. excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.<span id="15_nwp"><a id="15_nwl" href="http://cpro.baidu.com/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>") 
  6. classes = files("${project.rootDir}/<span id="16_nwp"><a id="16_nwl" href="http://cpro.baidu.com/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") 
  7.  
  8. source '<span id="17_nwp"><a id="17_nwl" href="http://cpro.baidu.com/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>' 
  9. include '**/*.<span id="18_nwp"><a id="18_nwl" href="http://cpro.baidu.com/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>' 
  10. exclude '**/gen/**' 
  11.  
  12. reports { 
  13. xml.enabled = false 
  14. <span id="19_nwp"><a id="19_nwl" href="http://cpro.baidu.com/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 
  15. xml { 
  16. destination "$project.buildDir/reports/findbugs/findbugs.xml" 
  17. html { 
  18. destination "$project.buildDir/reports/findbugs/findbugs.html" 
  19.  
  20. classpath = files() 
  21. }</span></span></span></span></span> 

它是如此的像一個Checkstyle任務。盡管Findbugs支持HTML和XML兩種報告形式,我選擇HTML形式,因為這種形式更具有可讀性。而且,你只需要把報告的位置設置為書簽就可以快速訪問它的位置。這個任務也會失敗如果發現Findbgus錯誤失敗(同樣生成報告)。執行 FindBugs任務,就像執行CheckStyle任務(除了任務的名稱是“FindBugs”)。

 

Findbugs的使用技巧

 

由于Android項目是從Java項目略有不同,我強烈推薦使用FindBugs過濾器(規則配置)。你可以在這一個例子(例如項目之一)。它基本上忽略了R文件和你的Manifest文件。順便說一句,由于(使用)FindBugs分析你的代碼,你至少需要編譯一次你的代碼才能夠測試它。

 

PMD

 

簡介

 

這個工具有個有趣的事實:PMD不存在一個準確的名稱。(所以)在官網上你可以發現很有有趣的名稱,例如:

Pretty Much Done

 

Project Meets Deadline

 

事實上,PMD是一個工作有點類似Findbugs的強大工具,但是(PMD)直接檢查源代碼而不是檢查字節碼(順便說句,PMD適用很多語言)。 (PMD和Findbugs)的核心目標是相同的,通過靜態分析方法找出哪些模式引起的bug。因此為什么同時使用Findbugs和PMD呢?好吧!盡管Findbugs和PMD擁有相同的目標,(但是)他們的檢查方法是不同的。所以PMD有時檢查出的bug但是Findbugs卻檢查不出來,反之亦然。

 

Gradle的形式

 

下面的代碼向你展示了在你的項目中使用PMD的最基本的配置(以Gradle任務為例):

  1. task pmd(type: Pmd) { 
  2. ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.<span id="9_nwp"><a id="9_nwl" href="http://cpro.baidu.com/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>") 
  3. ignoreFailures = false 
  4. ruleSets = [] 
  5.  
  6. source '<span id="10_nwp"><a id="10_nwl" href="http://cpro.baidu.com/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>' 
  7. include '**/*.<span id="11_nwp"><a id="11_nwl" href="http://cpro.baidu.com/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>' 
  8. exclude '**/gen/**' 
  9.  
  10. reports { 
  11. xml.enabled = false 
  12. <span id="12_nwp"><a id="12_nwl" href="http://cpro.baidu.com/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 
  13. xml { 
  14. destination "$project.buildDir/reports/pmd/pmd.xml" 
  15. html { 
  16. destination "$project.buildDir/reports/pmd/pmd.html" 
  17. }</span></span></span></span> 

就PMD來說,它幾乎與Findbugs相同。PMD支持HTML和XML兩種報告形式,所以我再次選擇HTML形式。我強烈建議你使用自己的通用配置集文件,正如同我在這個例子(check this file)中一樣。所以,你當然應該去看下這些通用配置集文件。我建議你,因為PMD可比FindBugs更有爭議的很多,例如:如果你不聲明”if statement”或”if statement”為空,它基本上會給你警告信息。如果這些規則是正確的,或這對于您的項目(來說是正確的),我真的認可你和你隊友的工作。我不希望程序因為”if statement”崩潰,我認為這樣程序的可讀性很差。執行PMD任務,就像是(執行)CheckStyle任務(除了任務的名稱是“PMD”)。

 

PMD的使用技巧

 

我建議你不要使用默認的規則配置集,你需要添加這行代碼(已經加上):

  1. ruleSets = [] 

否則,因為默認值是這些基本的規則配置集,基本的規則配置集會和你定義的規則集一起執行。所以,如果你的自定義規則集不在那些基本配置集中,他們仍然會執行。

 

Android Lint

 

簡介

 

“Android lint工具是一個靜態代碼分析工具,它能檢查安卓項目源文件的潛在缺陷和優化改進的正確性,安全性,性能,可用性,可訪問性和國際化。”正如官方網站所說,Android Lint是另一種靜態分析工具,專門為Android服務。它是非常強大的,能給你大量的建議以提高你的代碼質量。

 

Gradle的形式

 

  1. android { 
  2. lintOptions { 
  3. abortOnError true 
  4.  
  5. lintConfig file("${project.rootDir}/config/quality/lint/lint.<span id="6_nwp"><a id="6_nwl" href="http://cpro.baidu.com/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>") 
  6.  
  7. // if true, generate an HTML report (with issue explanations, sourcecode, etc) 
  8. <span id="7_nwp"><a id="7_nwl" href="http://cpro.baidu.com/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>Report true 
  9. // optional path to report (default will be lint-results.html in the builddir) 
  10. htmlOutput file("$project.buildDir/reports/lint/lint.html"
  11. }</span></span> 

我建議你使用一個單獨的文件來定義哪些配置需要使用和不使用。這個網站根據***的ADT版本定義了全部的配置。我的演示項目中的lint文件包含所有這些規則(ADT 21),包含等級為”ignore”的”severity”:

IconDensities:這個規則配置確保你定義每個圖像資源中的(分辨率)密度(除了ldpi)。

 

IconDipSize:這個規則配置確保你為每個dip定義合適的資源(換句話來說,如果你沒有為每個density設置相同的圖片資源,則不需要重新設置圖片大小)。

 

所以你可以重用這個lint文件并激活你想要的所有規則。執行Android Lint任務,就像執行CheckStyle任務(除了任務的名稱是”lint”)。

 

Android Lint的使用技巧

 

對于Android Lint沒有什么特別的技巧,只需要牢記Android Lint會測試所有配置規則,除了那些等級為“ignore”的“severity”的配置。因此如果發布了新版本ADT下的新配置規則,他們將被檢查,而不是忽視。

 

實例演示

 

現在,你有所有的方法為您的項目使用這四個工具。顯然,如果我們能同時使用這四個工具會更好。你可以添加你的gradle任務之間的依賴,比如當你執行一個任務,其他任務則是***個完成后執行。通常在Gradle中,通過讓工具具有“check”任務來達到工具之間的相互關系:

check.dependsOn ‘checkstyle’, ‘findbugs’, ‘pmd’, ‘lint’現在,當執行“check” 任務的時候,Checkstyle, Findbugs, PMD, and Android Lint將會同時執行。在你執行/ commiting / pushing / ask merge request 之前進行質量檢查是一個很棒的方式。

你可以在這個Gradle文件中找到所有任務的一個完整例子。你可以把所有的質量配置文件和Gradle文件從你看到的演示實例中分開,這些演示的實例把一起都放在“config/quality” 文件夾下。

 

總結

 

在這篇文章中,利用Gradle對Android使用代碼質量檢查工具是非常容易。比使用質量工具局部檢查您的項目在您自己的計算機上,這些工具可以用于自動構建如Jenkins/Hudson這樣的平臺,讓你自動進行質量檢查,同時自動建立過程。執行所有我從CLI展現的測試,如同在 Jenkins/Hudson上執行,簡單地執行:

責任編輯:chenqingxiang 來源: 博客園
相關推薦

2022-08-24 14:42:51

Linux技巧

2011-06-14 18:13:05

網站分析

2015-01-23 10:17:23

DCIM數據中心運營與管理

2024-04-10 14:08:00

人工智能開發工具

2021-09-27 08:56:36

Python代碼函數

2015-07-15 10:27:48

Android代碼質量工具

2024-10-10 11:49:27

2020-03-02 09:26:16

JavaScript程序員JSON

2020-04-02 15:45:24

JavaScript開發 模塊

2023-08-01 10:31:03

工具平臺插件化

2009-04-02 10:14:00

VoIP服務質量QoS

2015-08-17 16:34:13

2010-09-07 21:41:04

2018-06-29 15:07:13

代碼工程師軟件開發

2021-09-13 05:01:45

軟件架構3Rs

2011-06-21 17:24:29

外鏈SEO

2023-05-24 06:56:18

實用AI工具

2023-04-27 13:16:45

2021-04-25 08:00:00

開發軟件質量保證

2018-01-01 22:45:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频在线观看 | 日韩一区二区三区在线播放 | 久久另类 | 日韩午夜影院 | 国产精品小视频在线观看 | 免费观看的av毛片的网站 | 天天看天天爽 | 成年人精品视频 | 欧洲精品一区 | 欧美在线观看一区 | 国产高清在线视频 | 成人a视频 | 色综合久久天天综合网 | 狠狠操网站 | 黄色大片免费网站 | 日韩精品在线观看一区二区三区 | 精品国产乱码久久久久久蜜退臀 | 欧美午夜在线 | 免费av一区二区三区 | 久久久久久久久久久福利观看 | 免费毛片网站在线观看 | 中文字幕一区在线观看视频 | 国产精品美女久久久久aⅴ国产馆 | 完全免费av在线 | 丝袜久久| 精品国产一区二区三区性色av | 亚洲人精品午夜 | 在线伊人网 | 视频一区二区在线观看 | 亚洲国产成人精 | 久久久www | 91se在线 | 91av在线电影| 亚洲网址| 日韩亚洲视频在线 | 狠狠做深爱婷婷综合一区 | 欧美日韩一二三区 | 国产免费一区二区 | 国产精品久久久久久久久图文区 | 国产成人一区在线 | 免费视频99|