close
当前位置: 物联网在线 > 技术文库 > android >

提供代码质量之静态代码检查

在团队Android项目开发过程中,难免会出现一些比较不容易发现,但是又比较低级的bug。而且因为每个开发人员的编码习惯不同,写出的代码也会有差异。为了保证团队开发中代码的规范以及尽量避免低级bug,我们往往需要一些工具来进行严格的检查。下面将介绍在项目中用到的四种插件 lintfindBugsPMDCheckStyles 的功能和使用方式,以及如何将多个插件整合在一起,在方便使用的同时尽量做到与项目工程解耦。

一、lint

Lint是Android Studio提供的一个代码检测工具,通过它开发者不用运行或者写测试代码,就可以发现和纠正问题,优化代码结构。每个被检测到的问题,都会生成一条描述信息并指明相应的严重性级别,当然这个严重性级别我们也可以自己设置的。

检测范围

潜在的bug

可优化的代码

安全性

性能

可用性

可访问性

国际化

提供代码质量之静态代码检查

插件安装

Android Studio自带,无需安装。

插件使用

通过Gradle运行lint

在工程的根目录下运行相应的gradle task。

Windows

gradle lint

Linux 或者 MAC

./gradlew lint

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

手动运行lint

有时我们可能只针对某个文件或者某个目录进行检测,这时使用gradle的方式就比较麻烦了,所以Android Studio提供给我们手动运行lint的方式。

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

右键选择 Analyze > Inspect Code.

此时会出现一个选择“指定检测范围”的dialog

提供代码质量之静态代码检查

配置完成后,点击 OK 按钮,进行检测。检测结果如下图所示,左边是检测类型的树形结构,右边则展示详细的信息。

提供代码质量之静态代码检查

注:详细的使用,请看官网文档

二、findBugs

FindBugs是一个Java静态分析工具,用来检查类或者jar文件,用来发现可能的问题。检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的bug,比如NullPointException,特定的资源没有关闭,查询数据库没有调用Cursor.close()等

检测范围

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

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

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

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

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

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

插件安装

在Android Studio中选择 Preferences -> Plugins ,输入查找findBugs进行插件安装。

提供代码质量之静态代码检查

插件使用

在build.gradle文件中,按照下面步骤进行设置:

添加plugin apply plugin:'findbugs'

定义任务,指定输出格式

task findbugs(type: FindBugs, dependsOn: "assembleDebug") { ignoreFailures = true 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() }

这里要注意因为findBugs是检查class文件,所以在定义task的时候,我们是 dependsOn: "assembleDebug" ,确保运行findbugs的task能够成功检测。

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

当然,和lint一样,findBugs也支持手动检测的方式。在工程里,右键 FindBugs -> (选择检测的范围) 。检测完之后,底部工具栏会跳到 FindBugs-IEDA 下,如图所示。

提供代码质量之静态代码检查

三、PMD

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

检测范围

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

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

空的if/while语句。

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

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

插件安装

同样可以通过AS的plugin进行安装,推荐安装QAPlug-PMD。

提供代码质量之静态代码检查

插件使用

在build.gradle文件中进行如下配置

导入Plugin: apply plugin: 'pmd'


(责任编辑:ioter)

用户喜欢...

详解如何使用代码进行音频合成,以Java为示例语言,以Android为示例平台

音频合成在现实生活中应用广泛,在网上可以搜索到不少相关的讲解和代码实现,但个人感觉在网上搜索到的音频合成相关文章的讲解都并非十分透彻,故而写下本篇博文,计划通过讲解如何...


深入理解 ButterKnife,让你的程序学会写代码

话说我们做程序员的,都应该多少是个懒人,我们总是想办法驱使我们的电脑帮我们干活,所以我们学会了各式各样的语言来告诉电脑该做什么——尽管,他们有时候也会误会我们的意思。...


如何提高 Android 代码质量 -工具篇

这是一篇翻译文章,原文: How to improve quality and syntax of your Android code ,为了理解连贯,翻译过程中我修改了一些陈述逻辑和顺序,同时也加了一些自己的补充。 在这片文章中,我将从工具使...


用 Lint 优化您的代码

除了测试 Android 的应用程序是否满足功能要求外,确定你的代码没有结构问题也相当重要。代码架构不完善会影响 Android 应用程序的可靠性和运行效率,同时也会使代码更难维护。比如, 如...