提问者:小点点

将jacoco-agent.properties包装成APK以便读取?


这是我的情况:

背景

  • 我正在调查我们的Android应用程序的代码覆盖率。该应用程序是使用Gradle和Android Studio构建的。
  • 我需要两种情况下的代码覆盖率报告:在手动测试期间,以及在使用我们庞大的Appium套件构建的自动化测试期间。
  • 我需要快速得到一个概念验证(不是总是这样吗?)所以我没有机会做彻底的R

取得的进展

  • 我使用了JaCoCo插件页面和Android工具页面,可以正确配置build. gradle。
  • 我已经验证了类(存在于build\中间类中)是用JaCoCo检测的,并且被打包在APK中。
  • 我在SO的讨论中编写了一个BroadCastReccher,它将接收“结束覆盖”广播。

问题

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

从这个SO问题和JaCoCo文档中,我明白Jacoco需要知道在哪里存储Jacoco. exec文件-并且我需要用APK打包一个jacoco-agent.properties(包含devfile属性)。

我尝试过将jacoco-agent.properties放入资产-它被正确地打包到APK中,但似乎没有任何效果(即Jacoco像往常一样失败)我尝试将其放入res-它没有被打包到APK中。我尝试了res/原始,并在文件名中遇到了破折号的错误,如SO问题所示。

我无计可施,非常感谢帮助。如何使用Gradle构建将jacoco-agent.properties打包到APK中,以便JaCoCo阅读?

相关问题

这个SO的问题,从2013年就有了答案,是给蚂蚁的,不是格拉德尔的。


共1个答案

匿名用户

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

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

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