资讯专栏INFORMATION COLUMN

Android-使用FindBugs

darkbug / 1130人阅读

摘要:是一个静态分析工具,用来检查类或者文件,查找代码可能存在的问题。插件在中做一个插件存在的,可以在中直接使用代码解释引入的插件。有警告错误的时候也是允许构建。指定报告类型,有两种方式和,只允许一种输出格式。常见的的警告可能出现的代码。

在开发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插件

FindBugsGradle中做一个插件存在的,可以在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一般来说我们首先关注的是高级别的报告,再关注低一级别的报告。

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

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

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

FindBugs报告

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


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

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

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

SE:serializable错误

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

什么时候运行?

什么时候运行是一个问题,一般情况下在原有的项目中加入FindBugs之后,可以检测出一些以前的代码存在的问题,所以在刚刚使用FindBugs的时候应该做一次全面的检查,解决掉对应的问题。
之后的运行,一般可以在完成一个版本对应功能开发完成之后可以检查一次,防止新修改的代码有潜在的bug,另一个时间点就是在每次修复完Bug之后,再运行一次,防止修复Bug的时候,造成了新的Bug

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12697.html

相关文章

  • Android 静态代码分析工具

    摘要:简评作者在文中提到的三个静态代码分析工具不是互相替代的关系,各有各的侧重点,如果有需要完全可以同时使用。对于来说用得最多的三个静态代码分析工具当属是提供给开发者的静态代码分析工具,能帮助开发者优化代码和找到潜在的。 简评: 作者在文中提到的三个静态代码分析工具不是互相替代的关系,各有各的侧重点,如果有需要完全可以同时使用。 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语...

    wenshi11019 评论0 收藏0
  • 坑中速记整理! 使用 kotlin 写第一个 ReactNative Android 模块

    摘要:和两大新宠借熟悉下的用法不料掉坑里面了昨晚花了大半夜趁这会儿思路清晰把涉及到的一些关键信息迅速整理下最佳的使用快速开始写模块的方式生成的目录是一个标准的工程详见直接在中打开目录参考文章先用实现顶部菜单自动转换为一些坑中的 showImg(https://segmentfault.com/img/bVWypV?w=1080&h=1920); Kotlin 和 Swift, 两大新宠! 借...

    Bmob 评论0 收藏0
  • 推荐一些好用的Android开发小插件

    摘要:是一个实现的插件。主要是推荐上一些流行的开源项目,基本上最近热门的开源项目都会出现在这里,它还对不同类库进行了分类。 平常大家在做 Android 开发的时候,总会遇到各种小的问题,虽然自己动手也可以解决,但是有了一些小工具,解决这些问题就让我们更省事实力。这里就为大家推荐一些 Android 开发遇到的小工具,来让你的开发更高效。showImg(http://img.blog.csd...

    gyl_coder 评论0 收藏0
  • gradle2.x升级到3.3 编译不过问题

    摘要:升级到编译不过问题描述在从版本升级至时,发现有编译不过的问题问题找不到。原获取里面的升级后 gradle升级到3.3 DefaultManifestParser 编译不过 问题描述 在从gralde 2.x版本升级至3.3时,发现有编译不过的问题 问题1 assembleRelease.doFirst找不到。相应的doLast和assembleDebug同理 // 原gradle2.x...

    luck 评论0 收藏0
  • Eclipse中Java程序打包成jar包

    摘要:导入项目右击项目选择打包的项目选择文件在中指定启动函数函数所在的主类,导入需要的包。将需要的包和打包的项目放在同一个目录下。 导入项目 File->Import->General->Existing Projects into Workspace->Select root directory 右击项目 Export->Java->JAR file->选择打包的项目->next->选择...

    FingerLiu 评论0 收藏0

发表评论

0条评论

darkbug

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<