在这篇文章中,我将通过不同的自动化工具如CheckStyle,FindBugs,PMD以及Android Lint来介绍(如何)提高你的安卓代码质量。通过自动化的方式检查你的代码非常有用,尤其当你在一个团队中工作,为了在你的代码中保持严格的语法格式以及避免很多坏习惯和错误。我将仔细地介绍如何在你空闲的时候直接运用这些工具通过Gradle构建脚本以及如何配置它们。

 Fork该示例

  我强烈建议你拷贝下这个项目工程,尽管我将介绍的案例都是来自它。与此同时,你将能够测试下自己对这些工具的了解情况。

 关于Gradle任务

  Gradle任务的概念(在Gradle中的含义)是理解该篇文章(以及如何以一种通用的方式写Gradle脚本)的基础。我强烈建议你去看下这两篇关于Gradle任务的文档(这篇和这篇)。这个文档包含了大量的例子,因此它非常容易开始学习。现在,我假定你拷贝了我的Repo,你导入这个工程到你的Android Studio,并且你熟悉Gradle任务。如果不是,别担心,我将尽我最大的努力让我的讲解更有意义。

 关于示例项目的层次结构

  你可以将gradle脚本文件分割成很多文件,我现在已经有3个gradle文件:

  • 根文件夹中的文件,这些文件或多或少都是关于这个项目的配置的(用的哪个Maven Repos,用的哪个版本的Gradle)。
  • App子文件夹中的文件,这些文件是典型的用于创建安卓应用的gradle文件。
  • config子文件夹中的文件,这里的文件才是我们关系的重点,因为我用这里的文件保存和配置项目中的所有工具。

 Checkstyle

  简介

  “Checkstyle是一个开发工具用来帮助程序员编写符合代码规范的Java代码。它能自动检查Java代码为空闲的人进行这项无聊(但重要)的任务。”

  正如Checkstyle的开发者所言,这个工具能够帮助你在项目中定义和维持一个非常精确和灵活的代码规范形式。当你启动CheckStyle,它会根据所提供的配置文件分析你的Java代码并告诉你发现的所有错误。

  Gradle的形式

  下面的代码向你展示了在你的项目中使用Checkstyle的最基本的配置(如Gradle任务):

task checkstyle(type: Checkstyle) {
configFile file("${project.rootDir}/config/quality/checkstyle/checkstyle.xml") // Where my checkstyle config is...
configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath // Where is my suppressions file for checkstyle is...
source 'src'
include '**/*.java'
exclude '**/gen/**'
classpath = files()
}

  所以,基本上这个任务会根据checkstyle.xml和suppressions.xml分析你的代码。通过Android Studio执行它仅仅需要从工具面的CheckStyle来启动它。

  启动CheckStyle之后,你讲收到一个报告用于展示在你项目中发现的每个错误。这是非常直接的方式。

  如果你想在checkstyle上做更多的配置,可以参考这篇文档。

  Checkstyle的使用技巧

  Checkstyle会发现大量的问题,特别是在你运用了大量的规则配置,如同你设置了一个非常精确的语法。尽管我通过Gradle使用 checkstyle,例如在我进行推送之前,我仍然推荐你为IntellJ/Android Studio使用checkstyle插件(你可以通过Android Studio的工作面板文件/设置/插件直接安装插件)。这种方式下,你可以根据那些为Gradle配置的相同文件在你的工程中使用 checkstyle,但是远不止这些,你可以直接在Android Studio中获取带有超链接结果,这些结果通过超链接在你的代码中对应,这是非常有用的(Gradle的这种方式仍然很重要的,因为你可以使用它自动构建系统,如Jenkins)。

 Findbugs

  简介

  Findbugs是否需要一个简介呢?我想它的名称已经让人顾名思义了。“FindBugs使用静态分析方法为出现bug模式检查Java字节码”。FindBugs基本上只需要一个程序来做分析的字节码,所以这是非常容易使用。它能检测到常见的错误,如错误的布尔运算符。FindBugs也能够检测到由于误解语言特点的错误,如Java参数调整(这不是真的有可能因为它的参数是传值)。

  Gradle的形式

  下面的代码向你展示了在你的项目中使用Findbugs的最基本的配置(以Gradle任务为例):

