安卓 常用静态代码分析工具(CheckStyle,findbugs,pmd,lint)

静态代码分析工具介绍:

1.CheckStyle

CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来.

CheckStyle检验的主要内容

·Javadoc注释

·命名约定

·标题

·Import语句

·体积大小

·空白

·修饰符

·块

·代码问题

·类设计

·混合检查(包括一些有用的比如非必须的System.out和printstackTrace)

从上面可以看出,CheckStyle提供了大部分功能都是对于代码规范的检查

使用配置:

1.写规则文件

1.1.规则文件demo/config/quality/checkstyle/square-picasso-checkstyle.xml(demo/config/quality/checkstyle是我自定义的文件夹路径)

点击下载:https://pan.baidu.com/s/1boXFrxt

了解规则文件配置:http://blog.csdn.net/yang1982_0907/article/details/18086693

1.2.抑制警告规则demo/config/quality/checkstyle/suppressions.xml

点击下载:https://pan.baidu.com/s/1dE7mOYd

2.在工程的检查项目的build.gradle下配置

apply plugin: 'checkstyle'

task checkstyle(type: Checkstyle) {

    configFile file("${project.rootDir}/config/quality/checkstyle/square-picasso-checkstyle.xml")//指定规则     configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath

    source 'src'

    include '**/*.java' //这里选择了所有的文件,你也可以选定单个文件,如果选定多个文件,就用逗号隔开就行,例如'**/MainActivity.java','**/User.java'

    exclude '**/gen/**'

    classpath = files()

}


执行gradle之后,在build目录下生成报告


安卓 常用静态代码分析工具(CheckStyle,findbugs,pmd,lint)_第1张图片
安卓 常用静态代码分析工具(CheckStyle,findbugs,pmd,lint)_第2张图片

2.findbugs

FindBugs 是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。有了静态分析工具,就可以在不实际运行程序的情况对软件进行分析。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用 Visitor 模式(请参阅参考资料)

在FindBugs的GUI中,需要先选择待扫描的.class文件(FindBugs其实就是对编译后的class进行扫描,藉以发现一些隐藏的bug。)。如果你拥有这些.class档对应的源文件,可把这些.java文件再选上,这样便可以从稍后得出的报告中快捷的定位到出问题的代码上面。此外,还可以选上工程所使用的library,这样似乎可以帮助FindBugs做一些高阶的检查,藉以发现一些更深层的bug。

选定了以上各项后,便可以开始检测了。检测的过程可能会花好几分钟,具体视工程的规模而定。检测完毕可生成一份详细的报告,藉由这份报告,可以发现许多代码中间潜在的bug。比较典型的,如引用了空指针(null pointer dereference), 特定的资源(db connection)未关闭,等等。如果用人工检查的方式,这些bug可能很难才会被发现,或许永远也无法发现,直到运行时发作…当除掉了这些典型的(classic) bug后,可以确信的是,我们的系统稳定度将会上一个新的台阶。

使用配置:

2.1.配置过滤文件

点击下载:https://pan.baidu.com/s/1jHHmdBg

2.2.在工程的检查项目的build.gradle下配置

task findbugs(type: FindBugs, dependsOn: assembleDebug) {

    ignoreFailures = false

    effort = "max"

    reportLevel = "high"

    excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")//配置过滤文件

    classes = files("${project.rootDir}/datacollect/build/intermediates/classes")

    //这里选择的是所有的class,你也可以只选单个或者多个文件,例如

    // files("${project.rootDir}/bsgamesdk_library/build/intermediates/classes/debug/com/example/demo/MainActivity .class") +                     //files("${project.rootDir}/bsgamesdk_library/build/intermediates/classes/debug/com /example/demo/User.class") 

    source 'src'

    include '**/*.java' //配置源文件,这里配置的所有文件,你也可以配置单个或者多个

    // '**/ MainActivity .java','**/User.java'

    exclude '**/gen/**'

    //报告导出

    reports {

        xml.enabled = false

        html.enabled = true

        xml {

            destination "$project.buildDir/reports/findbugs/findbugs.xml"//配置report输出路径

        }

        html {

           destination "$project.buildDir/reports/findbugs/findbugs.html"//配置report输出路径

        }

    }

    classpath = files()

}

执行gradle之后,在build目录下生成报告,类似CheckStyle,这里不再放图

3.pmd

PMD是一种开源分析Java代码错误的工具。与其他分析工具不同的是,PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。PMD附带了许多可以直接使用的规则,利用这些规则可以找出Java源程序的许多问题,例如:

® 潜在的bug:空的try/catch/finally/switch语句

® 未使用的代码:未使用的局部变量、参数、私有方法等

® 可选的代码:String/StringBuffer的滥用

® 复杂的表达式:不必须的if语句、可以使用while循环完成的for循环

® 重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugs

® 循环体创建新对象:尽量不要再for或while循环体内实例化一个新对象

@ 资源关闭:Connect,Result,Statement等使用之后确保关闭掉

此外,用户还可以自己定义规则,检查Java代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求PMD找出所有创建Thread和Socket对象的操作

3.1.配置规则文件

点击下载:https://pan.baidu.com/s/1ge7iNPD

3.2.在工程的检查项目的build.gradle下配置

task pmd(type: Pmd) {

    ignoreFailures = false

    ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")

    ruleSets = [] //这里其实没有配置订制的规则

    source 'src'

    include '**/*.java'//指定文件检查,这里是所有文件,可以指定单个或者多个,例如:'**/MainActivity.java','**/User.java'

    exclude '**/gen/**'

    reports {

        xml.enabled = false

        html.enabled = true

        xml {

            destination "$project.buildDir/reports/pmd/pmd.xml"

        }

        html {

            destination "$project.buildDir/reports/pmd/pmd.html"

        }

    }

}

执行gradle之后,在build目录下生成报告,类似CheckStyle,这里不再放图

4.lint

Android Lint是一个静态的代码分析工具,它可以检测Android项目源文件中潜在的bug,也可以在正确性、安全性、性能、可用性、可访问性和国际化等方面进行优化。正如官方网站所说,Android Lint是另一种静态分析工具,专门为Android服务。它是非常强大的,能给你大量的建议以提高你的代码质量。

规则下载:https://pan.baidu.com/s/1dFxZAEH

android {

    lintOptions {

        abortOnError true

        xmlReport false

        htmlReport true

        lintConfig file("${project.rootDir}/config/quality/lint/lint.xml") //配置lint检查项

        htmlOutput file("$project.buildDir/reports/lint/lint-result.html")

        xmlOutput file("$project.buildDir/reports/lint/lint-result.xml")

    }

}

执行gradle之后,在build目录下生成报告,类似CheckStyle,这里不再放图

你可能感兴趣的:(安卓 常用静态代码分析工具(CheckStyle,findbugs,pmd,lint))