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 图像导入 SDK?

“如何”将 Android 应用程序(Facebook 等)安装到 Android 手机? [关闭]

如何将 Eclipse 中的 android 项目导入 Android Studio?

如何将底部菜单添加到 Android 活动

我将如何下载 *** android 数据集?