在Docker中的Android模拟器上运行AndroidTest

时间:2019-06-17 20:47:19

标签: android docker android-emulator continuous-integration

我看到了一些有关在Docker中运行AndroidTest的链接和帖子。喜欢:

https://dzone.com/articles/running-android-tests-in-docker

https://github.com/ksoichiro/android-tests/tree/master/docker-emulator

还有更多。但是,它们似乎都不适合CI中的AndroidTest,因为它们需要实际的VM,或者仅仅是它们太旧了。

我尝试了以下几行Docker Image(部分):

RUN /opt/adk/tools/bin/sdkmanager "emulator" "build-tools;${BUILD_TOOLS}" "platforms;${ANDROID_PLATFORM}" "system-images;${ANDROID_PLATFORM};google_apis;armeabi-v7a" \
    && echo no | /opt/adk/tools/bin/avdmanager create avd -n "Android" -k "system-images;${ANDROID_PLATFORM};google_apis;armeabi-v7a" \

然后我使用以下命令运行模拟器:

/opt/adk/emulator/emulator @Android -writable-system -nocache -no-snapstorage &

但是,在尝试运行connectedAndroidTest时,存在一些奇怪的异常,例如: Caused by: com.android.ddmlib.InstallException: Unknown failure: Error: Could not access the Package Manager. Is the system running?

或者,如果我尝试手动安装测试APK,然后运行am instrumentandroid.util.AndroidException: Can't connect to activity manager; is the system running?

所以我的问题是:是否有人在模拟器上运行AndroidTest作为Docker上CI的一部分?就是说,仅需要挂载项目并运行gradle connectedAndroidTest的映像,一切正常吗?有一个可行的例子吗?

1 个答案:

答案 0 :(得分:1)

我使用以下镜像在模拟器上运行AndroidTest作为docker上CI的一部分:https://hub.docker.com/r/chrisss404/android-emulator

您可能会遇到的问题是,由于缺少嵌套的KVM,主机上的硬件加速不可用(只是一个猜测,但这就是我面临的问题)。在这种情况下,您必须使用软件渲染,这会花费大量时间。

通过软件渲染,启动大约需要40分钟,直到模拟器可用(在我的主机上)。但是,您可以在可接受的时间范围内照常运行仪器测试。