一.背景
能进行静态代码检测的工具那么多,为啥偏偏是火线360(以下简称火线)呢?具体可以看这边,其次也是因为CI的jenkins也用到了它进行代码检查,这样本地和jenkins能保持检查规则的一致。
实现目标:在git commit前先进行静态代码检查,如果有检查出问题,此次commit则会失败
二.实现思路
在项目下的.git/hooks 文件下有git操作的各种钩子(shell脚本)例子,这里用到的是git提交前的pre-commit.sample钩子,修改该文件调用执行静态代码检查的gradle任务;这个任务首先会开启静态检查,其次检查完后会分析此次检查是否存在代码问题,如果存在代码问题会调用命令非正常退出,git钩子则会根据是否正常退出决定此次提交能否成功;
三.详细过程
1.本地gradle脚本(后续可以做成gradle插件方便其他项目使用)
①检测规则配置文件config.xml和fireline.jar的获取参考火线360的使用手册,本地集成主要看手册里面的命令行参数说明和Gradle部署
②gradle脚本的使用已经在代码里有详细注释了
③pre-commit.sample的使用看下一节
2.git pre-commit钩子
这个钩子文件本就存在于android项目下的.git/hooks目录下,添加的代码只有上图红框框住的地方,添加代码的作用图中已有解释
3.应用本地插件
四.不足
①.因为规则不能自定义,不像lint那么灵活,没办法定制化
②.只能过滤规则