静态代码检测即不涉及代码运行的代码检测过程,其目的是为了发现代码潜在的缺陷和优化改进项,以保障代码的规范性,及时发现表面层次上的bug,防止低级错误的出现。下面简单介绍常用的进行代码质量检测的工具。

1.lint工具

可以检测:

  • 布局性能
  • 未使用到的资源或缺少的资源
  • 国际化问题
  • 图标的问题
  • manifest文件的错误

  1. 在项目目录执行命令gradle lint,则会在项目目录/app/build/outputs/lint-results-debug.html文件,可以用浏览器打开查看。
  2. 另一种方式是在AS里面projects下选择Analyze -> InspectCode,则会将xml以图形化的方式显示。
    在Preferences -> Editor -> Inspections下可以自定义Android Lint的检查提示,如需要设置TextSize为dp时以错误显示,则找到相关设置将Severity改为Error即可。

代码中禁用Lint的方式:

  1. xml文件: tools:ignore=[UnusedResources/NewApi/all]
  2. java代码中:@SuppressLint([NewApi/all])

2.findBugs

  • 常见代码错误,序列化错误
  • 可能导致错误的代码,如空指针引用
  • 国际化相关问题:如错误的字符串转换
  • 可能受到的恶意攻击,如访问权限修饰符的定义等
  • 多线程的正确性:如多线程编程时常见的同步,线程调度问题。
  • 运行时性能问题:如由变量定义,方法调用导致的代码低效问题。

安装findBugs这个plugin,在项目菜单中可以找到findBugs

  1. 添加plugin apply plugin:'findbugs'
  2. 定义任务,指定输格式
    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)。是定制在团队开发中遵守某些编码规范的工具。
    使用:

  1. 添加plugin apply plugin:'checkstyle'
  2. 设置CheckStyle版本
    checkstyle {
        toolVersion '6.1.1'
        showViolations true
    }    
    
  3. 设置配置文件,定义规范

    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 下制定/导入/导出以供使用