01
什么是 Error Prone?
谷歌2015年开源的java静态检查工具,可以轻松集成于现有的编译环境中,帮助开发者在编译期间发现代码缺陷,针对java和Android十分适用。
- Hook标准的构建过程,代码无侵入- 错误产生后及时告知- 提供完善的修复建议,并且允许基于此构建工具
示例:
02
如何使用?
1、添加依赖
Gradle配置方案是由外部贡献(github.com/tbroyer/gra…
注意:
Gradle插件依赖Gradle内部API,只支持Gradle2.0以上的对应版本,且需要要与javac版本对应(JDK7以上)
( Maven、ANT配置见官方文档:errorprone.info/docs/instal…
2、控制检查项
Error Prone中使用bug模板的方式进行检查,允许用户启用和禁用特定检查项,可以配置选项来旋盖默认的严重级别。
Javac的命令行选项如下
-Xep:<checkName>[:severity]
CheckName是检查规范的名称,例如上面例子中的” StringSplitter”;
Serverity是{“OFF”,“WARN”,“ERROR”}之一,ERROR会中断编译并告警,WARN会提示告警但不会中断编译,其他值会导致编译错误。
如果一个检查项被重复设置,则使用最后一次设置的severity生效。
使用gradle中的设置举例:
注: D:\AndroidTest\leakcanary-1.5.4\leakcanary-android\src\main\java\com\squareup\leakcanary\internal\LeakCanaryInternals.java使用或覆盖了已过时的 API。
注: 有关详细信息, 请使用 -Xlint:deprecation 重新编译。
1 个错误
3、过滤检查目录
我们还可以自定义过滤检查目录来减少无必要的检查与误报。例如官方的例子,我们在complieArgs添加-XepExcludedPaths 标志,以过滤包含build/generated的路径下所有文件
4、优势与缺陷
对比老牌的FindBugs,Error Prone有很多优点:
- Google主导并开源的项目,社区活跃度很高,有详细丰富的文档指导- 提供简单但明确的修复指导- Bug Partten的检查模式,不必维护xml- 不检查字节码,hook到编译过程中,编译即体现,可以尽早发现问题- 支持插件化的自定义检查标准,已有基于Error Prone开源项目NullAway
缺点: - 不支持多语言- 仅支持JDK7以上,且与Gradle版本的协调稍显繁琐- 目前源码中已有的检查标准比较谨慎,只有100左右的告警,不如FindBugs丰富- 会增加编译时间
5、应用与前景
参考链接
Q