找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1788

积分

0

好友

241

主题
发表于 2026-1-2 22:20:00 | 查看: 31| 回复: 0
本帖最后由 云栈运维云原生 于 2026-1-2 22:27 编辑

做移动端运维或者测试开发的兄弟,估计都遭过这种罪:业务方催着要一套自动化测试环境,你哼哧哼哧找台物理机,装 Android Studio,配 SDK,折腾半天。好不容易跑通了,过两天开发改了 Gradle 版本,或者谁手欠动了下环境,整个测试集群直接趴窝。

这种“手工作坊”的日子我是过够了。为了解决环境一致性问题,云栈社区 最近在内部落地了一套基于 Docker 的方案。今天就把这个开源项目 docker-android 拿出来说道说道,教大家怎么像管微服务一样,把 Android 模拟器也塞进容器里。

icon.png

一、 咱们为啥非要容器化?

在传统的 Android / iOS 开发流程里,环境就是个玄学。开发用 Mac,测试用 Windows,CI 跑在 Linux 虚拟机上。代码在开发机上跑得好好的,一上流水线就报错,这种锅背得太冤。

而且,为了跑自动化测试专门养几台高性能物理机,成本属实有点高。我们需要的是一种能按需启动、用完即焚,且环境绝对纯净的方案。

二、 核心利器:docker-android

GitHub 上有不少类似的镜像,但 HQarroum/docker-android 是我目前用下来最顺手的一个。

它不是简单地把模拟器塞进 Ubuntu,而是基于 Alpine Linux 构建的。懂行的都知道,Alpine 意味着极致的轻量和安全。它解决了最让运维头疼的三个问题:

  1. 体积小:基础镜像小,拉取快。
  2. 性能猛:支持 KVM 硬件直通。这点太关键了,没有 KVM 的模拟器就是幻灯片,有了 KVM,容器里的模拟器速度能接近真机。
  3. 全自动:容器一启动,自动创建 AVD(虚拟设备)并把 ADB 端口暴露出来,完美契合 云原生 / IaaS 的弹性伸缩需求。

三、 动手实战(含避坑点)

1. 关键前置条件

别急着 docker run,先看你的宿主机(Linux)支不支持 KVM。这是硬指标,不支持就别折腾了,卡到你怀疑人生。

# 运行这个命令,如果有输出内容,说明稳了
ls -al /dev/kvm

2. 启动容器

这里有个坑,必须加 --privileged--device /dev/kvm,否则容器拿不到硬件权限。

下面这个命令会启动一个 Android 13 (API 33) 的模拟器:

docker run -d \
  --privileged \
  --device /dev/kvm \
  -p 5555:5555 \
  -e API_LEVEL=33 \
  -e ARCHITECTURE=x86_64 \
  --name android-container \
  hqarroum/docker-android

3. 远程连接

容器跑起来后,ADB 服务会监听 5555 端口。你在任何一台装了 ADB 的机器上都能连它:

# 连它!
adb connect <宿主机IP>:5555

# 连上之后,该跑脚本跑脚本,该装包装包
./gradlew connectedAndroidTest

ScreenShot_2026-01-02_221936_769.png

四、 进阶:扔进 Jenkins 流水线

云栈社区( https://yunpan.plus 的生产环境里,我们肯定不会手动去敲命令。最爽的玩法是结合 Jenkins 或 GitLab CI。

利用 Docker 的特性,每次构建开始时拉起一个全新的模拟器,测试跑完直接销毁容器。这才是标准的 运维 / DevOps / SRE 最佳实践,彻底杜绝了“环境污染”导致的测试不准。

// Jenkinsfile 参考写法
stage('Test on Android') {
    agent {
        docker { 
            image 'hqarroum/docker-android:latest' 
            // 这一行千万别漏,漏了就跑不起来
            args '--privileged --device /dev/kvm'
        }
    }
    steps {
        // 等待模拟器这就绪的逻辑建议加上
        sh 'adb connect localhost:5555'
        sh 'npm run appium-test'
    }
}

五、 几句掏心窝子的建议

  1. 内存要给够:Android 模拟器是吃内存大户,别抠搜的。每个容器建议预留 4GB 以上内存,不然 OOM 杀进程的时候别哭。
  2. 云服务器选型:如果你是在阿里云或 AWS 上跑,普通的 ECS/EC2 实例通常是不支持嵌套虚拟化的(也就是虚拟机里跑虚拟机)。你得买“裸金属”实例,或者专门支持嵌套虚拟化的机型,买之前先看文档。
  3. 安全问题:5555 端口开了就是裸奔,内网跑跑行,千万别暴露在公网,否则谁都能连上来给你装个全家桶。

配套资源

🔗 项目仓库:https://github.com/HQarroum/docker-android
🔗 Android 底层开发:https://yunpan.plus/t/341
🔗 Linux 系统运维:https://yunpan.plus/f/33


关注「云栈运维云原生」,每天聊点实用的技术干货。

标签:#docker-android #Github #DevOps #自动化测试 #容器化

来自圈子: 云栈运维云原生



上一篇:Java 工程师 19 阶段全栈学习路径图:基础到就业
下一篇:Python进阶首选:爬虫 JS WEB APP逆向 从零破解百度指数、有道翻译等企业级案例
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-10 09:04 , Processed in 0.345509 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表