【问题标题】:packaging jacoco-agent.properties into an APK so it can be read?将 jacoco-agent.properties 打包成 APK 以便读取?
【发布时间】:2015-10-17 04:14:33
【问题描述】:

这是我的情况:

背景

  • 我正在调查我们的 Android 应用程序的代码覆盖率。该应用是使用 Gradle 和 Android Studio 构建的。
  • 在两种情况下我需要代码覆盖率报告:在手动测试期间,以及在使用我们相当大的 Appium 套件构建的自动化测试期间。
  • 我需要快速获得一个概念验证(不是总是这样吗?)所以我没有机会进行彻底的研发。所以请原谅我表现出的任何无知:)
  • 我可以访问应用程序源,但对移动部件知之甚少。
  • 我调查了 JaCoCo 和 Emma。这个问题与 JaCoCo 有关。
  • 鉴于我们需要覆盖 Appium 和手动测试,我相信使用 JaCoCo 进行离线检测是我所需要的。

取得的进展

  • 我使用了the JaCoCo plugin pagethe Android Tools page 并且可以正确配置build.gradle。
  • 我已验证这些类(存在于build\intermediates\classes 中)使用 JaCoCo 进行检测,并打包在 APK 中。
  • 我为this SO discussion 编写了一个BroadCastReceiver,它将接收“结束覆盖”广播。

问题

当我手动运行应用程序时,我一直在 logcat 中看到错误 W/System.err:java.io.FileNotFoundException:/jacoco.exec:打开失败:EROFS(只读文件系统)

来自this SO questionthe JaCoCo docs 我了解到Jacoco 需要知道jacoco.exec 文件的存储位置——并且我需要使用APK 打包一个jacoco-agent.properties(包含destfile 属性) .

我尝试将 jacoco-agent.properties 放入 assets - 它已正确打包到 APK 中,但似乎没有任何效果(即 Jacoco 像往常一样失败) 我试着把它放在res 里面——它没有被打包到 APK 中。 我尝试了res/raw 并遇到了有关文件名中破折号的错误,如this SO question

我无能为力,非常感谢帮助。如何使用我的 Gradle 构建将 jacoco-agent.properties 打包到 APK 中,以便 JaCoCo 读取它?

相关问题

this SO question,有一个 2013 年的答案,它适用于 Ant,而不是 Gradle。

【问题讨论】:

    标签: android android-gradle-plugin code-coverage jacoco


    【解决方案1】:

    我不熟悉执行Jacoco工作的要求,但是你可以很容易地用apk打包一个文件。下面的代码会将jacoco-agent.properties 放在你的apk 包的根目录下。

    对您的应用模块的 build.gradle 进行以下更改:

    android {
        ...
        sourceSets {
            main {
                resources.includes = [ '**/jacoco-agent.properties' ]
            }       
        }
    }
    

    【讨论】:

    • 我编辑了答案,这样对于像我这样的新手来说可能会更清楚:) 如果我的编辑正确,请告诉我。
    • 感谢您的回复;我添加了代码,但似乎没有帮助。 (我解压缩了 APK 并检查了 jacoco-agent.properties 没有被打包)。我的 build.gradle 看起来像这样:sourceSets { main { manifest.srcFile 'AndroidManifest.xml' assets.srcDirs = ['assets'] java.srcDirs = ['src'] res.srcDirs = ['res'] res.includes = ['**/jacoco-agent.properties'] }
    • @Vish,你的接近我看到你指定... res.includes = ['**/jacoco-agent.properties'] res 指向android Resources 而不是普通的旧Java 包括resources.includes = ['**/jacoco-agent.properties'] 请注意res 与@987654331 @
    • 感谢您的回复。我很快意识到我需要一个关于使用 gradle 进行 Android 开发的速成课。会试试这个,让你知道。
    • 这对我和 0.8.3 和 0.8.5 都不起作用。它对你有用吗,就像在答案@JBirdVegas 中写的那样?你到底把 jacoco-agent.properties 放在哪里了?
    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 2013-08-20
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2020-10-23
    相关资源
    最近更新 更多