我看到了一些有关在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 instrument
:
android.util.AndroidException: Can't connect to activity manager; is the system running?
所以我的问题是:是否有人在模拟器上运行AndroidTest作为Docker上CI的一部分?就是说,仅需要挂载项目并运行gradle connectedAndroidTest
的映像,一切正常吗?有一个可行的例子吗?
答案 0 :(得分:1)
我使用以下镜像在模拟器上运行AndroidTest作为docker上CI的一部分:https://hub.docker.com/r/chrisss404/android-emulator
您可能会遇到的问题是,由于缺少嵌套的KVM,主机上的硬件加速不可用(只是一个猜测,但这就是我面临的问题)。在这种情况下,您必须使用软件渲染,这会花费大量时间。
通过软件渲染,启动大约需要40分钟,直到模拟器可用(在我的主机上)。但是,您可以在可接受的时间范围内照常运行仪器测试。