task findbugs(type: FindBugs) {
ignoreFailures = false
effort = "max"
reportLevel = "high"
excludeFilter = new File("${project.rootDir}/config/quality/findbugs/findbugs-filter.xml")
classes = files("${project.rootDir}/app/build/classes")source 'src'
include '**/*.java'
exclude '**/gen/**'reports {
xml.enabled = false
html.enabled = true xml { destination "$project.buildDir/reports/findbugs/findbugs.xml" } html { destination "$project.buildDir/reports/findbugs/findbugs.html" } } classpath = files() }

  它是如此的像一个Checkstyle任务。尽管Findbugs支持HTML和XML两种报告形式,我选择HTML形式,因为这种形式更具有可读性。而且,你只需要把报告的位置设置为书签就可以快速访问它的位置。这个任务也会失败如果发现Findbgus错误失败(同样生成报告)。执行 FindBugs任务,就像执行CheckStyle任务(除了任务的名称是“FindBugs”)。

  Findbugs的使用技巧

  由于Android项目是从Java项目略有不同,我强烈推荐使用FindBugs过滤器(规则配置)。你可以在这一个例子(例如项目之一)。它基本上忽略了R文件和你的Manifest文件。顺便说一句,由于(使用)FindBugs分析你的代码,你至少需要编译一次你的代码才能够测试它。

 PMD

  简介

  这个工具有个有趣的事实:PMD不存在一个准确的名称。(所以)在官网上你可以发现很有有趣的名称,例如:

  • Pretty Much Done
  • Project Meets Deadline

  事实上,PMD是一个工作有点类似Findbugs的强大工具,但是(PMD)直接检查源代码而不是检查字节码(顺便说句,PMD适用很多语言)。 (PMD和Findbugs)的核心目标是相同的,通过静态分析方法找出哪些模式引起的bug。因此为什么同时使用Findbugs和PMD呢?好吧!尽管Findbugs和PMD拥有相同的目标,(但是)他们的检查方法是不同的。所以PMD有时检查出的bug但是Findbugs却检查不出来,反之亦然。

  Gradle的形式

  下面的代码向你展示了在你的项目中使用PMD的最基本的配置(以Gradle任务为例):

task pmd(type: Pmd) {
ruleSetFiles = files("${project.rootDir}/config/quality/pmd/pmd-ruleset.xml")
ignoreFailures = false
ruleSets = []source 'src'
include '**/*.java'
exclude '**/gen/**'reports {
xml.enabled = false
html.enabled = true
xml {
destination "$project.buildDir/reports/pmd/pmd.xml"
}
html {
destination "$project.buildDir/reports/pmd/pmd.html"
}
}
}

  就PMD来说,它几乎与Findbugs相同。PMD支持HTML和XML两种报告形式,所以我再次选择HTML形式。我强烈建议你使用自己的通用配置集文件,正如同我在这个例子(check this file)中一样。所以,你当然应该去看下这些通用配置集文件。我建议你,因为PMD可比FindBugs更有争议的很多,例如:如果你不声明”if statement”或”if statement”为空,它基本上会给你警告信息。如果这些规则是正确的,或这对于您的项目(来说是正确的),我真的认可你和你队友的工作。我不希望程序因为”if statement”崩溃,我认为这样程序的可读性很差。执行PMD任务,就像是(执行)CheckStyle任务(除了任务的名称是“PMD”)。

  PMD的使用技巧

  我建议你不要使用默认的规则配置集,你需要添加这行代码(已经加上):

ruleSets = []

  否则,因为默认值是这些基本的规则配置集,基本的规则配置集会和你定义的规则集一起执行。所以,如果你的自定义规则集不在那些基本配置集中,他们仍然会执行。

 Android Lint

  简介

  “Android lint工具是一个静态代码分析工具,它能检查安卓项目源文件的潜在缺陷和优化改进的正确性,安全性,性能,可用性,可访问性和国际化。”

 正如官方网站所说,Android Lint是另一种静态分析工具,专门为Android服务。它是非常强大的,能给你大量的建议以提高你的代码质量。

  Gradle的形式

