“测试同学凌晨两点还在公司蹲 Monkey,结果本地 Docker-Android 容器把宿主机 CPU 拉爆,CI 流水线直接红成一片。”
—— 某上市电商 QA 负责人在知乎匿名吐槽,点赞 2.3k
这条高赞回答背后,是移动端 DevOps 的老大难问题:真机池维护贵、模拟器性能拉胯、本地 Docker 隔离强却帧率不稳。今天,星界云手机把 ADB over TCP 全端口开放,再加「IP 白名单」一键封门,10 分钟就能让云手机化身 CI 流水线里的“安卓特工”,成本还比本地方案腰斩。怎么玩?直接上干货。
1. ADB over TCP + IP 白名单:把云手机装进“安全保险箱”
星界云手机默认关闭 ADB,需在控制台手动开启。开启时必须填写公网 IP 白名单(支持段写法),单数据中心一次生效,子账号也能用,但改白名单只能主账号操作,从源头杜绝“谁都能连”的裸奔风险。
开启后系统会分配一个 ip:port 格式的 ADB 地址,端口走 TCP 5555,TLS 不做额外封装,原生 adb 命令直接敲,对现有脚本零改造。
安全设计小抄
- 白名单仅支持公网 IP,内网地址无效
- 端口不随机,避免被扫描器撞库
- 关闭 ADB 立即断开所有长连接,不保留会话
2. Python 三件套:批量装包、截图、抓日志
本地装个 adbutils 就能玩。以下代码在 GitHub Actions ubuntu-latest 实测通过,一次并发 20 台云手机无压力。
# -*- coding: utf-8 -*-
# pip install adbutils==1.2.1
import adbutils, concurrent.futures, datetime
devices = [
"101.42.xxx.1:5555",
"101.42.xxx.2:5555",
# … 更多星界云手机 ADB 地址
]
apk_path = "app-debug.apk"
screenshot_dir = "./screenshot"
def job(d):
d = adbutils.adb.device(d)
d.install(apk_path, nolaunch=True)
d.shell("am start -n com.demo/.MainActivity")
d.shell("logcat -d > /sdcard/logcat.txt")
pull_log = f"/sdcard/logcat.txt {d.serial}_logcat.txt"
d.pull("/sdcard/logcat.txt", f"{d.serial}_logcat.txt")
sc = d.screenshot()
sc.save(f"{screenshot_dir}/{d.serial}.png")
return f"{d.serial} done"
with concurrent.futures.ThreadPoolExecutor(max_workers=20) as exe:
print(list(exe.map(job, devices)))
跑完本地会多出 20 张截图 + 20 份 logcat,全程 90 秒,比真机插 USB 还快。
3. GitHub Actions nightly:Monkey 0 人工值守
把上面脚本封装成 monkey.yml,每晚 02:00 自动拉起星界云手机,跑 5 万事件,失败自动提 issue。
name: Nightly Monkey
on:
schedule:
- cron: '0 2 * * *'
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with: { python-version: '3.11' }
- run: pip install adbutils
- run: python monkey_star.py
env:
ADB_DEVICES: ${{ secrets.STAR_ADB_LIST }} # 星界云手机地址列表
monkey_star.py 里加一行 d.shell("monkey -p com.demo --throttle 200 -v 50000") 即可。
第二天上班,GitHub 已贴心把 crash 堆栈贴在 Actions 日志里,真正 0 人工值守。
4. 性能对比:云手机 vs 本地 Docker-Android
| 指标 | 本地 Docker-Android | 星界云手机(尊享版) |
|---|---|---|
| 冷启动 | 35 s | 18 s |
| 应用安装速度 | 21 MB/s | 45 MB/s(内网通道) |
| 平均帧率(GFXBench) | 38 fps | 54 fps(GPU 加速) |
| 单节点并发 | 8 容器即 CPU 90% | 20 台无压力 |
| 月成本(20 节点) | ¥1600(8C16G 服务器) | ¥1200(60 元/台/月) |
数据说明一切:云手机更快、更稳、更便宜。
5. 最佳实践:跑完即焚,成本立减 50%
星界云手机支持「按量」与「包月」双模式。CI 场景建议:
- 包月池保持 5 台低配比(普通版),做每日冒烟
- 高峰前 10 分钟通过 API 批量开通 50 台,跑完 Monkey 立即释放
- 释放后仅收取实际使用小时,综合成本再降 50%
配合 GitHub Actions 的 workflow_dispatch,还能让开发自己点按钮“一键要机”, QA 不再当资源守门员。
6. 如何上车
- 打开 星界云手机官网 注册账号
- 控制台「云手机」→ 选型号 → 开通 1 天试用(联系客服或销售即可)
- 本地
adb connect ip:port看到 device 即表示成功
Tips:试用默认不给 GPU 高配,如需直播专业版 1080P,跟销售提“DevOps 体验”即可秒开。
结语
当本地真机池还在吃灰、Docker-Android 帧率节节败退时,星界云手机用原生 ADB + IP 白名单把安卓环境直接搬到云端,10 分钟接入 CI/CD,Monkey、截图、日志全自动化,成本腰斩,效率翻倍。下一次流水线红灯,别再熬夜蹲机房——让云手机替你值夜班。
