技术APP优化代码优化

让你的项目更优雅

2017-01-04  本文已影响2740人  宇是我

前言

在团队Android项目开发过程中,难免会出现一些比较不容易发现,但是又比较低级的bug。而且因为每个开发人员的编码习惯不同,写出的代码也会有差异。为了保证团队开发中代码的规范以及尽量避免低级bug,我们往往需要一些工具来进行严格的检查。下面将介绍在项目中用到的四种插件 lintfindBugsPMDCheckStyles 的功能和使用方式,以及如何将多个插件整合在一起,在方便使用的同时尽量做到与项目工程解耦。

一、lint

Lint是Android Studio提供的一个代码检测工具,通过它开发者不用运行或者写测试代码,就可以发现和纠正问题,优化代码结构。每个被检测到的问题,都会生成一条描述信息并指明相应的严重性级别,当然这个严重性级别我们也可以自己设置的。

检测范围

插件安装

Android Studio自带,无需安装。

插件使用

通过Gradle运行lint

在工程的根目录下运行相应的gradle task。

gradle lint
./gradlew lint

当运行上面的命令执行完后,就会在项目目录/app/build/outputs/lint-results-debug.html生成相应的文件,可用浏览器打开查看。

手动运行lint

有时我们可能只针对某个文件或者某个目录进行检测,这时使用gradle的方式就比较麻烦了,所以Android Studio提供给我们手动运行lint的方式。

注:详细的使用,请看官网文档 Improve Your Code with Lint

二、findBugs

FindBugs是一个Java静态分析工具,用来检查类或者jar文件,用来发现可能的问题。检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的bug,比如NullPointException,特定的资源没有关闭,查询数据库没有调用Cursor.close()等

检测范围

插件安装

在Android Studio中选择Preferences -> Plugins,输入查找findBugs进行插件安装。

插件使用

在build.gradle文件中,按照下面步骤进行设置:

  1. 添加plugin apply plugin:'findbugs'
  2. 定义任务,指定输出格式
task findbugs(type: FindBugs, dependsOn: "assembleDebug") {
    ignoreFailures = true
    effort = "max"
    reportLevel = "high"
    excludeFilter = new File("$configDir/findbugs/findbugs-filter.xml")
    classes = files("${project.rootDir}/app/build/intermediates/classes")

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination "$reportsDir/findbugs/findbugs.xml"
        }
        html {
            destination "$reportsDir/findbugs/findbugs.html"
        }
    }

    classpath = files()
}

这里要注意因为findBugs是检查class文件,所以在定义task的时候,我们是dependsOn: "assembleDebug",确保运行findbugs的task能够成功检测。

通过gradle findbugs方式,在工程目录下运行命令,检测完成后,会在制定的目录下生成报告文档。文档支持xml和html两种格式,本文设置的是html格式,可以直接用浏览器打开。
当然,和lint一样,findBugs也支持手动检测的方式。在工程里,右键 FindBugs -> (选择检测的范围)。检测完之后,底部工具栏会跳到FindBugs-IEDA下,如图所示。

三、PMD

PMD是一个很有用的工具,它跟Findbugs类似,但是它不是检测字节码,它是直接检测源代码。它使用静态分析来发现错误。为什么要将它们同时使用呢?因为它们的检测方法不同,可以取到互补的作用。

检测范围

插件安装

同样可以通过AS的plugin进行安装,推荐安装QAPlug-PMD。


插件使用

在build.gradle文件中进行如下配置

task pmd(type: Pmd) {
    ignoreFailures = false
    ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml")
    ruleSets = []

    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    exclude 'androidTest/**'
    exclude 'test/**'

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination "$reportsDir/pmd/pmd.xml"
        }
        html {
            destination "$reportsDir/pmd/pmd.html"
        }
    }
}

四、CheckStyles

这个工具用来自动检测java源码。启动之后,可以按照制定的规则对java源码进行检查,被将所有的不符合规范的地方生成报告通知给你。

检测范围

总而言之,是一些代码规范问题!!

插件安装

通过AS的Plugin进行安装


插件使用

apply plugin: 'checkstyle'
checkstyle {
    toolVersion '6.1.1'
    showViolations true
}
task checkstyle(type: Checkstyle) {
    configFile file("$configDir/checkstyle/k12_checkstyle.xml")
    configProperties.checkstyleSuppressionsPath = file("$configDir/checkstyle/suppressions.xml").absolutePath
    source 'src'
    include '**/*.java'
    exclude '**/gen/**'
    exclude 'androidTest/**'
    exclude 'test/**'
    ignoreFailures true
    classpath = files()
}

五、插件的接入与使用

检测范围

lint、PMD、findBugs和CheckStyle检测范围之和。

插件安装

apply from: '../config/quality.gradle'

插件使用

// 应用目录名称
def appDir = "app-k12"

总结

最后,随文附上插件的git地址,欢迎fork和star。
config

再推荐之前封装的两个好用的组件:

参考文章

  1. How to improve quality and syntax of your Android code
  2. Improve Your Code with Lint
  3. Android 进阶之工具的使用 Findbugs
  4. Android静态代码检测
  5. 使用 CheckStyle 检查代码
  6. 详解CheckStyle的检查规则(共138条规则)
  7. 用 PMD 铲除 bug
上一篇下一篇

猜你喜欢

热点阅读