现在,借助咱们事后构建好的 Android 模拟器容器,在继续集成和交付零碎 (CI/CD) 上设置以及运行 Android 模拟器比以往任何时候都容易。这些容器能够让您轻松找到并运行正确版本的模拟器,而不用再因为依赖治理而头疼。其同时也让继续集成和交付零碎减少自动化测试变得更为简略,而且不必放心保护大量实体设施所产生的花销。
去年的早些时候,咱们公布了 Android 模拟器下载以及 Docker 镜像生成的脚本 来帮忙开发者部署和调试近程模拟器。这些脚本简化了寻找正确版本的零碎镜像、管理系统依赖以及运行 Android 模拟器的流程。
现在,咱们决定更进一步,来实验性地为每一个重大模拟器更新公布提供事后构建好的 Android 模拟器容器。这些容器不再须要您手动地运行生成器,既节省时间,也升高了复杂度。不必放心,这些事后构建好的容器仍然反对用 Docker 脚本构建的容器的所有性能,比方 adb 和 web 可拜访性。
想要运行这些容器,Linux KVM 是必须的,能够通过在裸机或者反对嵌套虚拟化的虚拟机上运行来启动 Linux KVM。抉择哪种形式取决于您的云计算提供商,请参阅咱们的 文档 获取倡议。
以下脚本阐明了如何将 Android 模拟器容器集成到您的零碎中,并且应用其运行测试。
#!/bin/bash
# 这个是咱们将要运行的近程镜像
# 如果须要,Docker 会帮咱们获取该镜像
DOCKER_IMAGE=us-docker.pkg.dev/android-emulator-268719/images/r-google-x64:30.0.23
# 这个是转发端口。最好选用高位端口,这样就不会烦扰到 adb 扫描模拟器。PORT=15555
# 这里会在后盾启动容器
container_id=$(docker run -d \
-e "ADBKEY=$(cat ~/.android/adbkey)" --device /dev/kvm --publish \
8554:8554/tcp --publish $PORT:5555/tcp \
$DOCKER_IMAGE)
echo "The container is running with id: $container_id"
# 留神,您可能会碰到如下信息:# failed to connect to localhost: 15555
# 这只不过表明容器还没有筹备好
echo "Connecting to forwarded adb port."
adb connect localhost:$PORT
# 咱们不得不等到 `docker ps` 显示为失常。# 这一过程可能须要一段时间因为模拟器须要齐全启动!echo "Waiting until the device is ready"
adb wait-for-device
# 当初这个设施正在启动,或者靠近启动实现。# 咱们只等 sys.boot_completed 的值被设置为 1。while ["`adb shell getprop sys.boot_completed | tr -d'\r'`" != "1"] ;
do
echo "Still waiting for boot.."
sleep 1;
done
# 当初你能够失常地应用模拟器了,举个例子:# ./gradlew installDebug
# ./gradlew connectedAndroidTest
# 等等
echo "The device is ready"
echo "Run the following command to stop the container:"
echo "docker stop ${container_id}"
Android 模拟器容器的镜像拉取、运行以及端口转发的示例脚本
想要理解更多对于 Android 模拟器容器的信息,请查阅 README。这是咱们首次提供事后构建好的模拟器容器,所以如果您在应用的过程中发现任何问题或性能申请,请通过 issue tracker 告知咱们。