在开发Android的过程中,会出现一些比较不容易发现的Bug,比如没有对null做判断,会出现'NullPointException'的崩溃,下面的代码就会出现崩溃:

if (ta != null) {

mPanelHeight = ta.getDimensionPixelSize(R.styleable.SlidingUpPanelLayout_umanoPanelHeight, -1);

mShadowHeight = ta.getDimensionPixelSize(R.styleable.SlidingUpPanelLayout_umanoShadowHeight, -1);

mParallaxOffset = ta.getDimensionPixelSize(R.styleable.SlidingUpPanelLayout_umanoParalaxOffset, -1);

.......

}

ta.recycle();

开头的时候判断ta不为null,但是在调用ta.recycle()的时候是在if之后,在使用的时候,如果传入的参数ta为null的话就会出现NullPointException的Bug,当然好的代码编写习惯,以及进行code review,还有充分的测试都可以避免这种Bug的出现。如果换一种思路能够通过工具检查出这种潜在的Bug就最好不过的。还好有一种工具可以解决这个问题:FindBugs。

FindBugs

FindBugs是一个Java静态分析工具,用来检查类或者jar文件,查找代码可能存在的问题。FindBugs官网地址:http://findbugs.sourceforge.net/。

检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的Bug,比如前面说到的NullPointException,还可以检查特定的资源没有关闭,例如:查询数据库没有调用Cursor.close()等。

如果采用人工的方式很难发现类似的bug,或者有一些Bug不会发现,直到运行时才出现,还有可能是一直没有出现,别人调用的时候没有做检查就直接使用了.....

FindBugs可以自动化化的分析代码,帮助开发者提高代码质量,当然它可以无难度的在Android上面运行,通过FindBugs的检查可以让App的运行更加的稳定。

Gradle插件

FindBugs在Gradle中做一个插件存在的,可以在Android Studio中直接使用:

apply plugin: "findbugs"

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

ignoreFailures= true

effort= "default"

reportLevel= "high"

println( "$project.buildDir")

classes = files("$project.buildDir/intermediates/classes")

source= fileTree("src/main/java/")

classpath= files()

reports{

xml.enabled=false

html.enabled=true

xml {

destination "$project.buildDir/findbugs.xml"

}

html{

destination "$project.buildDir/findbugs.html"

}

}

}

代码解释:

引入FindBugs的插件:`apply plugin: "findbugs"

`。

定义一个task任务,这个任务的类型是FindBugs,指定依赖assembleDebug是为了先生成.classe文件,才能对代码进行静态分析。

ignoreFailures:有警告错误的时候也是允许构建。

reportLevel:报告的级别,Low,Medium,High一般来说我们首先关注的是高级别的报告,再关注低一级别的报告。

classes和source分别是对应的.classe文件夹地址,和源代码文件地址。

repoets指定报告类型,有两种方式xml和html,只允许一种输出格式。

定义完成之后,同步下Gradle,之后在右侧的Gradle的菜单中找到对于的Module,就可以在Tasks中找到对应的findBugs任务,点击即可运行。

FindBugs报告

运行完成之后,会得到对应的一个类似下图的报告:

更多的内容解读可以点击详情,看到错误对应的代码行号,和错误详情,以及相关检测错误的解释。

常见的FindBugs的警告:

NP:Possible null pointer dereference,可能出现null的代码。

HE:重写对戏那个的equals()方法,但是没有重写它的hashCode方法,或者相反的情况。

SE:serializable错误

...其他常见错误可以参考文档

什么时候运行?

什么时候运行是一个问题,一般情况下在原有的项目中加入FindBugs之后,可以检测出一些以前的代码存在的问题,所以在刚刚使用FindBugs的时候应该做一次全面的检查,解决掉对应的问题。

之后的运行,一般可以在完成一个版本对应功能开发完成之后可以检查一次,防止新修改的代码有潜在的bug,另一个时间点就是在每次修复完Bug之后,再运行一次,防止修复Bug的时候,造成了新的Bug。

