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

前言

在日常团队Android项目开发过程中,难免会疏忽出现一些bug,而且这里bug对用户体验是不好的,要几时铲除。而且每个coder的编码习惯不用和编出来的代码也是会有差异的。为了保证团队开发中代码的规范以及尽量避免低级bug,我们往往需要一些工具来进行严格的检查,从而提高代码质量。下面介绍一下四种插件lint、findBugs、PMD、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等

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

也可以通过gradle命令来lint

1)windows

gradle lint

2)mac

./gradlewlint

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

Lint的详细使用,查看官网

FindBugs

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

使用范围

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

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

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

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

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

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

使用方法

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

0818b9ca8b590ca3270a3433284dd417.png

其中最左边的按钮有三大类,一类是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下

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

我们还可以编写过滤条件

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

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

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

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

0818b9ca8b590ca3270a3433284dd417.png

详细请看下面链接

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

0818b9ca8b590ca3270a3433284dd417.png

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

0818b9ca8b590ca3270a3433284dd417.png

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

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

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()

}

相关文章

你可能感兴趣的:(线上bug检测工具,android)