Android:如何将 Instrumentation APK 安装到无头主机中的 AVD 上
Posted
技术标签:
【中文标题】Android:如何将 Instrumentation APK 安装到无头主机中的 AVD 上【英文标题】:Android: How to Install the Instrumentation APK onto an AVD in a Headless Host 【发布时间】:2011-07-07 11:17:46 【问题描述】:我正在尝试将 android JUnit 测试与我们的 Bamboo Ant 构建集成。我已经在本地测试了设置,并且能够运行测试。
但是当我在我们的 Bamboo 服务器中尝试相同的设置时,运行测试时出现以下错误:
INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfocom.synapticstuff.guitartabs/pl.polidea.instrumentation.PolideaInstrumentationTestRunner
INSTRUMENTATION_STATUS_CODE: -1
android.util.AndroidException: INSTRUMENTATION_FAILED: com.synapticstuff.guitartabs/pl.polidea.instrumentation.PolideaInstrumentationTestRunner
请注意,我为 Instrumentation 使用了一个自定义库 (http://code.google.com/p/the-missing-android-xml-junit-test-runner/),以便我可以提取 JUNit xml 测试结果并将其提供给 Bamboo。
另外,用于创建构建的构建代理是一个 Ubuntu 虚拟机,它没有任何 GUI,所以我需要通过命令行完成所有操作。 AVD 已在该 VM 上运行。
当我第一次在本地运行adb shell am instrument .. <snip>
命令时,我确实遇到了同样的问题,我发现它在从 Eclipse 运行测试后工作起来很奇怪。
查找错误日志,Android Instrumentation Framework 文章告诉我
“有可能 仪器 apk 未安装在 您的设备或包裹名称 清单文件中不正确。”
所以一定是没有安装instrumentation apk。
那么,我如何将仪器 apk 安装到 AVD 上?
谢谢!
【问题讨论】:
【参考方案1】:可能有多种情况会导致此错误,但我是因为没有在模拟器上安装测试包的检测版本而得到它。文档有点少,但我认为您没有安装到模拟器上的“仪器 APK”(至少我找不到这样的东西);您构建包含仪器的测试应用程序。无论如何,这就是我使用 ant 从命令行运行测试的方式,现在可以使用:
ant instrument install test
这也适用于使用 Android 模拟器插件 (https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin) 在 Jenkins 上运行。我在这里的命令行构建文档中找到了仪器任务:http://developer.android.com/tools/building/building-cmdline.html。
【讨论】:
【参考方案2】:还有一个可能的原因:Manifest 文件中的包名不正确。
首先检查单元测试项目清单文件中的包名称!
【讨论】:
【参考方案3】:我也是少数几个下载了自定义 InstrumentationTestRunner (http://code.google.com/p/the-missing-android-xml-junit-test-runner/) 的人之一,我目前正被这个问题困扰!我收到相同的错误消息,不幸的是我现在不知道答案,但是当我发现有用的东西时会更新。 与此同时,我也在寻找其他选项,例如此人的 Test Runner:http://www.alittlemadness.com/2010/07/14/android-testing-xml-reports-for-continuous-integration/
还有一个关于持续集成的讨论:How to Generate Android Testing Report in HTML Automatically
【讨论】:
【参考方案4】:如果您添加到构建脚本中,您也许可以解决这个问题:
adb install -r testproject/bin/testproject.apk
首先检查 apk 文件是如何命名的,因为我仍然没有弄清楚 ant 究竟是如何做到这一点的,但它通常是在 bin 目录中创建的。
另请参阅官方 android 文档。
【讨论】:
【参考方案5】:我在对旧的 Android 1.5 虚拟设备运行测试时遇到了这个问题。切换到 2.3.3 虚拟设备后,问题就消失了。我不知道问题是由于虚拟设备操作系统太旧还是使用旧的 Android SDK 工具创建的虚拟设备。
【讨论】:
【参考方案6】:我在 Bamboo 下运行 android 版本时遇到了完全相同的问题。我发现由于某种原因,我的测试项目清单中的 android:targetPackage
元素不正确。它被设置为我的主项目的包,而不是测试项目。出于某种原因,在eclipse中运行测试时运行一切正常,但是当我尝试在命令行运行ant测试时它就死了。仪表仪表标签读取:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.blah" />
这是在我创建项目时由 eclipse 自动生成的。我把它改成了:
<instrumentation
android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.example.blah.test" />
突然一切都正常了。
【讨论】:
以上是关于Android:如何将 Instrumentation APK 安装到无头主机中的 AVD 上的主要内容,如果未能解决你的问题,请参考以下文章
“如何”将 Android 应用程序(Facebook 等)安装到 Android 手机? [关闭]