Android 静态代码分析工具

集成静态代码分析器到Android项目中:FindBugs、PMD与Checkstyle实践指南 本文还有配套的精品资源,点击获取 简介:Android开发中维护代码质量至关重要,不仅能增强软件稳定性还能提升开发效率。本文将深入讨论如何通过Gradle自动化集成三个流行静态代码分析工具:FindBugs、PMD和Checkstyle,来优化代码质量管理。文章提供了具体的配置示例和自动化脚本,帮助开发者及时发现和修复代码问题。 1. Android项目中静态代码... 阅读详情

简评: 作者在文中提到的三个静态代码分析工具不是互相替代的关系,各有各的侧重点,如果有需要完全可以同时使用。

静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。

对于 Android 来说用得最多的三个静态代码分析工具当属:

  • Lint
  • PMD
  • Findbugs

Lint

Lint 是 Google 提供给 Android 开发者的静态代码分析工具,能帮助开发者优化代码和找到潜在的 bug。

配置:

在项目中创建 script-lint.gradle 文件:

android {
    lintOptions {
        lintConfig file("$project.rootDir/tools/rules-lint.xml")
        htmlOutput file("$project.buildDir/outputs/lint/lint.html")
        warningsAsErrors true
        xmlReport false
    }
}

其中两个重要的属性:

  • lintConfig : lint 规则文件的路径。
  • htmlOutput : html 报告生成的路径。

之后在 build.gradle 文件中引用:

apply plugin: 'com.android.application'
apply from: "$project.rootDir/tools/script-lint.gradle"

...

测试:

运行 ./gradlew lint 命令,就可以在上面设置的 htmlOutput 路径下找到 lint.html 文件,打开后就会看到类似下面的提示:
提示

Findbugs

Findbugs 分析的是 Java 字节码,能识别出上百种的潜在错误。

配置:

创建 script-findbugs.gradle文件:

apply plugin: 'findbugs'

task findbugs(type: FindBugs) {
    excludeFilter = file("$project.rootDir/tools/rules-findbugs.xml")
    classes = fileTree("$project.buildDir/intermediates/classes/dev/debug/com/dd")
    source = fileTree("$project.rootDir/src/main/java/com/dd/")
    classpath = files()

    reports {
        xml.enabled = false
        html.enabled = true
        html.destination = "$project.buildDir/outputs/findbugs/findbugs.html"
    }
}

属性:

  • excludeFilter:Findbugs 规则文件的路径。
  • classes:classes 文件的路径。
  • source:源码的路径。
  • html.destination:html 报告的生成地址。

同样需要在 build.gradle 中进行引用:

apply plugin: 'com.android.application'
apply from: "$project.rootDir/tools/script-findbugs.gradle"

...

测试:

下面的这段代码:

// MainActivity.java

...

private void someMethod(int variable) {
   switch (variable) {
       case 1:
           System.out.println("1");
       case 2:
           System.out.println("2");
   }
}

...

运行./gradlew findbugs命令,findbugs.html 中就会生成检测结果,类似于下面这样:
检测结果

##PMD

PMD 能发现常见的编程缺陷,比如未使用的变量、空的 catch 块、不必要的对象等等。

配置:

创建 script-pmd.gradle文件:

apply plugin: 'pmd'

task pmd(type: Pmd) {
    ruleSetFiles = files("$project.rootDir/tools/rules-pmd.xml")
    source = fileTree('src/main/java/')

    reports {
        xml.enabled = false
        html.enabled = true
        html.destination = "$project.buildDir/outputs/pmd/pmd.html"
    }
}

属性:

  • ruleSetFiles:规则文件路径。
  • source:源码路径。
  • html.destination:检测结果的 html 文件所在路径。

同样,再在 build.gradle 文件中引用:

apply plugin: 'com.android.application'
apply from: "$project.rootDir/tools/script-pmd.gradle"

...

测试:

// MainActivity.java

...

private void someMethod(int a, int b, int c, int d) {
   if (a > b) {
       if (b > c) {
           if (c > d) {
               if (d > a) {
                   // some logic
               }
           }
       }
   }
}

...

执行 ./gradlew pmd 命令,在 html.destination 设置的路径下找到 pmd.html,就能够看到如下的检测结果:
检测结果

上面提到的所有文件,和配置项都可以在作者的这个项目中找到:dmytrodanylyk/template


原文链接:Configuring Android Project — Static Code Analysis Tools
推荐阅读:聊聊 Android StateListAnimator

欢迎关注微信号「极光开发者」,不定期赠书活动!

4 种主流 Java 静态代码分析工具 java静态代码分析工具包括Checkstyle,FindBugs,PMD,Jtest 立即下载

相关推荐

MMRotate 详细使用教程

MMRotate 详细使用教程 做旋转目标检测,怎么可以不知道如何使用MMRotate呢! github链接: https://github.com/open-mmlab/mmrotate 1 安装 创建虚拟环境并激活 conda create -n mmrotate python=3.7 -y conda activate mmrotate 安装 PyTorch 和 torchvision conda install pytorch torchvision -c pytorch 注意:确保

Sylvia_Lan的博客 1万+

android自动化静态代码分析,使用Android Studio Lint静态分析(一)

主要内容使用Android Studio提供的工具,配置Lint扫描范围和检查项。在使用 Lint 改进您的代码文档中,属于手动运行检查。程序静态分析程序静态分析是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。Java-Android代码常用的分析工具CheckstyleFind...

weixin_39887386的博客 400

保姆级教程:SAP ABAPer如何为VF01销售发票和MIRO发票校验配置凭证替代(含AC_DOCUMENT BADI完整代码示例)

本文详细解析了SAP ABAP中通过AC_DOCUMENT BADI实现VF01销售发票和MIRO发票校验的凭证替代技术。从技术选型到BADI实施步骤,再到核心逻辑代码示例,为ABAP开发者提供了一套完整的解决方案,帮助应对财务部门复杂的业务需求。

weixin_30421809的博客 350

Android 静态代码分析

Android 静态代码分析 在一些大型项目中,静态代码分析是必不可少的,通过静态代码分析可以避免一些低级的问题,与此同时可以规范代码书写、提高代码质量。本文主要介绍4种分析工具(CheckStyle、Findbugs、PMD、Android Lint)和如何快速接入。 功能介绍 CheckStyle CheckStyle 主要的功能就是实时检测,代码的规范(Code Styl...

Fun哥 2877

高分影像批处理第三回——RPC文件与几何校正

前言 前面两章部分完成了图像的基本组织和大气校正,可是对于遥感影像地理相关数据,精确的地理坐标也是非常关键的。L1级数据,可惜,并没有帮我们处理地理坐标系统。无论是打开ENVI还是用gdal工具查看图像元数据,其坐标系统都是错误的或者说是未读入的。因此本章节来解决这个问题。

weixin_43762038的博客 1万+

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4942

安卓开发中,静态代码格式检查方案有哪些?

除了使用现有的静态代码检查工具外,还可以根据项目的特定需求自定义检查规则。例如,在Android项目中,可以通过自定义Lint规则来实现对XML布局文件内控件id命名、Java代码中特定编码规范的检查等。自定义规则的实现需要一定的Java或Kotlin编程基础,以及对Lint API的深入了解。综上所述,安卓开发中静态代码格式检查方案多种多样,开发者可以根据项目的实际情况和需求选择合适的工具或方案来执行检查。

qq_43664361的博客 705

安装esxi7.0

保存重启后就能安装。vCenter Server是VMware vSphere虚拟化架构中的核心管理工具,充当ESXi主机及虚拟机中心管理点的服务,利用vCenter Server,可以集中管理多ESXi主机及其虚拟机,安装、配置和管理vCenter Server 不当可能会导致管理效率降低,或者致使EXSi主机和虚拟机停用。提示选择安装VMware ESXi 使用的存储,ESXi支持U盘以及SD卡安装,如系统中存在多块存储设备,选择需要安装系统的磁盘【注意磁盘142G,ESXI会将120G做VMFSL】

u011220233的博客 1万+

java静态代码检测 pmd_安卓 常用静态代码分析工具(CheckStyle,findbugs,pmd,lint)

静态代码分析工具介绍:1.CheckStyleCheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要,但是枯燥的任务中解脱出来.CheckStyle检验的主要内容·Javadoc注释·命名约定·标题·Import语句·体积大小·空白·修饰符·块·代码问题·类设计·混合检查(包括一些有用...

weixin_42347346的博客 564

Windows 下 Hermes Agent(爱马仕)安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Hermes Agent(爱马仕) 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Hermes Agent 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装WSL环境 2.2 步骤二 安装Python环境 2.3 步骤三 安装Hermes Agent 2.4 步骤四 修正 API Key 错误 2.5 步骤五 配置多个模型 2.6 步骤六 启动Hermes Agent 3. 常见问题及解决方案 4. 总结

weixin_43178406的博客 14万+

STM32 stack_size和heap_size大小设置的意义

在使用STM32编程时,一般情况下我们不会关注堆栈空间的大小,因为在STM32的启动文件中,已经帮我们预先设置好了堆栈空间的大小。如下图所示的启动代码中,Stack栈的大小为:0x400(1024Byte),Heap堆的大小为:0x200(512Byte)。 1、若工程中使用的局部变量较多,定义的数据长度较大时,若不调整栈的空间大小,则会导致程序出现栈溢出,程序运行结果与预期的不符或程序跑飞。这时我们就需要手动的调整栈的大小。 2、当工程中使用了malloc动态分配内存空间时,这时分配.......

zxm8513优快云博客 3万+

android语法分析工具,在Android Studio中使用静态代码分析工具

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?作者:Aanand Shekhar Roy静态分析(或静态代码分析)是针对某些设置规则对源代码进行的分析运行,甚至在程序运行之前(通常甚至在单元测试之前)。这是一种在没有运行程序的情况下完成的调试,这通常是进行代码分析的第一步。由于分析是针对某些设置规则运行的,因此它也有助于维护开发团队之间的编码约定。你绝对可以在代码审...

weixin_39964590的博客 379

模式分类识别 | TCN时间卷积神经网络多特征分类预测(Matlab完整程序)

模式分类识别 | TCN时间卷积神经网络多特征分类预测(Matlab完整程序)

前程算法屋的博客 748

Android-PickerView 代码质量提升指南:使用静态代码分析工具优化你的Android选择器

Android-PickerView 是一个功能强大的Android时间选择器和省市联动选择器库,支持多种自定义选项和联动效果。作为一个优秀的开源项目,保持代码质量对于项目的长期维护和用户体验至关重要。本文将介绍如何使用静态代码分析工具来提升 Android-PickerView 的代码质量。 ## 🔍 当前代码质量分析 通过初步分析 Android-PickerView 的代码结构,我们发

gitblog_00134的博客 411

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

android静态代码分析工具Android lint

作为移动应用开发者,我们总希望发布的apk文件越小越好,不希望资源文件没有用到的图片资源也被打包进apk,不希望应用中使用了高于minSdk的api,也不希望AndroidManifest文件存在异常,lint就能解决我们的这些问题。Android lint是在ADT 16提供的新工具,它是一个代码扫描工具,能够帮助我们识别代码结构存在的问题,主要包括: 1)布局性能(以

hqzxsc2006的专栏 1618

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

如何分析android的OOM,与java静态代码分析工具

用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause。根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如 Android 内存优化,如何避免OOM 文章中提到的Activity 的mContext 引用。 当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好

wyk86485481的博客 437

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具

用MAT分析OOM很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause。根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例如Android 内存优化,如何避免OOM文章中提到的Activity 的mContext 引用。当代码量很庞大的时候,单靠读代码查找错误是很困难的,所以必须借助于工具,这里介绍一款很好用的分析工具...

weixin_32121331的博客 223

使用静态分析工具确保高质量的Android代码

在今天的教程中,我们将学习如何使用一些Java静态代码分析工具来确保项目中的高质量Android代码。 我们将介绍Checkstyle,FindBugs,PMD和Android Studio Lint,它们都是免费和开源的! 什么是静态代码分析工具? 这些工具可以解析和分析源代码,而无需实际执行。 目的是发现潜在的漏洞,例如错误和安全漏洞。 流行的免费静态代码分析器(例如FindBugs...

代码教主 915

Android Lint Summary 使用教程

Android Lint Summary 使用教程 项目介绍 Android Lint Summary 是一个开源工具,旨在帮助开发者更方便地查看和管理多个 Android 项目的 Lint 问题。通过将多个子项目的 Lint 结果合并到一个输出中,开发者不再需要逐一检查每个子项目的 Lint 结果,从而提高了效率。 项目快速启动 安装 从 GitHub Releases 页面下载适用于您平台的...

gitblog_00076的博客 470

Java静态代码分析工具Infer

Java静态代码分析工具Infer作者:chszs,转载需注明。博客主页:http://blog.youkuaiyun.com/chszs一、Infer介绍Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题。目前Facebook使用此工具分析Facebook的App,包括Android、iOS、Facebook Messenger和Instagram等。

chszs的专栏 8217
上一篇: 怎样减少 Android 应用包 60% 的大小?
下一篇: GPT-2,吓坏创造者的「深度造假写手」
极光推送
博客等级 码龄14年 109粉丝 108原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值