news 2026/9/11 15:32:24

一条命令在 Docker 容器里跑起 Android 模拟器:从本地启动到 CI 集成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一条命令在 Docker 容器里跑起 Android 模拟器:从本地启动到 CI 集成

一条命令在 Docker 容器里跑起 Android 模拟器:从本地启动到 CI 集成

【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android

想在 Docker 容器里运行 Android 模拟器做自动化测试吗?Docker-Android 把完整的 Android 模拟器环境打包成容器镜像,内置 noVNC 可视化、视频录制与 MCP server,一条docker run命令就能拉起三星、Nexus 等机型的模拟器,并支持 KVM 硬件加速。

二、启动之前:30 秒自检你的环境

容器化的模拟器能否流畅运行,取决于宿主机是否具备 KVM 硬件虚拟化。花 30 秒过一遍下面这份清单,后面能少走很多弯路 🛠️

检查项一条命令通过标准
Docker 已安装docker --version输出版本号
KVM 硬件虚拟化已启用sudo apt install cpu-checker && kvm-ok提示可使用 KVM 加速
KVM 模块已加载lsmod \| grep kvm出现kvm相关模块
当前用户有 KVM 权限groups \| grep kvm用户在kvm组内

提示:macOS 和 Windows 用户无法直接运行该镜像,需要先装一个支持虚拟化的 Ubuntu 虚拟机。

三、一条命令启动 Android 11 容器

环境就绪后,启动一个三星 Galaxy S10 的 Android 11 模拟器,只需要这一条命令:

docker run -d -p 6080:6080 \ -e EMULATOR_DEVICE="Samsung Galaxy S10" \ -e WEB_VNC=true \ --device /dev/kvm \ --name android-container \ budtmo/docker-android:emulator_11.0

关键点拆开看:

  • --device /dev/kvm:把宿主机的 KVM 设备透传进容器,模拟器才跑得快
  • -e EMULATOR_DEVICE:指定设备画像,可选机型涵盖 Samsung Galaxy S6~S10、Nexus 4/5/7、Pixel C 等
  • -e WEB_VNC=true:开启 Web 界面,随时看容器里的"屏幕"

启动后做两件事:

  1. 浏览器打开http://localhost:6080,即可实时查看容器内模拟器的界面
  2. 用下面的命令确认模拟器是否就绪:
docker exec -it android-container cat device_status

镜像版本从 Android 9 到 14 都有对应 tag(如emulator_11.0),按需选择即可。

四、容器里能干什么:三个真实场景

场景一:Appium 自动化测试

在容器内直接内嵌了 Appium 服务,只需多开一个端口、多传一个环境变量,测试框架就能对着模拟器跑用例:

docker run -d -p 6080:6080 -p 4723:4723 \ -e EMULATOR_DEVICE="Samsung Galaxy S10" \ -e WEB_VNC=true -e APPIUM=true \ --device /dev/kvm --name android-container \ budtmo/docker-android:emulator_11.0

测试过程中想"肉眼看"模拟器在干什么?通过 noVNC(6080 端口)打开网页即可;Appium 服务需要额外参数时,用APPIUM_ADDITIONAL_ARGS环境变量透传。详见 Appium 用例文档。

场景二:模拟短信,验证应用的短信处理逻辑

很多 App 依赖验证码短信做登录验证,没有真机也能测。一条adb emu命令就能给容器内的模拟器"发"一条短信:

docker exec -it android-container adb emu sms send 12345678 "测试消息"

发送后在 Web 界面里就能看到短信落在系统消息应用中,完整流程见 SMS 模拟文档:

场景三:接入 CI/CD 与云端部署

模拟器的"身体"在容器里,"神经"却可以伸到外面。只需在docker run时多映射 5554/5555 两个端口,宿主机上的 ADB 就能像操作本地设备一样操作容器内的模拟器:

adb connect <容器IP>:5555

这样 Jenkins 流水线里就能直接编排"启动容器 → adb 连入 → 执行测试 → 销毁容器"的完整闭环,见 Jenkins 集成文档。同样的玩法也适用于 AWS、Azure、GCP 等云平台,按需弹性伸缩 Android 测试环境,方案见 云端部署文档:

五、让模拟器数据活过容器重启

默认行为是"容器销毁,数据陪葬":重启容器后,装过的 App、登录的状态全部清零。想让数据活下来,挂载一个卷到/home/androidusr即可:

docker run -v android_data:/home/androidusr budtmo/docker-android:emulator_11.0

从此容器怎么重启、重建,设备数据都原样保留,测试环境的状态可以长期积累。

六、调优与排障速查

现象:容器起不来,提示 KVM 不可用

  • 排查:lsmod | grep kvm看模块、kvm-ok看硬件支持
  • 解法:内核未加载kvm模块时先加载;用户不在kvm组时执行sudo usermod -a -G kvm $USER后重新登录会话

现象:外部 ADB 连不进容器里的模拟器

  • 排查:确认启动时是否映射了-p 5554:5554 -p 5555:5555
  • 解法:补上端口映射重启容器,再执行adb connect <容器IP>:5555,参考 远程控制文档

现象:模拟器卡顿、资源占用高

  • 排查:看当前EMULATOR_DEVICE选的是什么画像、容器分到多少内存
  • 解法:换成 Nexus 5 这类轻量机型画像;用--cpus-m限制资源;不需要显示画面时可了解无头模式(Pro 版特性)

现象:想改设备名、数据分区大小、Appium 参数

  • 排查:查环境变量支持列表
  • 解法:EMULATOR_NAME改模拟器名,EMULATOR_DATA_PARTITION调数据分区,APPIUM_ADDITIONAL_ARGS传 Appium 参数,完整清单见 自定义配置文档

七、把 Android 测试环境变成"即插即用"

Docker-Android 的核心价值一句话:一条docker run,换来一台带 KVM 加速、可随时远程操控的 Android 模拟器,本地、CI、云端三处环境完全一致。

如果本文对你有帮助,可以直接把项目拉到本地体验:

git clone https://gitcode.com/GitHub_Trending/do/docker-android

现在就挑一台机型,跑通你的第一条命令吧 🚀

【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 15:30:47

RAG生产级调优:多路召回与Rerank协同提效实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 15:29:54

AI写专著高效之道:选对工具,轻松实现20万字专著的高质量撰写!

对于很多学者来说&#xff0c;写一本学术专著绝不是一时灵光一现&#xff0c;它更像是一场需要坚持多年的漫长战役。从挑选题目开始&#xff0c;到设计严密的章节结构&#xff0c;再到一点一点填充内容&#xff0c;核对文献&#xff0c;每个步骤都让人头疼。研究者们常常要利用…

作者头像 李华
网站建设 2026/9/11 15:23:59

ARM ML-KWS-for-MCU源码级静态评测:MCU语音唤醒与CMSIS-NN部署实战

最近在评估一批能在Cortex-M级别设备上跑的边缘AI方案&#xff0c;把ARM开源的ML-KWS-for-MCU整个拉下来做了一次源码级静态评测。这个项目在语音唤醒这个细分方向上是绕不开的参考实现&#xff1a;它用TensorFlow Lite Micro当推理引擎&#xff0c;用CMSIS-NN做内核加速&#…

作者头像 李华