android代码比较工具,Android代码优化工具

1.前言:

在我们平时项目开发中,经常会写一些不严谨的代码或者一些比较低级的错误代码,但是这些错误往往很难被发现,这样就导致了我们的项目中会隐藏了很多影响性能甚至是导致闪退的错误代码,于是许多响应的检测工具就出现了.在这里我就介绍一下我比较常用的几个检测工具吧

2.FindBugs

顾名思义,FindBugs是一个寻找bug的工具,更具体的说FindBugs是一个静态检测java代码的工具,可以找到代码中的一些潜在bug,比如说NullPointerException,或者是一些流或者数据库没有关闭的问题.

2.1作用

检测范围 :

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

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

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

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

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

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

2.2使用方法

FindBugs在Android studio里面有个插件 正常安装即可(不会安装插件的自己google)

2cc3b6ed5fa3575f55ed803ed5507051.gif

安装好插件之后重启一下Android studio,在底部会有个红色的图标(不同版本可能位置不同),如果你出现了这个图标,那么恭喜你完成了第一步

2f0070e950912f411d48cdf67a6e6209.bmp

点击左侧第五个按钮可以开始检测

f08301678acc6ad7b41fa37035a22e92.bmp

检测结果显示如下

当创建流的时候发生了异常 那么inputStream就可能为空 接下来直接调用inputStream就可能产生空指针异常

729906d659fbcfaf987c565ceb4ffafb.png

这里使用了io流,但是没有做释放

0f29c4e5603ccf7049cd24658ab4d14e.png

2.3设置

在setting里面还可以对FindBugs做一些设置(这里就不做详细的介绍了)

f6826ba6563a77f3ea150337d02fc201.png

2.4自定义规则

FindBugs可以在gradle里面做自定义任务

(注意需要在gradle里面添加 apply plugin:’findbugs’)

fe5829140f87d14b0f114d66295d382f.png

f4b213641838fba1745e4c191fcc82c1.png

在这里配置了规则findbugs-filter.xml 以及报告生成的路径findbugs.xml

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

ignoreFailures = false

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

}

运行自定义任务(找到任务,双击即可)

63ba68f02ff4080f9f68bc003376f1cd.gif

3.PMD

PMD和FindBugs的作用差不多,但是他们俩的检测方法不同,所以同时使用能达到互补.

3.1作用

检测范围 :

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

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

空的if/while语句。

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

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

3.2使用方法

PMD在Android studio也有个插件,直接安装即可(注意搜索的关键字用QAPlug - PMD)

31f8725effe75cc40c9b3cba633bbfb2.png

3.3自定义规则

(注意需要在gradle里面添加 apply plugin: ‘pmd’)

fe5829140f87d14b0f114d66295d382f.png

task pmd(type: Pmd) {

ignoreFailures = false

ruleSetFiles = files("$configDir/pmd/pmd-ruleset.xml") //这里是自定义的规则

ruleSets = []

source 'src'

include '**/*.java'

exclude '**/gen/**'

reports {

xml.enabled = false

html.enabled = true

xml {

destination "$reportsDir/pmd/pmd.xml" //这里是报告产生的路径

}

html {

destination "$reportsDir/pmd/pmd.html" //这里是报告产生的路径

}

}

}

在这里配置了规则pmd-ruleset.xml 以及报告生成的路径 pmd.html

392c993d1b626cac5c232158cd771453.png

运行自定义任务(跟FindBugs一样,找到任务,双击即可)

226bd98e00c79c0d5242351c20f05021.gif

4.CheckStyles

CheckStyles是用来检测java代码规范性的

4.1作用

检测范围 :

注解

javadoc注释

命名规范

文件头

导入包规范

尺寸设置

空格

正则表达式

修饰符

代码块

编码问题

类设计问题

重复、度量以及一些杂项

4.2使用方法

安装插件 CheckStyles

b074d7797e3e09ce990e500fc5f2dd03.png

4.3设置

2ceb5276a072b82e677bd27df7e56620.png

TreatCheckstyle errors as warnings 如果勾上的话,检测到错误时只是会以警告的形式提示

下面是勾上时的提示方式(以警告的形式)

21936a83dd15f1478c37b6629d3c3ffd.png

下面是不勾时的提示方式(以报错的形式)

5ff931b7bda090820169702f36942999.png

下面是选择官方默认的检测规则(也可以自己定义,具体这里就不做详解了)

539597981ba2f61d1e7b73fc79320e91.png

4.4通过gradle运行

(注意需要在gradle里面添加 apply plugin: ‘checkstyle’)

fe5829140f87d14b0f114d66295d382f.png

task checkstyle(type: Checkstyle) {

configFile file("$configDir/checkstyle/checkstyle.xml") //这里是自定义的规则

configProperties.checkstyleSuppressionsPath = file("$configDir/checkstyle/suppressions.xml").absolutePath //这里是自定义的规则

source 'src'

include '**/*.java'

exclude '**/gen/**'

classpath = files()

}

a215e3fee4acbbe7ee45a9c38bc2b584.gif

5.Demo源码

注意Demo里面的task都抽取到了config目录下的quality.gradle中,所以需要在项目的build.gradle添加

apply from: ‘../config/quality.gradle’

Demo是在他人的基础上修改的,由于已经无法找到源头,所以在这里声明一下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值