AGP 7.2.x jacoco 覆盖率数据出乎意料地低

Zac*_*ach 5 testing android code-coverage gradle jacoco

从 AGP 7.2.0-alpha01 及更高版本(包括 7.2.0、7.3.x 和 7.4.x 预览版本)开始,jacoco 覆盖范围无法正常工作,尽管所有配置/信息似乎都按预期设置/工作。

在 AGP 7.1.3 上,覆盖率显示达到预期的 %s(对于我正在使用的应用程序来说非常高 - 可以说高于 90%) - 一切都很健康。当我切换到任何较新的 AGP 版本时,覆盖率几乎下降到 10% 或更低。一些覆盖数据确实会显示,但应用程序中的大多数课程都显示为未覆盖。我没有看到为什么有些数据显示而有些数据不显示的模式。仅通过仪器测试测试的类和仅通过常规单元测试测试的其他类都缺少数据 - 并且也存在相反的情况(意味着在这些情况下数据显示为少数类),因此非常令人困惑......

我像这样设置我的 jacoco 任务:

task developDebugCodeCoverageReport(type: JacocoReport, dependsOn: ['testDevelopDebugUnitTest', 'createDevelopDebugCoverageReport']) {
    group = 'Code Coverage'

    description = 'Generate Jacoco coverage reports for the developDebug build'

    reports {
        html.required.set(true)
        xml.required.set(true)
    }

    def excludes = [
        // list of files I want to exclude
    ]

    def javaClasses = fileTree(dir: "${buildDir}/intermediates/javac/developDebug/classes", excludes: excludes)
    def kotlinClasses = fileTree(dir: "${buildDir}/tmp/kotlin-classes/developDebug", excludes: excludes)
    classDirectories.setFrom(files([
            javaClasses,
            kotlinClasses
    ]))

    sourceDirectories.setFrom("${project.projectDir}/src/main/java")

    def junitTestsData = "${buildDir}/outputs/unit_test_code_coverage/developDebugUnitTest/testDevelopDebugUnitTest.exec"
    def androidTestsData = fileTree(dir: "${buildDir}/outputs/code_coverage/developDebugAndroidTest/connected/", includes: ["**/*.ec"])
    executionData.setFrom(files([
            junitTestsData,
            androidTestsData
    ]))
}
Run Code Online (Sandbox Code Playgroud)

我认为 AGP 7.2.x 进行了某种更改,破坏了 jacoco 读取覆盖率数据的方式。更新 AGP 版本后生成的 exec 和 ec 文件大小不同...但我对 jacoco/AGP 配置了解不够,无法继续自己操作。

我正在尝试设置一个小示例应用程序来演示该问题,我担心它与我正在使用的依赖项之一相关的复杂性,但我们会看到......与此同时 - 有人有任何想法吗?