Android: How to Install the Instrumentation APK onto an AVD in a Headless Host

Shane Oliver picture Shane Oliver · Jul 7, 2011 · Viewed 8.5k times · Source

I'm trying to integrate Android JUnit tests with our Bamboo Ant builds. I've already tested the setup locally, and I'm able to run tests.

But when I tried the same setup in our Bamboo server, I get the following error when running the tests:

INSTRUMENTATION_STATUS: id=ActivityManagerService
INSTRUMENTATION_STATUS: Error=Unable to find instrumentation info for: ComponentInfo{com.synapticstuff.guitartabs/pl.polidea.instrumentation.PolideaInstrumentationTestRunner}
INSTRUMENTATION_STATUS_CODE: -1
android.util.AndroidException: INSTRUMENTATION_FAILED: com.synapticstuff.guitartabs/pl.polidea.instrumentation.PolideaInstrumentationTestRunner

Note that I used a custom library for Instrumentation (http://code.google.com/p/the-missing-android-xml-junit-test-runner/), so that I can pull the JUNit xml test results and feed it to Bamboo.

Also, the build agent used in creating the build is an Ubuntu VM, which doesn't have any GUI so I need to do everything via command line. An AVD is already running on that VM.

I did encounter the same problem when I first ran the adb shell am instrument .. <snip> command locally, and I found it weird it worked after running the test from Eclipse.

Looking up the error log, the Android Instrumentation Framework article tells me that

"It's possible that the instrumentation apk isn't installed on your device or that the package name is incorrect in the Manifest file."

so it must be that the instrumentation apk isn't installed.

So, how do I install the instrumentation apk onto the AVD?

Thanks!

Answer

Daniel picture Daniel · Feb 8, 2013

There are probably multiple situations that can cause this error, but I got it from not having an instrumented version of the test package installed on the emulator. Documentation is a bit scant, but I don't think there's an "instrumentation APK" that you install onto the emulator (at least I couldn't find such a thing); you build your test application with instrumentation included. Anyway, this is how I run tests from the command line using ant, which now works:

ant instrument install test

and this also works running on Jenkins using the Android emulator plugin (https://wiki.jenkins-ci.org/display/JENKINS/Android+Emulator+Plugin). I found the instrument task in the command line build documentation here: http://developer.android.com/tools/building/building-cmdline.html.