静态代码分析工具
静态代码分析工具 - 分析代码而不执行它。通常用于发现错误或确保符合编码指南。有助于保持你的代码健康,并保持代码质量。
在Android上,最流行的代码分析工具是:
- Lint
- PMD
- Findbugs
我通常将静态代码分析脚本和相关文件保存在单独的文件夹中。
Lint
lint工具检查你的Android项目源文件是否存在潜在错误,并针对正确性,安全性,性能,可用性,可访问性和国际化进行优化改进。
配置
添加lint到你的android项目创建script-lint.gradle文件。
重要的lint选项:
- lintConfig —lint规则集的路径(可以用来配置压制警告)。
- htmlOutput —html报告生成的地方。
将script-lint.gradle导入到build.gradle文件。
apply plugin:'com.android.application' apply from:"$project.rootDir/tools/script-lint.gradle"
测试
重新构建你的项目,然后使用./gradlew lint命令运行lint。如果它发现一些问题,你会看到类似下面的输出。
当你打开lint.html报告文件时,你将看到问题列表描述,和如何解决它们的建议。
如果你想忽略此问题,请将以下规则添加到rules-lint.xml文件中。
<?xml version="1.0" encoding="utf-8"?> <lint> <issue id="GoogleAppIndexingWarning" severity="ignore" /> </lint>
注意:还有其他方法可以压制lint警告。有关lint的更多信息,请访问官方网站。
Findbugs
静态代码分析工具,用于分析Java字节码并检测各种各样的问题。
配置
要添加findbug到你的android项目需要创建script-findbugs.gradle文件。
apply plugin:'findbugs' task findbugs(type: FindBugs){ excludeFilter.file("$project.rootDir/tools/rules-findbugs.xml") classes=fileTree("Sproject.buildDir/intermediates/classes/dev/debug/com/dd" ) source = fileTree("$project.rootDir/src/main/java/com/dd/") classpath = files() reports{ xml. enabled.false html.enabled.true html.destination="$project.buildDir/outputs/findbugs/findbugs,html"
重要的findbugs选项:
- excludeFilter —findbugs规则集文件所在的路径,你可以在其中压制问题。
- classes — 生成的类的路径(如果你有多个flavor,路径由flavor名称组成,在当前情况下为“dev”)。
- source —源代码的路径
- html.destination —html报告生成的路径
将script-findbugs.gradle导入到build.gradle文件。
apply plugin:'com.android,application' apply from:"$project.rootDir/tools/script-findbugs.gradle"
测试
为了测试,我们将创建以下方法。
//MainActivity.java ... private void someMethod(int variable){ switch (variable){ case 1: System.out.println("1"); case 2: System.out.println("2");
重新构建你的项目,然后运行findbugs ./gradlew findbugs命令。如果它发现一些问题,你会看到类似下面的输出。
当你打开findbugs.html报告文件,你将看到问题列表与说明和如何解决它们的建议。
如果你想忽略此问题,请将以下规则添加到rules-findbugs.xml文件中。
<FindBugsFilter> <Bug pattern="SF_ SWITCH_NO_DEFAULT" /> <Bug pattern="SF_ SWITCH_FALLTHROUGH" /> </FindBugsFilter>
注意:还有其他方法去压制findbugs警告。有关findbugs的更多信息,请访问官方网站。