我设置了 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/