http://www.jianshu.com/p/2b8d34b2267c
在团队Android项目开发过程中,难免会出现一些比较不容易发现,但是又比较低级的bug。而且因为每个开发人员的编码习惯不同,写出的代码也会有差异。为了保证团队开发中代码的规范以及尽量避免低级bug,我们往往需要一些工具来进行严格的检查。下面将介绍在项目中用到的四种插件 lint、findBugs、PMD、 CheckStyles 的功能和使用方式,以及如何将多个插件整合在一起,在方便使用的同时尽量做到与项目工程解耦。
Lint是Android Studio提供的一个代码检测工具,通过它开发者不用运行或者写测试代码,就可以发现和纠正问题,优化代码结构。每个被检测到的问题,都会生成一条描述信息并指明相应的严重性级别,当然这个严重性级别我们也可以自己设置的。
国际化
Android Studio自带,无需安装。
在工程的根目录下运行相应的gradle task。
gradle lint
./gradlew lint
当运行上面的命令执行完后,就会在项目目录/app/build/outputs/lint-results-debug.html生成相应的文件,可用浏览器打开查看。
有时我们可能只针对某个文件或者某个目录进行检测,这时使用gradle的方式就比较麻烦了,所以Android Studio提供给我们手动运行lint的方式。
此时会出现一个选择“指定检测范围”的dialog
配置完成后,点击OK按钮,进行检测。检测结果如下图所示,左边是检测类型的树形结构,右边则展示详细的信息。
注:详细的使用,请看官网文档 Improve Your Code with Lint
FindBugs是一个Java静态分析工具,用来检查类或者jar文件,用来发现可能的问题。检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的bug,比如NullPointException,特定的资源没有关闭,查询数据库没有调用Cursor.close()等
在Android Studio中选择Preferences -> Plugins,输入查找findBugs进行插件安装。
在build.gradle文件中,按照下面步骤进行设置:
apply plugin:'findbugs'
task findbugs(type: FindBugs, dependsOn: "assembleDebug") {
ignoreFailures = true
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()
}
这里要注意因为findBugs是检查class文件,所以在定义task的时候,我们是dependsOn: "assembleDebug",确保运行findbugs的task能够成功检测。
通过gradle findbugs方式,在工程目录下运行命令,检测完成后,会在制定的目录下生成报告文档。文档支持xml和html两种格式,本文设置的是html格式,可以直接用浏览器打开。
当然,和lint一样,findBugs也支持手动检测的方式。在工程里,右键 FindBugs -> (选择检测的范围)。检测完之后,底部工具栏会跳到FindBugs-IEDA下,如图所示。
PMD是一个很有用的工具,它跟Findbugs类似,但是它不是检测字节码,它是直接检测源代码。它使用静态分析来发现错误。为什么要将它们同时使用呢?因为它们的检测方法不同,可以取到互补的作用。
同样可以通过AS的plugin进行安装,推荐安装QAPlug-PMD。
在build.gradle文件中进行如下配置
apply plugin: 'pmd'
task pmd(type: Pmd) {
ignoreFailures = false
ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml")
ruleSets = []
source 'src'
include '**/*.java'
exclude '**/gen/**'
exclude 'androidTest/**'
exclude 'test/**'
reports {
xml.enabled = false
html.enabled = true
xml {
destination "$reportsDir/pmd/pmd.xml"
}
html {
destination "$reportsDir/pmd/pmd.html"
}
}
}
这个工具用来自动检测java源码。启动之后,可以按照制定的规则对java源码进行检查,被将所有的不符合规范的地方生成报告通知给你。
总而言之,是一些代码规范问题!!
通过AS的Plugin进行安装
apply plugin: 'checkstyle'
checkstyle {
toolVersion '6.1.1'
showViolations true
}
task checkstyle(type: Checkstyle) {
configFile file("$configDir/checkstyle/k12_checkstyle.xml")
configProperties.checkstyleSuppressionsPath = file("$configDir/checkstyle/suppressions.xml").absolutePath
source 'src'
include '**/*.java'
exclude '**/gen/**'
exclude 'androidTest/**'
exclude 'test/**'
ignoreFailures true
classpath = files()
}
lint、PMD、findBugs和CheckStyle检测范围之和。
apply from: '../config/quality.gradle'
// 应用目录名称
def appDir = "app-k12"
最后,随文附上插件的git地址,欢迎fork和star。
config
再推荐之前封装的两个好用的组件: