千家信息网

Android如何使用jacoco统计代码行覆盖率

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要讲解了"Android如何使用jacoco统计代码行覆盖率",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android如何使用jacoco
千家信息网最后更新 2026年10月31日Android如何使用jacoco统计代码行覆盖率

这篇文章主要讲解了"Android如何使用jacoco统计代码行覆盖率",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Android如何使用jacoco统计代码行覆盖率"吧!

正文

请根据以下步骤细心耐心进行配置,中间如果出现任何错误都会影响到最后覆盖率文件的生成!

1、项目 build.gradle

在项目的 build.gradle 中引入 jacoco core 依赖:

、、、buildscript {    repositories {       、、、        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }    }    dependencies {        、、、        classpath 'com.android.tools.build:gradle:3.2.1' //可具体配置 本教程务必使用3.2以上        classpath "org.jacoco:org.jacoco.core:0.8.5"    }}、、、

2、jacoco-report.gradle

在项目根目录新建一个 jacoco-report.gradle 文件,其中主要定义了一个 Gradle 任务:jacocoCoverageTestReport。代码如下:

apply plugin: 'jacoco'tasks.withType(Test) {    jacoco.includeNoLocationClasses = true}ext {    getFileFilter = { ->        def jacocoSkipClasses = null        if (project.hasProperty('jacocoSkipClasses')) {            jacocoSkipClasses = project.property('jacocoSkipClasses')        }        //忽略类文件配置        def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*$ViewInjector*.*']        if (jacocoSkipClasses != null) {            fileFilter.addAll(jacocoSkipClasses)        }        return fileFilter    }}task jacocoTestReport(type: JacocoReport, dependsOn: ['testCoverageDebugUnitTest', 'createCoverageDebugCoverageReport']) {    group = "Reporting"    description = "Generate Jacoco coverage reports"    reports {        xml {            enabled = true            xml.destination file("build/reports/jacoco/jacoco.xml")        }        html {            enabled = true            html.destination file("build/reports/jacoco")        }    }    def fileFilter = project.getFileFilter()    //检测覆盖率的class所在目录(以项目class所在目录为准)    //gradle2.3 class所在目录    def coverageDebugTree = fileTree(dir: "$project.buildDir/intermediates/classes/coverageDebug", excludes: fileFilter)    //gradle3.2 class所在目录    def coverageDebugTreeNewGradle = fileTree(dir: "$project.buildDir/intermediates/javac/debug/compileDebugJavaWithJavac/classes", excludes: fileFilter)    def mainSrc = "$project.projectDir/src/main/java"    //设置需要检测覆盖率的目录    sourceDirectories = files([mainSrc])    //兼容gradle版本    classDirectories = files([coverageDebugTree, coverageDebugTreeNewGradle])    //以下路径也需要检查    executionData = fileTree(dir: project.buildDir, includes: [            'jacoco/testCoverageDebugUnitTest.exec', 'outputs/code-coverage/debugAndroidTest/connected/coverage.ec'    ])}

注意以上注释的位置,每一个配置务必仔细检查路径是否正确且存在!

3、 app/*module的build.gradle

在你需要统计的 app或者某 module 对应的 build.gradle 中进行 jacoco 任务配置:

引入 上面新建的 jacoco-report.gradle;
添加 coverageDebug BuildType。
代码如下:

apply plugin: 'com.android.library'apply from: '../jacoco-report.gradle'android {   、、、    defaultConfig {        、、、        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'    }    lintOptions {        、、、        abortOnError false    }    buildTypes {        、、、        coverageDebug {            minifyEnabled false            testCoverageEnabled true        }    }    testOptions {        unitTests.all {            jvmArgs '-noverify'        }        unitTests {            includeAndroidResources = true        }        unitTests.returnDefaultValues = true    }  、、、}dependencies {    、、、    testImplementation 'junit:junit:4.12'    //单元测试    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'    testImplementation 'org.robolectric:robolectric:4.3.1'    testImplementation "org.robolectric:shadows-multidex:4.3"    testImplementation 'org.hamcrest:hamcrest-all:1.3'    // power mockito    testImplementation 'org.mockito:mockito-core:2.8.9'    testImplementation "org.powermock:powermock-api-mockito2:1.7.4"    testImplementation "org.powermock:powermock-module-junit4:1.7.4"    testImplementation "org.powermock:powermock-module-junit4-rule:1.7.4"    testImplementation "org.powermock:powermock-classloading-xstream:1.7.4"}

4、 测试用例

在需要测试的对应 module 的 src/test/ 目录下编写对应的代码测试用例,建议使用 Squaretest插件生成,使用方式请自行搜索,基本没什么坑,这里不再赘述。

5、 运行 task jacocoTestReport

在 Android Studio 的 Gradle 任务窗格中,找到 project/module/Tasks/reporting/jacocoTestReport 这个任务,双击运行,即可生成代码行覆盖率报告。

5、 查看报告

打开 project/module/build/reports/jacoco/index.html文件,即可查看各个代码文件的行覆盖率。

覆盖率报告用浏览器打开后一般如下:

6、 小花招:快速提升代码覆盖率

根据覆盖率报告将覆盖率低的类忽略,具体可查看步骤2代码的第一个注释处

、、、//忽略类文件配置def fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', '**/*$ViewInjector*.*'//继续添加想要被忽略的低覆盖率的类'**/ClassA.class','**/ClassB.class'、、、]、、、

感谢各位的阅读,以上就是"Android如何使用jacoco统计代码行覆盖率"的内容了,经过本文的学习后,相信大家对Android如何使用jacoco统计代码行覆盖率这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

覆盖率 代码 文件 目录 配置 统计 任务 所在 报告 项目 测试 学习 生成 内容 步骤 注释 路径 检查 检测 运行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 广州紫鲸互联网科技有限公司 互联网科技工作委员会 互联网科技工作委员会主任 中关村互联网科技集团 科技互联网项目 互联网金融 科技创新 青岛中康互联网医疗科技有限公司 恒银科技与互联网金融 重庆威客帮互联网科技 广州恒生互联网科技有限 互联网公司科技股 苏州五指互联网络科技有限 为客找房互联网科技公司怎么样 伍佰万互联网科技怎么赚钱 新氧科技和美国互联网有关系吗 福建互联网展示科技馆设计 广州智享互联网科技 互联网科技的前景 恒生科技指数 中概互联网 博彦科技互联网金融 互联网的科技创新 天扬科技互联网广告 互联网巨头投资的硬核科技 互联网之后的科技是什么 福州新华互联网科技学校 知乎 互联网校园科技培训 晓花互联网科技有限公司网址 世界互联网领先科技成果获奖 华人运通互联网科技公司
0