A program which uses static analysis to look for bugs in Java code. It is free software, distributed under the terms of the Lesser GNU Public License. The name FindBugs™ and the FindBugs logo are trademarked by The University of Maryland. FindBugs has been downloaded more than a million times.
findbugs是一个分析bytecode并找出其中可疑部分的一个工具。它给项目字节码做一个全面扫描,通过一些通用规则去判断可能潜在的一些问题,比如性能,多线程安全等等。
FindBugs基本上只需要一个程序来做分析的字节码,所以这是非常容易使用。它能检测到常见的错误,如错误的布尔运算符。
FindBugs也能够检测到由于误解语言特点的错误,如Java参数调整(这不是真的有可能因为它的参数是传值)。
FindBugs是一个Java静态分析工具,用来检查类或者jar文件,用来发现可能的问题。检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的bug,比如NullPointException,特定的资源没有关闭,查询数据库没有调用Cursor.close()等,如果才用人工的方式很难才能发现类似的bug,或者这些bug永远不会发现,直到运行时才发现,还有可能是一直没有出现,别人调用的时候没有做检查就调用了…..
Java的静态分析工具当然可以无难度的在Android上面运行,通过这种FindBugs的检查可以让App的运行更加的稳定。
集成
FindBugs在Gradle中是当做一个插件存在的,可以在Android Studio中直接使用:
|
|
ignoreFailures:有警告错误的时候也是允许构建。
reportLevel:报告的级别,Low,Medium,High一般来说我们首先关注的是高级别的报告,再关注低一级别的报告。
classes和source分别是对应的.classe文件夹地址,和源代码文件地址。
repoets指定报告类型,有两种方式xml和html,只允许一种输出格式。
在右侧的Gradle的对于的Module可以在Tasks中找到对应的findBugs任务,点击即可运行。
Best Practice
How to improve quality and syntax of your Android code
About the hierarchy of my demo project :
Since you can split your gradle script in many files, I currently have 3 gradles files :
- The one in the root folder, which is more or less just about configuration for the project (which maven repos to use, which Gradle version to use….).
- The one in the subfolder app, which is a very classic gradle file to build an Android application.
- The one in the subfolder config, on which we will focus on, since I use this one to retain and configure all my quality tools for my project.
Pitfall
Android Studio 错误
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
- 第1步
添加依赖于你的build.gradle支持MultiDex库
|
|
- 第2步
在buildType或productFlavor中开启multiDexEnabled。
|
|
Reference
[1]Android中使用FindBugs
[2]FindBugs
[3]Android静态代码分析
[4]如何利用工具提高你的 Android 代码质量
[5]vb-android-app-quality
[6]Android Studio 错误 com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
[7]How to improve quality and syntax of your Android code
[8]FindBugs