关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »提高 Android 代码质量的4个工具

    提高 Android 代码质量的4个工具

    2015-07-14 00:00:00 出处:技术小黑屋
    分享

    在该文中,我将通过不同的自动化工具如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 true
    
    lintConfig 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的问题。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    严重缩水!NVIDIA将推中国特供RTX 5090 DD:只剩24GB显存

    00:17

    技术热点

    在windows 7桌面右键菜单上添加直接卸载USB设备的快捷菜单选项

    12个Java长久占居主要地位的原因

    SQL Server创建数据库的命令

    SQL Server 带列名导出到excel的实际操作

    MySQL字符串连接函数repeat()

    使用SQL Server日志转移实现高可用性

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。