【问题标题】:Emma does not generate coverage.ec艾玛不生成coverage.ec
【发布时间】:2011-12-22 03:22:07
【问题描述】:

我设置了 Emma,它曾经对我有用。然后我们对源代码进行了更改,现在它根本不生成coverage.ec。它确实会生成coverage.em。 接近测试结束时,它有错误消息:

[exec] INSTRUMENTATION_CODE: 0
[echo] Downloading coverage file into project directory...
[exec] remote object '/sdcard/coverage.ec' does not exist

BUILD FAILED
/var/lib/jenkins/android-sdk-linux_x86/tools/ant/build.xml:1056: exec returned: 1.

build.xml 的第 1056 行是

"{adb}" failonerror="true".

我看到我的桌面上确实有coverage.em,这意味着我的代码已经过检测。

我在\test下使用的命令是

ant emma debug install test

这以前对我有用。运行代码覆盖对我来说总是崩溃,通常在单元测试快结束时,但它总能让我得到一些覆盖。现在它崩溃了,不会产生coverage.em

我也尝试访问/sdcard/,它完全可访问和可写。

这已经阻止了我好几天,任何输入将不胜感激。我也是所有这些 Android、Ant 和 Emma 的新手,所以谢谢!!

更新: 我刚刚清理了环境并再次运行了命令。现在也不再生成coverage.em。这告诉我源代码没有被检测。但是我上面使用的命令应该是仪器项目,它的测试项目,安装并开始测试。除了将coverage.ec位置更改为/sdcard/coverage.ec外,我没有更改build.xml中的emma def。这是因为默认情况下它转到 /data/data,而我无权访问此手机上的数据/数据

我使用的是 Android SDK 的 r15,以及默认的 build.xml。我只是将coverage.ec的路径更改为/sdcard/coverage.ec。运行检测

 Go to main_project
 $andriod update project -p .
 Go to main_prject\test
 $android update project -m ../ -p .
 To start code code
 $ant emma debug install test

它生成了 main_project-instrumented.apk 和 test_project-debug.apk。两者都已安装,我可以看到它执行测试。

【问题讨论】:

  • 您能否发布您的 build.xml 文件,以便我们了解更多关于发生了什么的信息
  • 我使用的是来自 android-sdk-linux-x86/tools/ant/build.xml 的默认版本。这个文件太大了,我无法复制和粘贴。我想我的第二个问题是,我需要对此 build.xml 进行任何更改吗?到目前为止,我所做的唯一更改是更改 coverage.ec 的位置

标签: android ant code-coverage emma


【解决方案1】:

你必须先用android命令行工具做一个测试项目。

创建项目和测试项目

假设您的项目存储在D:\AndroidProject 并且您针对 android API 级别 8 进行编程。首先您使用此命令创建项目:

android update project --path ./ --name blabla~ --target android-8 --subprojects 

然后为测试项目创建一个文件夹并导航到该文件夹​​:

mkdir Android_test
cd Android_test

然后使用以下命令创建android测试项目

 android create test-project --main ../AndroidProject --path ./

带有 emma 覆盖率报告的 Ant 构建(带 root)

执行此命令(来自 jenkins 选择和构建步骤)以使用 emma 报告完成构建:

ant emma debug install test

注意 : 要使用此功能,您必须连接有根设备或模拟器,然后执行 ant 命令!

更改构建 xml 文件(因此不需要 root)

如果您不想 root 设备,另一种解决方案是更改这些覆盖率报告的位置。为此,您应该修改 build.xml 文件。

(您应该在谷歌上搜索以获取更多信息,此处简要说明)

打开 build.xml -> 找到存储coverage.ec 文件的位置。在大多数情况下,这将存储在/data/data/com.example.Android/coverage.ec

这里的问题是/data/data/~~~ 路径受到保护(因此需要根)。

无论如何~你可以在你的测试项目文件夹/bin中得到一个coverage.html文件。接下来的步骤将说明如何更改此设置以将此文件保存在 /sdcardinstead!

你可以打开你的build.xml文件,在最后一行~你可以找到import ~~~ build.xml这个命令,这意味着你的build.xml文件将导入另一个build.xml文件。

另一个 build.xml 文件是 android SDK 的一部分,位于 ${Android-sdk}/tools/ant/build.xml

build.xml 文件所需的更改

我们无法更改此文件(不会遇到麻烦),因此请将完整文件复制到其他位置或直接复制到您的项目 build.xml 文件中。

无论您选择做什么,都不要忘记调整或更改 build.xml 文件中的导入语句。

这是您需要在新的 build.xml 文件中更改的内容:

  • 删除import= ~~build.xml
  • 删除第一行 xml=ejkwjkw?e jw ""project = "android_rule" ~~ ~blabla)
  • 最后一行/project
  • 更新地址为/sdcard/coverage.ec

然后,就可以得到coverage.ec文件了~

【讨论】:

  • 如何更改生成的coverage.ec文件位置以进行maven构建?
【解决方案2】:

我在将我的 SDK 更新到 r16 后遇到了这个问题:Emma code coverage not working in r15 of tools

这为我解决了问题:

ant all clean emma debug install test

但我不确定你是否有同样的问题。

我无权访问此手机上的数据/数据

它是无根设备吗?请注意,构建说:

WARNING: Code Coverage is currently only supported on the emulator and rooted devices.

也许您无法通过仅更改覆盖文件的位置来解决此限制。它可以在虚拟设备上运行吗?

【讨论】:

  • 手机设备确实有问题,换了手机,问题就解决了。
  • 什么是目标“全部”?
  • 老实说,我不确定...我只是查看了 build.xml 并没有这样的任务。可能已经过时,和/或根本不需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多