以爲本身代碼寫得不夠好?那就用 Android 代碼優化工具吧~

1.前言:

在咱們平時項目開發中,常常會寫一些不嚴謹的代碼或者一些比較低級的錯誤代碼,可是這些錯誤每每很難被發現,這樣就致使了咱們的項目中會隱藏了不少影響性能甚至是致使閃退的錯誤代碼,因而許多響應的檢測工具就出現了.在這裏我就介紹一下我比較經常使用的幾個檢測工具吧javascript

項目DEMO源碼

2.FindBugs

顧名思義,FindBugs是一個尋找bug的工具,更具體的說FindBugs是一個靜態檢測java代碼的工具,能夠找到代碼中的一些潛在bug,好比說NullPointerException,或者是一些流或者數據庫沒有關閉的問題.html

2.1做用

檢測範圍 :java

  • 常見代碼錯誤,序列化錯誤
  • 可能致使錯誤的代碼,如空指針引用
  • 國際化相關問題:如錯誤的字符串轉換
  • 可能受到的惡意攻擊,如訪問權限修飾符的定義等
  • 多線程的正確性:如多線程編程時常見的同步,線程調度問題。
  • 運行時性能問題:如由變量定義,方法調用致使的代碼低效問題

    2.2使用方法

    FindBugs在Android studio裏面有個插件 正常安裝便可(不會安裝插件的本身google)

安裝好插件以後重啓一下Android studio,在底部會有個紅色的圖標(不一樣版本可能位置不一樣),若是你出現了這個圖標,那麼恭喜你完成了第一步

點擊左側第五個按鈕能夠開始檢測

檢測結果顯示以下
  • 當建立流的時候發生了異常 那麼inputStream就可能爲空 接下來直接調用inputStream就可能產生空指針異常
    android

  • 這裏使用了io流,可是沒有作釋放
    git

2.3設置

在setting裏面還能夠對FindBugs作一些設置(這裏就不作詳細的介紹了)

2.4自定義規則

FindBugs能夠在gradle裏面作自定義任務
(注意須要在gradle裏面添加 apply plugin:'findbugs')


在這裏配置了規則findbugs-filter.xml 以及報告生成的路徑findbugs.xml
task findbugs(type: FindBugs, dependsOn: "assembleDebug") {
    ignoreFailures = false
    effort = "max"
    reportLevel = "high"
    excludeFilter = new File("$configDir/findbugs/findbugs-filter.xml")//這裏是自定義的規則
    classes = files("${project.rootDir}/app/build/intermediates/classes")

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination "$reportsDir/findbugs/findbugs.xml"  //這裏是報告產生的路徑
        }
        html {
            destination "$reportsDir/findbugs/findbugs.html"  //這裏是報告產生的路徑
        }
    }

    classpath = files()
}複製代碼
運行自定義任務(找到任務,雙擊便可)

3.PMD

PMD和FindBugs的做用差很少,可是他們倆的檢測方法不一樣,因此同時使用能達到互補.

3.1做用

檢測範圍 :
  • 可能的bug——空的try/catch/finally/switch塊。
  • 無用代碼(Dead code):無用的本地變量,方法參數和私有方法。
  • 空的if/while語句。
  • 過分複雜的表達式——沒必要要的if語句,原本能夠用while循環可是卻用了for循環。
  • 可優化的代碼:浪費性能的String/StringBuffer的使用。

3.2使用方法

PMD在Android studio也有個插件,直接安裝便可(注意搜索的關鍵字用QAPlug - PMD)

3.3自定義規則

(注意須要在gradle裏面添加 apply plugin: 'pmd')

task pmd(type: Pmd) {
    ignoreFailures = false
    ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml") //這裏是自定義的規則
    ruleSets = []

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination "$reportsDir/pmd/pmd.xml"  //這裏是報告產生的路徑
        }
        html {
            destination "$reportsDir/pmd/pmd.html"  //這裏是報告產生的路徑
        }
    }
}複製代碼
在這裏配置了規則pmd-ruleset.xml 以及報告生成的路徑 pmd.html

運行自定義任務(跟FindBugs同樣,找到任務,雙擊便可)

4.CheckStyles

CheckStyles是用來檢測java代碼規範性的

4.1做用

檢測範圍 :
  • 註解
  • javadoc註釋
  • 命名規範
  • 文件頭
  • 導入包規範
  • 尺寸設置
  • 空格
  • 正則表達式
  • 修飾符
  • 代碼塊
  • 編碼問題
  • 類設計問題
  • 重複、度量以及一些雜項

4.2使用方法

安裝插件 CheckStyles

4.3設置

TreatCheckstyle errors as warnings 若是勾上的話,檢測到錯誤時只是會以警告的形式提示github

下面是勾上時的提示方式(以警告的形式)正則表達式

下面是不勾時的提示方式(以報錯的形式)
數據庫

下面是選擇官方默認的檢測規則(也能夠本身定義,具體這裏就不作詳解了)
編程

4.4經過gradle運行

(注意須要在gradle裏面添加 apply plugin: 'checkstyle')

task checkstyle(type: Checkstyle) {
    configFile file("$configDir/checkstyle/checkstyle.xml") //這裏是自定義的規則
    configProperties.checkstyleSuppressionsPath = file("$configDir/checkstyle/suppressions.xml").absolutePath  //這裏是自定義的規則
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    classpath = files()
}複製代碼

5.Demo源碼

Demo連接

github.com/yulyu2008/Q…

注意Demo裏面的task都抽取到了config目錄下的quality.gradle中,因此須要在項目的build.gradle添加android-studio

apply from: '../config/quality.gradle'

Demo是在他人的基礎上修改的,因爲已經沒法找到源頭,因此在這裏聲明一下

熱門文章

相關文章
相關標籤/搜索