Infer工具能做什么:
Facebook 的 Infer 是一个静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题。任何人都可以使用 Infer 检测应用,这可以将那些严重的 bug 扼杀在发布之前,同时防止应用崩溃和性能低下。
Infer 可检查 Android 和 Java 代码中的 NullPointException 和 资源泄露。除了以上,Infer 还可发现 iOS 和 C 代码中的内存泄露。
使用步骤:
- 使用brew 命令安装:brew install infer。执行完后用命令infer --version检查是否安装成功,如果类似如下结果表示infer安装成功。
zhuzhaoyangdeMacBook-Air:android zhuzhaoyang$ infer --version
Infer version v0.15.0
Copyright 2009 - present Facebook. All Rights Reserved.
- 进入到项目的根目录文件夹内执行命令:infer -- gradle build ,开始编译分析。如果报以下错误,表示没有配置gradle环境变量
/usr/local/bin/infer: unknown option '--gradle'.
Infer version v0.15.0
Copyright 2009 - present Facebook. All Rights Reserved.
Usage: infer command [options]
See `infer --help` for more information.
解决方法:在电脑根目录下用命令 open .bash_profile 打开文件,并在.bash_profile文件中配置gradle的环境变量,如下
export GRADLE_HOME=/Applications/Android\ Studio.app/Contents/gradle/gradle-4.10.1
export PATH=$PATH:$GRADLE_HOME/bin
export JAVA_HOME=/Applications/Android\ Studio.app/Contents/jre/jdk/Contents/Home
保存以后,执行命令souce .bash_profile 使改动立即生效。再次进入Android项目的目录里执行infer -- gradle build。
出现一下情况表示正在检查:
如果在检测过程当中遇到以下错误:
18:21:04.062 [ERROR] [org.gradle.internal.buildevents.BuildResultLogger] BUILD FAILED in 2m 21s
ERROR: couldn't run compilation command `[u'gradle', '--debug', u'build']`
Internal Error: /usr/local/Cellar/infer/0.15.0/lib/infer/infer/bin/../lib/python/infer.py
-j 4 --project-root /Users/zhuzhaoyang/sc/hkApp/android --out
/Users/zhuzhaoyang/sc/hkApp/android/infer-out -- gradle build:
exited with code 1
Error backtrace:
Raised at file "base/Die.ml" (inlined), line 25, characters 6-36
Called from file "base/Logging.ml", line 314, characters 58-80
Called from file "integration/Driver.ml", line 159, characters 2-16
Called from file "integration/Driver.ml", line 280, characters 6-420
Called from file "infer.ml", line 20, characters 2-36
Called from file "infer.ml", line 130, characters 8-54
Run the command again with `--keep-going` to try and ignore this error.
在app(或module)下的build.gradle的android下添加以下:
lintOptions {
abortOnError false
}
然后重新执行命令 :infer -- gradle build。当出现以下情况表明正在编译完成正在分析文件:
执行完以后会在项目根目录的里生成infer-out文件夹,该文件夹里会生成名为bugs.txt的文件,查看该文件,分析项目里可能存在的代码风险。