背景:项目代码之前在静态检测这方面一般使用开发软件自带的Analyze功能。另外,依赖于大家的相互review机制保障代码的质量。开发软件自身的Analyze功能存在一定的局限性以及需要手动化,为了提升静态检测的自动化和更多的case点。调研了一下三方的检测工具,且考虑到iOS和android双平台,可维护性等,最后选择了facebook的Infer工具。
以下说明部署的环境:
- mac mini
- jenkins
- Xcode以及Command Line Tools环境
- android sdk
- git项目库
- python
遇到的坑以及解决方案:
-
brew install infer 方式安装的版本太老,运行会报错。
解决方案:去github上下载最新的v1.0.0版本,解压,配置环境变量。 -
执行检测命令出现一堆库授权问题,报错。
解决方案:信任所有的库,当然其中libgmp 以及libsqlite那两个库可以移除不授权,不影响使用,其它都要授权。 -
执行检测命令出现:“Uncaught Internal Error: (Unix.Unix_error "No such file or directory" connect "((addr (ADDR_UNIX sqlite_write_socket)))")”
解决方案:因为我们项目是通过自己编写的shell脚本实现各个库的编译以及出包,指定的是Legacy Build System(使用New Build System会报错)。为了解决以上问题,单独建了一个InferBuild,指定使用New Build System,即解决问题。 说白了,Infer 必须使用New Build System(mac OS10.15.x)。 -
出现报错“mac OS file system sandbox blocked open()”。
解决方案:Infer环境问题,重新挪了一个文件夹路径解决。 -
Infer的二次编译
解决方案:需要加上 -- reactive -
android遇到的问题是mac上android sdk版本与项目使用的sdk版本不一致的问题,退回版本一致即可.
-
关于jenkins的配置,以及自定义获取report.txt邮件等相关配置,以及规则不做多说。唯一注意的是,“ Project From ”需要填空,不然邮件会发失败。