使用 Android 模拟器容器来实现持续集成测试

使用 Android 模拟器容器来实现持续集成测试

如今,借助我们预先构建好的 Android 模拟器容器,在持续集成和交付系统 (CI/CD) 上设置以及运行 Android 模拟器比以往任何时候都容易。这些容器可以让您轻松找到并运行正确版本的模拟器,而不必再因为依赖管理而头疼。其同时也让持续集成和交付系统增加自动化测试变得更为简单,而且不用担心维护大量实体设备所产生的花销。

去年的早些时候,我们发布了 Android 模拟器下载以及 Docker 镜像生成的脚本 来帮助开发者部署和调试远程模拟器。这些脚本简化了寻找正确版本的系统镜像、管理系统依赖以及运行 Android 模拟器的流程。

如今,我们决定更进一步,来实验性地为每一个重大模拟器更新发布提供预先构建好的 Android 模拟器容器。这些容器不再需要您手动地运行生成器,既节省时间,也降低了复杂度。不用担心,这些预先构建好的容器依然支持用 Docker 脚本构建的容器的所有功能,比如 adbweb 可访问性。

想要运行这些容器,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 告知我们。

版权声明

禁止一切形式的转载-禁止商用-禁止衍生 申请授权

脉脉不得语
脉脉不得语
Zhengzhou Website
Android Developer | https://androiddevtools.cn and https://androidweekly.io WebMaster | GDG Zhengzhou Funder & Ex Organizer | http://Toast.show(∞) Podcast Host

你已经成功订阅到 Android 开发技术周报
太棒了!接下来,完成检验以获得全部访问权限 Android 开发技术周报
欢迎回来!你已经成功登录了。
Unable to sign you in. Please try again.
成功!您的帐户已完全激活,您现在可以访问所有内容。
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.