You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为开启isTestCoverageEnabled的Android项目配置JaCoCo以排除指定文件

Android Gradle中JaCoCo排除特定文件的非自定义任务方案

不需要创建自定义jacocoTestReport任务,直接修改自动生成的create*UnitTestCoverageReport任务配置即可实现排除指定文件的需求,以下是两种可行方案:

方案一:修改JaCoCo报告任务的类目录过滤规则

通过匹配所有JacocoReport类型的任务(包括自动生成的createDebugUnitTestCoverageReport和createReleaseUnitTestCoverageReport),直接调整其类目录的排除规则,精准过滤不需要纳入覆盖率统计的文件:

android {
    buildTypes {
        debug {
            isTestCoverageEnabled = true
        }
        release {
            isTestCoverageEnabled = true
        }
    }

    // 配置所有JaCoCo报告任务的排除规则
    tasks.withType<JacocoReport>().configureEach {
        afterEvaluate {
            classDirectories.setFrom(files(classDirectories.files.map { dir ->
                fileTree(dir) {
                    // 根据实际需求添加排除规则
                    exclude(
                        "**/dagger/**",
                        "**/*_MembersInjector.class",
                        "**/Dagger*Component.class",
                        "**/Dagger*Module.class",
                        "**/BuildConfig.class"
                    )
                }
            }))
        }
    }
}

testCoverage {
    jacocoVersion = "0.8.11" // 替换为你使用的JaCoCo版本
}

方案二:通过SourceSets排除生成源目录

如果需要彻底排除某类生成文件的源目录(比如KAPT生成的Dagger代码目录),可以直接修改对应BuildType的SourceSets配置,但注意此操作会影响该BuildType下的所有编译相关任务:

android {
    sourceSets {
        debug {
            java.srcDirs -= file("build/generated/source/kapt/debug")
        }
        release {
            java.srcDirs -= file("build/generated/source/kapt/release")
        }
    }
}

推荐方案一,因为它仅针对覆盖率报告任务生效,不会影响其他编译流程,灵活性更强。

内容的提问来源于stack exchange,提问作者Adjorno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:45:33