Jenkins 集成 Android 代码检查
Android lint 是一个静态代码分析工具,通过 lint 工具,你可以不用边运行边调试,或者通过单元测试进行代码检查,可以检测代码中不规范、不和要求的问题,解决一些潜在的 bug。lint 工具可以在命令行上使用,也可以在 Android studio 中使用。是 sdk 自带的一种静态分析工具,在 sdk 目录的 tools 目录下面的 bin 可以找到 lint 工具。可以直接在 Android stuido 中调用,也可以通过命令行./gradlew lint 执行,当然也可以集成到 jenkins 中,每次编译的时候都执行代码。
Lint 会根据预先配置的检测标准检查我们 Android 项目的源文件,发现潜在的 bug 或者可以优化的地方,主要针对几个方面:
Correctness:不够完美的编码,比如硬编码、使用过时 API 等;
Performance:对性能有影响的编码,比如:静态引用,循环引用等;
Internationalization:国际化,直接使用汉字,没有使用资源引用等
Security:不安全的编码,比如在 WebView 中允许使用 JavaScriptInterface
Lint 规则文件 lint.xml 可以自定义修改检查标准,可以使用默认的规则,也可以自定义一些特定条件的规则
上面提到了代码检查可以集成到 jenkins 中,只需要在构建过程中添加类似如下步骤即
在执行构建时,就会自动检查 android_sdk_refactor_as 工程下所有的 Android 代码,生成 lint-results.xml 结果文件。生成结果文件通过 Android Lint Plugin 发布出去,这样就可以直观的看到检查报告。
生成类似结构的报告后可以进行简单的分析了,如下面问题:
第一眼看到 High Priority 就有 37 个,不必惊慌去掉重复调用的影响后就会少一半了。再由于静态代码的存在误判行为,结合上下文环境,又会减少一些。如上面这个问题,很明显是由于项目配置的支持最小 SDK 版本是 14,可是工程中却使用了 SDK 必须大于 19 才能使用的 api,当工程运行在低版本的手机时,就很容易发生各种异常。或者出现类似下面异常
当工程试图调用只有用户同意才可以访问的接口时,程序应该做出当用户拒绝操作权限时的相应处理。
集成过程中坑点
开始设想把代码检查放在【构建后操作】来做,这样既不影响打包,也可以做代码检查。但是这样无法发布 lint 测试报告,因为构建后第一个步骤就是发布 lint 测试报告。
由于现在很多项目都是多个工程一起构建,一定要把 gradlew lint 命令写在主工程下面。多个工程,代码检查会生成多个结果文件,但是多个文件不能合并。
有的工程没有忽略 lint 警告,当出现警告后就会停止编译,所以需要把每个检查的工程都配置忽略警告。
更多资料可点击下方
评论