在 Docker 中运行 Android 模拟器上的 Android 测试

4

我看到了一些关于在Docker中运行AndroidTest的链接和帖子,例如:

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

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

还有其他一些。然而,它们似乎都不适用于CI中的AndroidTest,因为它们需要一个实际的虚拟机,或者它们太旧了。

我尝试了以下行命令(Docker镜像部分):

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?

所以我的问题是:有人在docker的CI中作为一部分在模拟器上运行AndroidTest吗?这意味着你只需要挂载你的项目并运行gradle connectedAndroidTest,一切正常。是否有一个可用的示例?


我们的CI运行在AWS上。如果有人感兴趣,我们想要调查的解决方案是使用Genymotion AWS镜像,在其上运行androidTest。(https://aws.amazon.com/marketplace/pp/Genymobile-Inc-Genymotion-Cloud-Android-60-marshma/B01MREUQPU) - ElyashivLavi
1个回答

1
我在使用此镜像https://hub.docker.com/r/chrisss404/android-emulator作为CI的一部分,在模拟器上运行AndroidTest。
你可能会遇到的问题是,由于缺少嵌套KVM(仅是猜测,但这就是我面临的问题),因此主机上无法使用硬件加速。在这种情况下,您必须使用软件渲染,这可能需要相当长的时间。
使用软件渲染,启动大约需要40分钟,直到模拟器可用(在我的主机上)。但是,之后您可以像通常一样在可接受的时间范围内运行测试。

谢谢!你是在本地运行还是在 AWS 上运行?听起来好像 Docker 一直在运行,而且你在 CI 过程中没有启动它,是吗? - ElyashivLavi
1
我并没有在本地或AWS上运行它,而是在来自Hetzner(CX21)的VPS上运行。是的,你说得对,容器始终在运行,并且不会在CI构建作业期间启动。 - Christian Hofer
@ChristianHofer:我的容器在Mac上自动退出了30秒。你的意思是,我应该在40分钟后再次尝试运行容器吗? - Saurabh Shrivastava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接