Infer简介:
Facebook开源了适用于分析C、Java和Objective-C代码的静态分析工具Infer。
Infer是Facebook的开发团队在代码提交内部评审时,用来执行增量分析的一款静态分析工具,在代码提交到代码库或者部署到用户的设备之前找出bug。由OCaml语言编写的Infer目前能检测出空指针访问、资源泄露以及内存泄露,可对C、Java或Objective-C代码进行检测。Facebook使用Infer自动验证iOS和安卓上的移动应用的代码,bug报告的正确率达80%。
Infer通过捕获编译命令,把要被编译的文件转换为可用于分析潜在错误的中间语言格式。整个过程是增量进行的,意味着通常只有那些有修改过并提交编译的文件才会被Infer分析。Infer还集成了大量的构建或编译工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。
扫描的Bug类型:(针对Java来说)
Context leak:这个错误类型是针对Android的。在Android应用程序中,Context的子类(除了应用程序,这是一个特殊的情况)是短暂的组件,可以在Android框架中被创建和销毁。一旦框架决定销毁一个Context,它不能再次使用,应该被垃圾收集器释放。然而,程序员在它已被销毁后保留了Context,会创建一个内存泄漏。
Null dereference:Java/OC/C都会报告空引用的问题,当一个对象声明后,没有初始化,就被引用了,这个时候会报空指针错误。
Resource leak:资源泄漏的问题在Java/C/OC都存在,资源代表文件,sockets,连接等等,使用后需要关闭。
Tained value reaching sensitive function:此错误类型对应于安全或隐私问题。当不安全的数据流向敏感的方法时,一个安全漏洞会被报告时(例如,阅读一些主机名未验证的SSLSocket)。当秘密数据流向一个可能向外界泄漏值的方法时,(例如,用户数据流从SharedPreferences记录功能),一个安全类的bug就出现了
Infer安装:
在mac上,最简单的方法是用brew来安装。
首先确保你的brew是最新的,可以brew update 一下。
然后brew install infer,坐等就可以了。
命令行调用:
infer -- ./gradlew clean deployOnlineRelease -PdisablePreDex
命令执行成功的前提是本地的android环境ok,可以本地打包成功,这个需要事先保证好