Android 代码优化工具FindBugs
1.前言:
在我們平時項目開發中,經常會寫一些不嚴謹的代碼或者一些比較低級的錯誤代碼,但是這些錯誤往往很難被發現,這樣就導致了我們的項目中會隱藏了很多影響性能甚至是導致閃退的錯誤代碼,于是許多響應的檢測工具就出現了.在這里我就介紹一下我比較常用的幾個檢測工具吧
項目DEMO源碼
2.FindBugs
顧名思義,FindBugs是一個尋找bug的工具,更具體的說FindBugs是一個靜態檢測java代碼的工具,可以找到代碼中的一些潛在bug,比如說NullPointerException,或者是一些流或者數據庫沒有關閉的問題.
2.1作用
檢測范圍 :
- 常見代碼錯誤,序列化錯誤
- 可能導致錯誤的代碼,如空指針引用
- 國際化相關問題:如錯誤的字符串轉換
- 可能受到的惡意攻擊,如訪問權限修飾符的定義等
- 多線程的正確性:如多線程編程時常見的同步,線程調度問題。
- 運行時性能問題:如由變量定義,方法調用導致的代碼低效問題
2.2使用方法
FindBugs在Android studio里面有個插件 正常安裝即可(不會安裝插件的自己google)
安裝好插件之后重啟一下Android studio,在底部會有個紅色的圖標(不同版本可能位置不同),如果你出現了這個圖標,那么恭喜你完成了第一步
點擊左側第五個按鈕可以開始檢測
檢測結果顯示如下
-
當創建流的時候發生了異常 那么inputStream就可能為空 接下來直接調用inputStream就可能產生空指針異常
-
這里使用了io流,但是沒有做釋放
2.3設置
在setting里面還可以對FindBugs做一些設置(這里就不做詳細的介紹了)
2.4自定義規則
FindBugs可以在gradle里面做自定義任務
(注意需要在gradle里面添加 apply plugin:'findbugs')
在這里配置了規則findbugs-filter.xml 以及報告生成的路徑findbugs.xml
task findbugs(type: FindBugs, dependsOn: "assembleDebug") {ignoreFailures = falseeffort = "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 = falsehtml.enabled = truexml {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 = falseruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml") //這里是自定義的規則ruleSets = []source 'src'include '**/*.java'exclude '**/gen/**'reports {xml.enabled = falsehtml.enabled = truexml {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 如果勾上的話,檢測到錯誤時只是會以警告的形式提示
下面是勾上時的提示方式(以警告的形式)
下面是不勾時的提示方式(以報錯的形式)
下面是選擇官方默認的檢測規則(也可以自己定義,具體這里就不做詳解了)
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鏈接
https://github.com/yulyu2008/QualityDemo
注意Demo里面的task都抽取到了config目錄下的quality.gradle中,所以需要在項目的build.gradle添加
apply from: '../config/quality.gradle'
Demo是在他人的基礎上修改的,由于已經無法找到源頭,所以在這里聲明一下
原文地址: https://juejin.im/post/58d4e35261ff4b00605326d9
總結
以上是生活随笔為你收集整理的Android 代码优化工具FindBugs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android调试神器Stetho
- 下一篇: Android开发之Android5.1