传统 x86 服务器跑云手机需要 QEMU 指令转译,性能损耗大。本文分享在 ARM64 服务器上基于 Redroid 部署原生安卓容器云手机完整教程,无指令转译,性能更优,适合 APP 自动化、兼容性测试。文末对比自建方案与商业云手机差异,顺带聊聊六边云手机的技术思路。
很多开发者、测试同学在做 APP 自动化、安卓兼容性测试时,会使用云手机。市面上大量云手机底层跑在 x86 服务器上,依靠 QEMU 做 ARM 指令转译,中间层开销大,帧率低、延迟高,CPU 占用高。
Android 系统本身原生就是 ARM 架构,如果直接使用 ARM 服务器部署安卓容器,代码不需要跨架构翻译,指令直接原生执行,消除指令转译损耗,CPU 开销下降、画面延迟更低,这也是 ARM 云手机方案最大优势。
开源方案我们选用 Redroid(Remote Android),基于 Docker 容器化运行 Android,轻量、可批量扩实例,适合技术人员自己动手搭建测试环境。
⚠️ 重要声明:本文仅用于技术学习、APP 自动化测试、应用兼容性验证,禁止用于违规脚本、批量营销、游戏外挂等违反用户协议与法律法规场景;自建环境需要遵守服务器服务商规则。
一、方案原理
- x86 服务器云手机:APP ARM 指令 → QEMU 转译 → x86 指令执行,多层转换,性能折损明显
- ARM64 服务器原生云手机:ARM 指令直接在 ARM CPU 执行,无转译层,减少中间开销,图形渲染、ADB 操作响应更快
目前商用云手机厂商,有一部分产品也是基于 ARM 底层架构开发。六边云手机就是采用原生 ARM 架构路线,底层规避 x86 转译带来的性能瓶颈,面向批量安卓实例场景做了调度优化,和本文自建 Redroid 的底层思路相通。自建适合技术玩家动手研究,商用产品适合不想维护底层、需要稳定长时间在线的用户。
二、硬件 & 环境准备
硬件要求
ARM64 服务器(鲲鹏、Ampere、树莓派 5 等 ARM 设备均可)
- 最低配置:4 核 + 4GB 内存,单实例
- 推荐配置:8 核 + 8GB 内存,支持多安卓实例
- 系统:Ubuntu 22.04 LTS(ARM 版)
- 存储:SSD 优先,安卓容器读写 IO 需求较高
依赖组件
Docker、binder、ashmem 内核模块,ADB 客户端、Scrcpy(远程画面查看)
内核模块
binder_linux、ashmem_linux是 Android 容器运行核心,负责安卓 IPC 通信与内存共享,缺少模块 Redroid 无法正常启动。
三、完整部署步骤
步骤 1:系统更新,安装内核扩展模块
sudo apt update && sudo apt upgrade -y
# 安装内核额外模块,获取binder、ashmem
sudo apt install linux-modules-extra-$(uname -r) -y
# 加载安卓必需内核模块
sudo modprobe binder_linux devices="binder,hwbinder,vndbinder"
sudo modprobe ashmem_linux
提示:部分云服务商 ARM 实例,内核不支持加载 binder 模块,购买实例前需要确认。
步骤 2:安装 Docker 环境
curl -fsSL https://get.docker.com | bash
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 将当前用户加入docker组(免sudo执行docker)
sudo usermod -aG docker $USER
重新登录 SSH,用户组生效。
步骤 3:拉取 Redroid ARM 镜像,启动安卓容器
注意:纯 64 位 ARM 服务器(只支持 aarch64,无 32 位支持),请选用
_64only镜像,防止内核 panic 崩溃。
# 创建持久化数据目录,保存安卓系统数据,容器删除数据不丢失
mkdir -p ~/redroid/instance01
# 启动Redroid安卓容器
docker run -itd --restart=always --privileged --name redroid-01 \
-v ~/redroid/instance01:/data \
-p 5555:5555 \
redroid/redroid:12.0.0_64only-latest \
androidboot.redroid_fps=30 androidboot.redroid_gpu_mode=guest
参数说明:
--privileged:必须开启,容器需要权限访问 binder 设备-v:数据持久化挂载目录-p 5555:5555:ADB 端口映射,外部 adb 连接使用androidboot.redroid_fps=30:设置输出帧率 30fps,按需调整androidboot.redroid_gpu_mode=guest:guest 模式,无独立 GPU 也可运行
步骤 4:ADB 连接云手机实例
本地电脑安装 adb 工具,执行:
adb connect 服务器IP:5555
adb devices
列表出现设备,代表安卓容器启动成功。 可以执行 adb shell、安装 APK、截图等自动化操作。
步骤 5:Scrcpy 远程查看安卓画面
scrcpy --serial 服务器IP:5555
即可打开云手机可视化窗口,操作安卓系统。
四、多实例批量部署(进阶)
如果需要同时运行多个安卓实例,可以使用 docker-compose 编排,每个实例独立端口、独立数据目录。 docker-compose.yml 示例:
version: "3"
services:
redroid01:
image: redroid/redroid:12.0.0_64only-latest
container_name: redroid01
privileged: true
restart: unless-stopped
ports:
- "5555:5555"
volumes:
- ./data01:/data
command: >
androidboot.redroid_fps=30
androidboot.redroid_gpu_mode=guest
redroid02:
image: redroid/redroid:12.0.0_64only-latest
container_name: redroid02
privileged: true
restart: unless-stopped
ports:
- "5556:5555"
volumes:
- ./data02:/data
command: >
androidboot.redroid_fps=30
androidboot.redroid_gpu_mode=guest
启动:docker-compose up -d
五、常见踩坑排错
- 容器启动后 adb 无法连接
排查:binder 模块是否加载成功;安全组放行 5555 端口;服务器防火墙开放端口
- 容器启动几秒自动退出
大概率内核缺少 binder/ashmem;或者纯 64 位 ARM 使用了带 32 位库镜像,更换
_64only镜像
- 画面卡顿,CPU 占用高
guest 软渲染性能有限,有 Mali GPU 的 ARM 板卡可以切换 GPU 硬件渲染;降低帧率
- 公网直接开放 5555 端口风险极高
安全建议:不要直接暴露 ADB 公网;优先内网访问,或者使用 frp 做内网穿透 + 强密码鉴权
六、自建 ARM 云手机 vs 商用云手机(六边云手机)
- 自建 Redroid ✅
- 优点:完全自主可控,数据本地,成本仅服务器费用,技术可深度定制
- ❌ 缺点:需要自己维护服务器、内核、故障排查;扩容、网络、高可用全部自己处理;软渲染画面上限有限,长时间挂机稳定性需要持续调优;适合有 Linux 基础的技术人员,用于测试学习。
- 六边云手机
- ✅ 底层原生 ARM 架构,和本文方案理念一致,规避 x86 指令转译损耗;厂商做好底层运维、网络、实例调度、持久化,开箱即用,不用处理内核模块、Docker 运维;适合需要大量安卓实例,但不想投入底层运维人力的团队。
- ❌ 按需付费,实例数据托管在服务商侧,自定义底层内核能力弱于自建。
选型建议:做技术研究、深度二次开发 → 自建 Redroid;业务批量稳定使用、不想运维服务器底层 → 可以直接选用六边云手机这类 ARM 原生商用云手机。
七、总结
ARM 服务器部署 Redroid 云手机,最大亮点就是原生 ARM 指令执行,去掉 x86 转译层,性能相比 x86 模拟器方案提升明显,非常适合 APP 自动化、兼容性测试场景。
这套方案适合技术爱好者、测试工程师动手实践。但自建方案运维门槛较高,生产批量场景,市面上原生 ARM 架构的商用云手机(如六边云手机),已经封装好了底层复杂度,降低业务落地成本。
再次提醒:本文技术方案仅限合法 APP 测试、技术研究,严禁用于各类违规场景,使用环境务必遵守服务器服务商以及相关法律法规。