android - Emma 不生成 coverage.ec

标签 android ant code-coverage emma

我设置了 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,而我没有权限访问这个手机上的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。两者都已安装,我可以看到它正在执行测试。

最佳答案

你必须先用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 ./

Ant building with emma coverage report (with root)

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

ant emma debug install test

注意:要使此功能正常工作,您必须连接已获得 root 权限的设备或模拟器,然后执行 ant 命令!

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

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

(您应该通过谷歌搜索了解更多信息,这里有简要说明)

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

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

无论如何~你可以在你的测试项目文件夹/bin中得到一个coverage.html文件。接下来的步骤解释了如何更改它以将此文件保存在 /sdcard 上!

你可以打开你的 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文件了~

关于android - Emma 不生成 coverage.ec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599097/

相关文章:

teamcity - 如何在 TeamCity 中将代码覆盖率阈值设置为高水位线?

java - 用于由 boolean 标志驱动的 Java 方法的 Junit

android - 当我打开黑暗模式时,黑暗图标...我该如何解决...?

android - 适用于 API 17 之前版本的嵌套 fragment

java - 当布局子项不适合时如何调整 LinearLayout 元素?

java - JUnit XML 格式真的没有错误元素吗?

android - 如何在 Android 中压缩音频和图像文件?

java - 找不到 taskdef 类 PackageName.ClassName

ant - "fork: Resource temporarily unavailable"是什么原因

gcc - 使用 arm-none-eabi-gcc 从 cpp 生成 elf 文件