php findbugs,Android-使用FindBugs相关推荐

  1. android studio findbugs 过滤,Android Studio中使用FindBugs

    1.什么是FindBugs 一句话简单理解就是:是一个工具,可以用它自动帮你找出代码中潜在的BUG.当然事实并不一定总是如此,也有很多它找不出来的地方.下面将直接介绍如何在Android Studio ...

  2. 配置FindBugs和常见FindBugs错误

    配置FindBugs: 在这里可以对FindBugs规则等进行详细设置. 选择你的项目,右键 => Properties => FindBugs => 1 Run Automatic ...

  3. java自定义findbugs规则,定制 findbugs规则 - 阿里巴巴一个测试架构师 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...

    这类文章极少,字节码操作需要对becl库及jvm字节码操作有一定常识.参考: http://blog.csdn.net/lywybo/archive/2010/03/01/5335748.aspx i ...

  4. Android 代码优化工具FindBugs

    1.前言: 在我们平时项目开发中,经常会写一些不严谨的代码或者一些比较低级的错误代码,但是这些错误往往很难被发现,这样就导致了我们的项目中会隐藏了很多影响性能甚至是导致闪退的错误代码,于是许多响应的检 ...

  5. findbugs使用总结

    findbugs工具是通过静态分析class文件来查找代码不合理项的工具,本文从通过Main方法调用和与maven集成两个方面来介绍findbugs的使用. 一.main方法集成 所有的java应用的 ...

  6. idea findbugs使用_「测试」 - 静态测试 amp; FindBugs

    在阅读Kafka和RocketMQ对比的文章中,看到一些有关质量的话题,通过IntelliJ的FindBugs插件进行静态代码扫描,相较于sonar更加轻巧,更适合「单元测试」阶段进行. <Ap ...

  7. findbugs插件_提升编码效率的IntelliJ IDEA必备插件

    点击蓝色"程序职场"关注我哟 加个"星标",天天和你一起进步 作者 | 房上的猫 来源 | cnblogs.com/lsy131479/p/9646444.ht ...

  8. Eclipse-Java代码规范和质量检查插件-FindBugs

    FindBugs 是由马里兰大学提供的一款开源 Java静态代码分析工具.FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析.FindBug ...

  9. 【Findbugs】Findbugs使用指南

    一.简介 Findbugs是一个静态分析工具,它检查类或者jar文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具可以在不实际运行程序的情况下对软件进行分析.可以帮助改进代码质量.Fi ...

最新文章

  1. 市值破万亿美金的苹果 近年在AI上搞了些新动作
  2. Failed to install*.apk on device '': timeout
  3. python使用函数的优点-Python用了这么多年,总结出超实用的功能和特点
  4. 几张表格怎么联动_猛男必备具皮肤:和平精英火箭少女联动火爆来袭,这摩托皮不香?...
  5. RHEL6.5/Centos6.5 搭建bugzilla
  6. BugkuCTF-MISC题虎符
  7. Android 源代码中的res
  8. typecho运行html插件,typecho主题集成HTML压缩功能
  9. 深度学习中收敛是什么意思?
  10. php输出excel乱码,如何解决php导出excel乱码的问题
  11. 如何更改计算机时间和日期,如何更改电脑日期?电脑教程:然后修改
  12. 完全理解android事件分发机制
  13. 用计算机计算根号2^2-1÷,2根号2(万能计算器在线使用)
  14. 分糖果(candy)
  15. sklearn代码11 1-熵
  16. C实现多项式F_2上的阶(线性反馈移位寄存器)
  17. 海南行,阳光,沙滩,椰树[2007.2.1~2007.2.5]
  18. 阿里研究院第三届学术委员会成立,主席曾鸣畅谈未来学术生态构建
  19. 桌面上IE图标不见了怎么办?
  20. noj 2112 拯救活动室的男女比例(最大费用最大流)

热门文章

  1. Linux 探索之旅 | 第三部分第四课:后台运行及合并多个终端
  2. uniapp开发微信小程序 如何在小程序中跳转别的小程序
  3. 用DOS批处理来进行自动刷票
  4. 后台返回视频流,前台播放和下载
  5. 助力中小商家快速成长,财报显示京东为实体经济注入强劲动能
  6. VS对战平台发布1.1.7内部测试版
  7. JS中鼠标拖拽div(2)(setCapture()方法和releaseCapture()方法)
  8. 什么是scale up和scale out
  9. NTFS文件系统的属性分析
  10. 详解NTFS文件系统