Android 检测代码规范和检测bug的工具汇总整理

前言

 

在日常团队Android项目开发过程中,难免会疏忽出现一些bug,而且这里bug对用户体验是不好的,要几时铲除。而且每个coder编码习惯不用和编出来的代也是会有差异的。了保证团队中代范以及尽量避免低bug,我往往需要一些工具来格的检查,从而提高代码质量。下面介一下四种插件 lintfindBugsPMD CheckStyles 的功能和使用方式。参照总结一下

 

Lint

 

Lint是Androidstudio带检测的工具,不用运行程序它也是会提示一些警告,就可以正和化代,随着目新版本的迭代,致有很多无效的的APK得更,就可以使用Lint审查工具瘦身,用Android Studio的GenerateSigned APK打包,可以不把一些无用的资源都打包进apk,减轻apk

 

使用范围

 

1)潜在的bug

2)可优化的代码

3)安全性

4)性能

5)可用性

6)可访问性

7)国际化

 

使用方法

 

1)在AS的工程下选择module、目录或者文件

2)右键选择Analyze > Inspect Code.

3)弹出一个可以检测范围的框,例如project,current file and module等

 

检测完毕后,左边是检测类型的树形结构,右边则展示详细的信息

 

也可以通过gradle命令来lint

1)windows
gradle lint
2)mac
./gradlewlint


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

 

Lint的详细使用,查看官网

1.Improve Your Code with Lint

2.Androidstudiolint代码检查



FindBugs

 

Findbugs是它是一个静态分析工具,它检查类或者jar文件,将字节码和一组缺陷模式进行对比以发现可能的问题。不是通过分析类文件的形式或结构来确定程序的意图,而是通常使用Visitor模式来鉴别代码是否符合一些固定的规范。静态代码检测即不涉及代码运行的代码检测过程,其目的是为了发现代码潜在的缺陷和优化改进项,以保障代码的规范性,及时发现表面层次上的bug,防止低级错误的出现。

 

使用范围

 

1)常见代码错误,序列化错误

2)可能导致错误的代码,如空指针引用

3)国际化相关问题:如错误的字符串转换

4)可能受到的恶意攻击,如访问权限修饰符的定义等

5)多线程的正确性:如多线程编程时常见的同步,线程调度问题。

6)运行时性能问题:如由变量定义,方法调用导致的代码低效问题

 

使用方法

 

在AndroidStudio中选择Preferences ->Plugins,输入查找FindBugs-IDEA进行插件安装插件,再重启AS就会看到底部有个FindBugs-IDEA的


其中最左边的按钮有三大类,一类是FindBug寻找问题的范围,一类是查找完问题后显示问题的形式,这两个都可以分成文件级,类级别,包级别,模块级别,项目级别。还有一类是常用工具类以及导出结果的工具。

 

然后在build.gradle文件中加入

1.添加plugin

apply plugin:'findbugs'

2. 要用classes指定临时生成的classes目录,source指定源代码所在目录。同时,你可以用xml.enabled或html.enabled指定你希望输出的报告格式。自动运行Findbus静态代码

task findbugs(type: FindBugs, dependsOn: "assembleDebug") {
   ignoreFailures = true
   effort = "max"
    reportLevel= "high"
   excludeFilter = newFile("$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()
}


通过命令gradle findbugs检测完成后,会在制定的目录下生成报告文档。文档支持xml和html两种格式,本文设置的是html格式,可以直接用浏览器打开。

也可以在工程上,右键FindBugs -> (选择检测的范围)。检测完之后,底部工具栏会跳到FindBugs-IEDA下

  

我们还可以编写过滤条件

如果我们在没有进行任何过滤的情况下找到的结果可能会令人失望,它会把自动生成的代码也考虑在内。因此我们在进行Bug查找的时候首先需要添加过滤。

下面是过滤掉Android自动生成的代码的配置:

<?xml version="1.0"encoding="UTF-8"?>
<FindBugsFilter>
   <Match>
       <!-- ignore all issues in resource generation -->
       <Class name="~.*\.R\$.*"/>
   </Match>
   <Match>
       <Class name="~.*\.Manifest\$.*"/>
   </Match>
</FindBugsFilter>

另一个需要过滤的可能就是你测试用例的警告,可以使用如下方式进行过滤

<!-- ignore all bugs in test classes,except for those bugs specifically relating to JUnit tests -->
<Match>
   <Class name="~.*\.*Test" />
   <!-- test classes are suffixed by 'Test' -->
   <Not>
       <Bug code="IJU" /> <!-- 'IJU' is the code for bugsrelated to JUnit test code -->
   </Not>
</Match>

在编写完这些过滤条件就可以在Android Studio中的(File > Settings->FindBugs-IDEA. -> filter选项卡中添加,下面是对应的页面:

 

详细请看下面链接

1.        Android进阶之工具的使用 Findbugs

2.【Android开发高级实践】轻松帮你发现Bug(FindBugs在AndroidStudio上的应用)



PMD

 

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

 

使用范围

 

1)可能的bug——空的try/catch/finally/switch块。

2)无用代码(Dead code):无用的本地变量,方法参数和私有方法。

空的if/while语句。

3)过度复杂的表达式——不必要的if语句,本来可以用while循环但是却用了for循环。

4)可优化的代码:浪费性能的String/StringBuffer的使用。

 

在AndroidStudio中选择Preferences ->Plugins,输入查找QAPlug-PMD进行插件安装插件,再重启AS

 

使用方法

 

1) 导入Plugin:apply plugin: 'pmd'
2) Task配置
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"
        }
    }
}

 

CheckStyle

 

看了一些大神的项目下都会一个checkstyle.xml的文件,不知道是什么来的,google了一下,是用来检查代码的工具可以用来检查代码是否规范

 

使用范围

 

1)注解

2)javadoc注释

3)命名规范

4)文件头

5)导入包规范

6)尺寸设置

7)空格

8)正则表达式

9)修饰符

10)代码块

11)编码问题

12)类设计问题

13)重复、度量以及一些杂项

 

使用方法

 

在AndroidStudio中选择Preferences ->Plugins,输入查找CheckStyle-IDEA进行插件安装插件,再重启AS

 

打开 AndroidStudio 的设置页面 settings -> OtherSettings 你会发现多了一个 Checkstyle , 点击打开,如下图。


这里的+号可以添加自己的checkstyle文件,这里提供华为的一个checkstyle地址

具体相关的的checkstyle的语法和相关的文档

华为 CheckStyle地址

the checkstyleconfiguration used for Picasso by Square folks

Google’s Java Style Checkstyle Coverage

checkstyle项目地址

CheckStyle API文档

代码规范和Android项目中的一些可用工具

Static code analysis plugin for Android project

 

1)导入Plugin
apply plugin:'checkstyle'
 
2)设置CheckStyle的版本
checkstyle {
toolVersion'6.1.1'
showViolations true
}
 
3)配置任务
 
taskcheckstyle(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()
}


 

相关文章

http://www.jianshu.com/p/2b8d34b2267c

http://blog.csdn.net/yang1982_0907/article/details/18086693

https://gist.github.com/ownwell/c32878440216f1866842

https://github.com/checkstyle/checkstyle

http://tech.glowing.com/cn/dai-ma-gui-fan-he-androidxiang-mu-zhong-de-xie-ke-yong-gong-ju/

http://gudong.name/2016/04/07/checkstyle.html








  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值