如何用Docker跑Android模拟器:docker-android实战(含3个关键启动参数)
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
CI服务器上一台台手工装Android SDK、折腾虚拟化配置、模拟器坏掉重来的日子,你受够了吗?docker-android 把整套Android模拟器打成了一个现成的Docker镜像:一条命令起一台可用设备,自带Web VNC看屏幕,Appium和宿主机ADB都能直接连。读完这篇,你能在自己的机器上把容器化的Android测试环境跑起来,并跑通一轮UI自动化。
快速上手:一条命令启动Android 11模拟器容器 🐳
这一节解决"最小代价跑起来"的问题。先确认两个前提:宿主机装了Docker,CPU开启了硬件虚拟化(KVM)。可以用kvm-ok命令检查。注意:镜像只能在Ubuntu环境下运行,macOS或Windows用户需要先开一台带虚拟化的Ubuntu虚拟机。
启动的核心就是下面这条命令:EMULATOR_DEVICE决定机型,WEB_VNC开启网页观看,6080是页面端口:
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跑完后打开http://localhost:6080就能看到容器内设备画面,用docker exec -it android-container cat device_status可查启动状态。
镜像标签从emulator_9.0到emulator_14.0,想测Android 14就换用emulator_14.0。官方用户统计里Android 11的占比最高(约67.7%),新项目选它不会错。
图1:docker-android官方用户行为统计,Android 11是使用占比最高的版本
机型上,EMULATOR_DEVICE可以传三星Galaxy S6/S7/S10、Nexus 4/7等名字,对应的profile配置放在设备配置目录,镜像里自带的S10皮肤长这样:
图2:docker-android内置的三星Galaxy S10设备皮肤,通过EMULATOR_DEVICE参数选用
验证点:浏览器6080页面能看到S10开机画面,device_status显示设备在运行。
用Web VNC看模拟器画面并发短信
这一节回答:容器里的模拟器怎么"看"、怎么"操作"。WEB_VNC=true后容器在6080端口暴露noVNC,浏览器直接看,不用装客户端;只想旁观不操作就在URL后加?view_only=true,要加密码就配VNC_PASSWORD变量,细节见自定义配置文档。
短信验证是常见测试场景,可以直接在命令行给模拟器发一条:
docker exec -it android-container adb emu sms send 12345678 "hello bud1"发送后消息会出现在模拟器的Messages应用里,6080页面上直接可见。
图3:docker-android的Web VNC界面,宿主通过adb发来的短信测试已送达三星Galaxy S6
验证点:网页上能看到新收到的短信。
接入Appium,在容器上跑UI自动化测试 ⚙️
这一节解决UI自动化问题。docker-android可以在容器内直接起Appium服务器:启动时额外映射端口4723并加环境变量APPIUM=true,之后用本地Appium客户端通过http://localhost:4723/wd/hub驱动容器里的模拟器即可。需要给Appium服务器传参就用APPIUM_ADDITIONAL_ARGS;Appium 2.x还能直接挂进Selenium Grid 4.x,容器本身不用做任何修改。
验证点:浏览器打开4723能看到Appium状态页,测试脚本正常创建session。
进阶:数据持久化、宿主机ADB接入与Jenkins集成
默认情况下,容器重启会销毁模拟设备。想保留已装应用和数据,启动时把卷挂到/home/androidusr即可(docker run -v data:/home/androidusr ...)。
想让宿主机ADB直接操作容器而不是走docker exec,映射端口5554和5555,然后在宿主机执行adb connect <容器IP>:5555。
CI场景可以参考Jenkins用例文档把模拟器接进流水线;不想自己维护机器或需要更多机型时,项目还集成了Genymotion Cloud,详见THIRD_PARTY_GENYMOTION.md。
避坑FAQ 💡
- 模拟器起不来、报KVM相关错误:先跑
kvm-ok确认虚拟化开启,镜像依赖宿主机的/dev/kvm(即命令里的--device /dev/kvm)。 - macOS/Windows上跑不了:镜像只能在Ubuntu里运行,请先开Ubuntu虚拟机再跑Docker。
- 重启容器后装的应用没了:没挂
/home/androidusr数据卷属于正常行为,补上-v参数。 - 端口号记混:6080是Web VNC页面,4723是Appium,5555是ADB。
docker-android 把"模拟器+虚拟化环境+测试依赖"压缩成一条命令能拉起的镜像,特别适合需要稳定、可复现Android测试环境的CI机器。跑通本文流程后,下一步可以把Appium用例接进Jenkins,多开几个不同Android版本的容器做并行验证。
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考