android {
lintOptions {
abortOnError truelintConfig file("${project.rootDir}/config/quality/lint/lint.xml")// if true, generate an HTML report (with issue explanations, sourcecode, etc)
htmlReport true
// optional path to report (default will be lint-results.html in the builddir)
htmlOutput file("$project.buildDir/reports/lint/lint.html")
}

  我建议你使用一个单独的文件来定义哪些配置需要使用和不使用。这个网站根据最新的ADT版本定义了全部的配置。我的演示项目中的lint文件包含所有这些规则(ADT 21),包含等级为”ignore”的”severity”:

  • IconDensities:这个规则配置确保你定义每个图像资源中的(分辨率)密度(除了ldpi)。
  • IconDipSize:这个规则配置确保你为每个dip定义合适的资源(换句话来说,如果你没有为每个density设置相同的图片资源,则不需要重新设置图片大小)。

  所以你可以重用这个lint文件并激活你想要的所有规则。执行Android Lint任务,就像执行CheckStyle任务(除了任务的名称是”lint”)。

  Android Lint的使用技巧

  对于Android Lint没有什么特别的技巧,只需要牢记Android Lint会测试所有配置规则,除了那些等级为“ignore”的“severity”的配置。因此如果发布了新版本ADT下的新配置规则,他们将被检查,而不是忽视。

 实例演示

  现在,你有所有的方法为您的项目使用这四个工具。显然,如果我们能同时使用这四个工具会更好。你可以添加你的gradle任务之间的依赖,比如当你执行一个任务,其他任务则是第一个完成后执行。通常在Gradle中,通过让工具具有“check”任务来达到工具之间的相互关系:

  check.dependsOn ‘checkstyle’, ‘findbugs’, ‘pmd’, ‘lint’现在,当执行“check” 任务的时候,Checkstyle, Findbugs, PMD, and Android Lint将会同时执行。在你执行/ commiting / pushing / ask merge request 之前进行质量检查是一个很棒的方式。

  你可以在这个Gradle文件中找到所有任务的一个完整例子。你可以把所有的质量配置文件和Gradle文件从你看到的演示实例中分开,这些演示的实例把一起都放在“config/quality” 文件夹下。

 总结

  在这篇文章中,利用Gradle对Android使用代码质量检查工具是非常容易。比使用质量工具局部检查您的项目在您自己的计算机上,这些工具可以用于自动构建如Jenkins/Hudson这样的平台,让你自动进行质量检查,同时自动建立过程。执行所有我从CLI展现的测试,如同在 Jenkins/Hudson上执行,简单地执行:

  gradle check请随时对这篇文章发表评论,或者问任何有关Android的问题。

  原文链接 : How to improve quality and syntax of your Android code 译文:http://www.devtf.cn/

转载于:https://www.cnblogs.com/xiaochao1234/p/4667374.html

提高 Android 代码质量的4个工具相关推荐

  1. 提高 Java 代码质量

    高质量代码中往往缺陷更少!确保高的 Java 代码质量有两个步骤:尽早并经常地编写各个层次的测试用例,以及持续的监测质量状况.那么我们又该如何实践呢?本专题汇集了大量来自代码质量专家们的专业经验.最佳 ...

  2. 代码合并工具_11个代码质量审核和管理工具,程序员必备!

    「 读者福利!2 TB 各类技术资源免费赠送 」 如今,代码质量分析和审核已成为每个企业的基本流程.随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要.不良的代码不仅会影响代码的可维 ...

  3. 代码整理工具_整理了 11 个好用的代码质量审核和管理工具

    点击上方"Python编程时光",选择"加为星标" 第一时间关注Python技术干货! 来源:云智时代 https://www.toutiao.com/i677 ...

  4. 提高Objective-C代码质量心机一:简化写法

    提高OC代码质量的小心机 一.OC特性 OC 为 C 语言添加了面向对象特性,是其超集; OC 使用动态绑定的消息结构,也就是,在运行时才会检查对象类型; 接收一条消息后,究竟应执行何种代码,由运行期 ...

  5. 提高面试代码质量的三要素

    作者总结自己多年面试他人以及被他人面试的经验,发现应聘者可以从代码的规范性.完整性和鲁棒性三个方面提高代码的质量. 程序员在职业生涯中难免要接受编程面试.有些程序员由于平时没有养成良好的编程习惯,在面 ...

  6. 使用JSLint提高JS代码质量

    随着富 Web 前端应用的出现,开发人员不得不重新审视并重视 JavaScript 语言的能力和使用,抛弃过去那种只靠"复制 / 粘贴"常用脚本完成简单前端任务的模式.JavaSc ...

  7. SpringCloud工作笔记076--- CheckStyle插件提高java代码质量

    技术交流QQ群[JAVA,.NET,BigData,AI]:170933152 这个是eclipse中的,在idea中也有这个插件,需要的时候去看看装上吧. 国外的客户一般比较严谨,这些工作,甚至自己 ...

  8. 如何高效提高前端代码质量

    原则 首先说一个最重要的优化原则:代码优化是每天都要进行的,而不是一两个月做一次大优化, 那个时候就太晚了.另外由于优化是每天做的,所以你不需要一次的就过度优化,保持小步快跑即可. 这个原则为什么重要 ...

  9. 如何提高JavaScript代码质量(一)

    代码质量与其整洁度成正比.干净的代码,既在质量上较为可靠,也为后期维护.升级奠定了良好基础. 本文并不是代码风格指南,而是关于代码的可读性.复用性.扩展性探讨. 我们将从几个方面展开讨论: 1.    ...

最新文章

  1. error RC1015: cannot open include file 'afxres.h'. 的解决办法
  2. docx文件上传java_java上传文件通过mybatis存储到数据库的blob格式中.docx
  3. Ubuntu 搭建ndk环境
  4. [ Luogu 4626 ] 一道水题 II
  5. 一发工资就全部取出,会对银行流水有影响吗?
  6. 淘宝网的技术发展史(二) ——Oracle替换MySQL
  7. Spring Security第1部分–具有数据库的简单登录应用程序
  8. amd 安装 linux驱动怎么安装教程,请教,怎么在ubuntu里安装amd显卡驱动
  9. 用户态和核心态的转换
  10. ESP8266使用历程
  11. 升级php7_PHP 5.6 已结束安全支持,你升级到 PHP 7 系列了吗?
  12. java的remove iterator_Java集合 iterator.remove()方法详解
  13. 解决vue addRoutes多次添加路由重复问题。
  14. Ubuntu18.04安装Gstreamer1.0(六)
  15. 变砖的平板怎样重装android,台电平板电脑刷机教程,小编教你台电平板电脑怎么刷机...
  16. c语言 char作用,c语言中char型数据能直接运算吗?
  17. 前端CSS核心内容定位
  18. 【深度学习】基于MindSpore和pytorch的Softmax回归及前馈神经网络
  19. 主题:windows xp 系统CMD命令大全(一)
  20. mysql中IFNULL,NULLIF,ISNULL函数的对比

热门文章

  1. SAP MM盘点流程里如何处理事务代码MI11 Recount过的盘点凭证?
  2. 《Nature》挑战进化DNA突变理论!
  3. ​2022年应用人工智能会是什么样子?
  4. 神经网络支持大脑是「预测机器」,预测是节能的
  5. NLP≠NLU,机器学习无法理解人类语言
  6. Gartner公布五大新兴技术趋势 AI成主角
  7. 首张人类黑洞照片的背后
  8. 自动驾驶技术如何升级?这份技能图谱为你指路
  9. AI手机报告 | 揭秘手机行业未来AI之路
  10. 中国电子学会发布《新一代人工智能领域十大最具成长性技术展望(2018-2019年)》...