生成Jacoco报告时排除Android Instrumentation测试并合并多模块报告
无设备环境下排除Instrumentation测试生成覆盖率
你遇到的报错是因为createDebugCoverageReport任务默认同时依赖Instrumentation测试任务connectedDebugAndroidTest和单元测试任务,会同时收集两类测试的覆盖率数据。不需要Instrumentation测试覆盖率的话可以直接禁用相关任务,调整配置如下:
- 在每个模块的Jacoco配置中添加规则,禁用Instrumentation相关任务:
tasks.matching { task -> task.name.contains("createDebugAndroidTestCoverageReport") || task.name.contains("connectedDebugAndroidTest") }.configureEach { enabled = false }
- 执行单元测试覆盖率任务即可,不会触发设备相关校验:
./gradlew testDebugUnitTestCoverage
多模块Jacoco覆盖率报告合并
在项目根目录的build.gradle中添加合并报告任务即可,配置示例如下:
apply plugin: 'jacoco' // 全量覆盖率合并任务 task jacocoFullReport(type: JacocoReport) { // 依赖所有模块的Debug单元测试任务,确保先跑完所有单测生成覆盖率数据 dependsOn subprojects.tasks.matching { it.name == 'testDebugUnitTest' } // 收集所有模块的源码路径 sourceDirectories.from = subprojects.collect { it.android.sourceSets.main.java.srcDirs } // 收集所有模块的编译后class文件,过滤自动生成的无用类 classDirectories.from = subprojects.collect { project -> fileTree(dir: project.buildDir, includes: [ "intermediates/javac/debug/classes/**/*.class", "intermediates/kotlin_classes/debug/**/*.class" // Kotlin代码需要添加该路径 ], excludes: [ "**/R.class", "**/R$*.class", "**/BuildConfig.*", "**/Manifest*.*", "**/*_Hilt*.*", // Hilt生成类 "**/*databinding*.*" // DataBinding生成类 ]) } // 收集所有模块的单元测试覆盖率数据文件 executionData.from = subprojects.collect { project -> fileTree(dir: project.buildDir, includes: [ "jacoco/testDebugUnitTest.exec", "outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec" // AGP 7.0+默认路径 ]) } // 配置报告输出规则 reports { html { enabled = true destination = file("${rootProject.buildDir}/reports/jacoco/full/html") } xml { enabled = true destination = file("${rootProject.buildDir}/reports/jacoco/full/jacoco.xml") } } }
配置完成后执行如下命令即可生成全量合并报告:
./gradlew jacocoFullReport
报告默认输出到根项目build/reports/jacoco/full目录下。
注意事项
- 若项目使用非Debug的构建变体,将配置中所有
debug关键词替换为对应变体名即可 - 若有其他自动生成的代码不需要统计覆盖率,直接在
classDirectories的excludes规则中添加对应路径即可 - 不同AGP版本的class文件、覆盖率数据文件路径可能存在差异,若提示无覆盖率数据,可到对应模块的build目录下搜索对应文件调整路径规则
内容的提问来源于stack exchange,提问作者Vamsi
相关产品推荐
相关产品推荐

