3条命令跑起一个Android容器:Docker-Android实战笔记
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
周五下午,演示环境的Android模拟器又挂了。重装系统镜像、等SDK同步、再对着KVM模块报错发呆,而demo明天就要演示。后来我把这套环境挪进了Docker-Android:一个把Android模拟器打进镜像的容器方案,内置noVNC网页界面,拉起来开浏览器就能看屏幕,device_status文件随时告诉你模拟器起没起来。
一句话概括它是什么:Docker-Android把Android模拟器、设备皮肤、noVNC服务全装进一个Docker镜像,镜像标签从Android 9排到Android 14,你只需要一台开KVM的Linux机器。容器跑在什么宿主机上,模拟器就长什么样,"在我机器上能跑"不再依赖具体那台机器。
先确认你的机器能不能跑
先花10秒确认门槛,省得后面白折腾。它只支持Ubuntu主机(macOS/Windows得套一层Ubuntu虚机),所以虚拟化检查是硬指标:
| 门槛 | 要求 | 确认方式 |
|---|---|---|
| CPU虚拟化 | 开启Intel VT-x或AMD-V | kvm-ok返回"OK" |
| 用户权限 | 当前用户在kvm组 | ls -l /dev/kvm权限可读写 |
| 磁盘空间 | 系统镜像+模拟器数据,预留10GB以上 | 镜像标签覆盖Android 9-14 |
一条线跑起来
确认完之后你依次做三件事:拉镜像、起容器、看状态。
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。第一次启动要多等几分钟,因为容器要下载对应版本的Android系统镜像,之后你会在网页里看到一部手机从开机画面走到桌面——那就是容器里正在跑的真模拟器,不是截图。确认它就绪的办法是docker exec -it android-container cat device_status,看到boot completed或者adb显示device就算起来了。想换Android版本,把标签里的emulator_11.0换成emulator_14.0就行,其余不动。
跑起来之后能干什么
按你要做的测试分三类,每类都对应仓库里的一个场景文档。
兼容性回归:同一批用例,分别对着S10、Nexus 5、Nexus 7起三个容器,设备用EMULATOR_DEVICE指定。UI改动会不会撑爆7寸平板的布局,跑完矩阵自然见分晓。
系统能力模拟:不想手动点开发者选项,就直接adb emu sms send 12345678 "测试消息"往模拟器里灌一条短信,验证应用的收信逻辑。要挂Appium的话,起容器时多开4723端口并传APPIUM=true,Appium Server和模拟器在同一个容器里。
CI流水线集成:在Jenkins里把容器当作一个测试阶段,docker run起容器、跑用例、退出。每次构建拿到的都是全新设备状态,没有上个构建留下的应用和缓存;想留人肉看屏的口子,把6080也映射出来。
从Demo到长期稳定跑
如果你打算把它挂进Jenkins跑一个月,有三件事要提前定下来。
默认行为是容器重启后设备状态销毁,挂卷就能保住:-v android_data:/home/androidusr,之后装过应用、写过的数据都还在。分区大小默认550MB,装应用多了会撑爆,用EMULATOR_DATA_PARTITION=2g调大。ADB要跨机连的话,起容器时映射5554和5555端口,宿主机adb connect <容器IP>:5555即可。资源分配上,给容器限2核CPU、4G内存起步,模拟器流畅度基本够用。
踩坑速查
- 症状:容器起不来,报
/dev/kvm: permission denied→原因:当前用户不在kvm组 →修法:sudo usermod -aG kvm $USER,登出重登。 - 症状:宿主机
adb connect超时 →原因:起容器时没映射5554/5555 →修法:补上-p 5554:5554 -p 5555:5555重新起。 - 症状:装应用报存储空间不足,或重启后数据全没 →原因:没挂卷、默认数据分区太小 →修法:加
-v xxx:/home/androidusr并调大EMULATOR_DATA_PARTITION。
更细的环境变量(比如noVNC加密码、只读模式)都在 documentations/ 里,按场景分成了独立文档。
收尾
Docker-Android的价值就是把"起一台Android设备"从半小时压缩成一条docker run。下一步:翻一下仓库里mixins/configs/devices/profiles/下的设备皮肤配置,挑一台你项目真正要测的机型。
【免费下载链接】docker-androidAndroid in docker solution with noVNC supported, video recording and mcp server项目地址: https://gitcode.com/GitHub_Trending/do/docker-android
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考