将jacoco-agent.properties打包成一个APK,以便可以阅读?

时间:2015-10-17 04:14:33

标签: android android-gradle code-coverage jacoco

这是我的情况:

背景

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

取得进展

  • 我使用了the JaCoCo plugin pagethe Android Tools page,可以正确配置build.gradle。
  • 我已经确认类(存在于build\intermediates\classes中)使用JaCoCo进行检测,并打包在APK中。
  • 我根据this SO discussion写了一个BroadCastReceiver,它会收到" end cover"广播。

问题

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

来自this SO questionthe JaCoCo docs我了解Jacoco需要知道存储jacoco.exec文件的位置 - 而且我需要打包jacoco-agent.properties(包含{{ 1}}属性)与APK。

我已经尝试将jacoco-agent.properties放入destfile - 它被正确打包到APK中,但似乎没有任何效果(即Jacoco像往常一样失败) 我试过把它放在assets里面 - 它没有打包到APK中。 我尝试res并点击文件名中的短划线错误,如this SO question中所示。

我在我的智慧结束时,非常感谢帮助。如何使用我的Gradle构建将jacoco-agent.properties打包到APK中,以便JaCoCo读取它?

相关问题

this SO question,有一个2013年的答案,它是针对Ant的,而不是Gradle。

1 个答案:

答案 0 :(得分:0)

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

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

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