android - 将 Gradle 升级到版本 3.0.1 后,会生成冗余的 jacoco.exec 文件

标签 android gradle jacoco

我有以下模块:

  • 应用程序 (com.android.application)
  • 测试库(com.android.library)

Gradle升级到3.0.1版本后,Jacoco插件在执行测试后会在app(com.android.application)模块的根文件夹中生成冗余且无效的jacoco.exec文件。当我在 teSTLibrary (com.android.library) 模块中设置 testCoverageEnabled true 时,会生成此文件。如果我在 teSTLibrary 中设置 testCoverageEnabled false,则不会生成 jacoco.exec 文件。

预期行为

执行测试后,无论 testCoverageEnabled 标志在 teSTLibrary 模块中设置为 true 或 false,都不应在应用程序模块的根文件夹中生成 jacoco.exec 文件。

当前行为

执行测试后,如果在 teSTLibrary 模块中 testCoverageEnabled 标志设置为 true,则在应用程序模块的根文件夹中创建 jacoco.exec 文件。

上下文

我正在尝试从 Gradle 2.2.2 版本升级到 Gradle 3.0.1 版本。但在升级并执行所有测试后,我注意到应用程序的根目录中生成了一个新的冗余 jacoco.exec 文件。

重现步骤

展示该问题的 GitHub 存储库:https://github.com/DenysShovhenia/Test

重现步骤:

  • 在 Android Studio 中打开项目
  • 运行 Test(root) 模块的 testDebugUnitTest 任务
  • 注意应用模块根文件夹中新创建的 jacoco.exec 文件

希望有人能帮我解决这个问题。

最佳答案

这实际上是一个错误,目前尚未关闭:https://issuetracker.google.com/issues/67872367

经过大量研究,我找到了一些解决方法。

1) 将其添加到生成该文件的模块中。

android {
    testOptions {
        unitTests {
            all {
                // workaround for generation of unexpected jacoco.exec file in project directory
                systemProperty 'jacoco-agent.destfile', buildDir.path + '/jacoco.exec'
            }
        }
    }
}

2) 在library/src/debug/resources文件夹下的库模块中创建文件jacoco-agent.properties

并添加到该文件的下一行:

destfile=build/jacoco/coverage.exec

所以,这样你就可以将此文件替换到构建文件夹中。

其他变体:

3) 将库模块的 testCoverageEnabled 设置为 false。

4) 不要在应用程序模块的测试中使用库中的代码。

有用的链接: http://www.qalearningguide.com/2017/10/code-coverage-for-android-using-jacoco.html

关于android - 将 Gradle 升级到版本 3.0.1 后,会生成冗余的 jacoco.exec 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48945710/

相关文章:

android - 当 Google Play 服务添加为依赖项时无法使用 gradle 构建

android - 使用play-services-ads和play-services-analytics的65K LIMIT

scala - 为什么 Play 2.3.4 和 jacoco4sbt > 2.1.4 会失败并出现 NoSuchMethodError?

unit-testing - Gradle测试任务-Gradle 1.6以及Gradle 2.3或更高版本

安卓:grpc 在 Nexus 5 上失败

android - 服务 Intent 必须明确

eclipse - Gradle Integration for Eclipse 守护程序启动失败

jenkins - 如何使用 Jacoco 和 Jenkins Pipeline 更改构建状态?

android - Ionic android 构建失败,找不到插件 "proposal-numeric-separator"

android - 在 gradle android 闭包中定义时,是否必须在 AndroidManifest.xml 中设置 SDKVersion?