Android静态代码检测
静态代码检测即不涉及代码运行的代码检测过程,其目的是为了发现代码潜在的缺陷和优化改进项,以保障代码的规范性,及时发现表面层次上的bug,防止低级错误的出现。下面简单介绍常用的进行代码质量检测的工具。
1.lint工具
可以检测:
- 布局性能
- 未使用到的资源或缺少的资源
- 国际化问题
- 图标的问题
manifest文件的错误
- 在项目目录执行命令gradle lint,则会在项目目录/app/build/outputs/lint-results-debug.html文件,可以用浏览器打开查看。
另一种方式是在AS里面projects下选择Analyze -> InspectCode,则会将xml以图形化的方式显示。
在Preferences -> Editor -> Inspections下可以自定义Android Lint的检查提示,如需要设置TextSize为dp时以错误显示,则找到相关设置将Severity改为Error即可。
代码中禁用Lint的方式:
- xml文件: tools:ignore=
[UnusedResources/NewApi/all]
- java代码中:@SuppressLint(
[NewApi/all]
)
2.findBugs
- 常见代码错误,序列化错误
- 可能导致错误的代码,如空指针引用
- 国际化相关问题:如错误的字符串转换
- 可能受到的恶意攻击,如访问权限修饰符的定义等
- 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
- 运行时性能问题:如由变量定义,方法调用导致的代码低效问题。
安装findBugs这个plugin,在项目菜单中可以找到findBugs
- 添加plugin
apply plugin:'findbugs'
- 定义任务,指定输格式
task findbugs(type: FindBugs) { ignoreFailures = true classes = fileTree('build/intermediates/classes/debug') source = fileTree('src') classpath = files() effort = 'max' reports { xml.enabled = false html.enabled = true } }
3.Checkstyle
- Javadoc注释
- 命名约定,代码规范
类设计等
它定义了一系列可用的模块,每一个模块提供了严格程度(强制的,可选的…)可配置的检查规则。规则可以触发通知(notification),警告(warning)和错误(error)。是定制在团队开发中遵守某些编码规范的工具。
使用:
- 添加plugin
apply plugin:'checkstyle'
- 设置CheckStyle版本
checkstyle { toolVersion '6.1.1' showViolations true }
设置配置文件,定义规范
check.dependsOn 'checkstyle' task checkstyle(type: Checkstyle) { source 'src' configFile file("config/checkstyle.xml") include '**/*.java' exclude '**/gen/**' ignoreFailures true classpath = files() }
规范也可在Preferences -> Editor -> Java 下制定/导入/导出以供使用