2015-10-17 80 views
1

这里是我的情况:将jacoco-agent.properties打包成APK以便它可以被读取?

背景

  • 我调查代码覆盖我们的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 coverage”广播。

问题

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

this SO questionthe JaCoCo docs据我所知,Jacoco需要知道在哪里存储jacoco.exec文件 - 和我需要打包jacoco-agent.properties(含destfile属性)与APK。

我试图把jacoco-agent.properties在assets - 它被打包成APK正常,但似乎没有任何效果(即Jacoco未能像往常一样) 我试图把它里面res - 它没有打包成APK。 我试过res/raw,并在文件名中输入了一个破折号的错误,如this SO question

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

相关问题

this SO question,有从2013年的答案,它是蚂蚁,而不是摇篮。

回答

0

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

使这些更改build.gradle为您的应用程序模块:

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

我编辑的答案,因此它可能对于像我这样的新手更清晰:)请让我知道如果我的编辑是正确的。 – Vish

+0

感谢您的回复;我添加了代码,但它似乎没有帮助。 (我解压APK并检查jacoco-agent.properties没有打包)。我的build.gradle看起来是这样的:'sourceSets { 主要{ manifest.srcFile '的AndroidManifest.xml' assets.srcDirs = [ '资产'] java.srcDirs = [ 'src' 中] res.srcDirs = [” res'] res.includes = ['**/jacoco-agent.properties'] }' – Vish

+0

@Vish,你近我看你指定'... res.includes = ['**/jacoco-agent。属性']'res'指向android'Resources'而不是Plain Old Java包含哪个'resources.includes = ['**/jacoco-agent.properties']'注意'res' vs'resources' – JBirdVegas

相关问题