公告资讯

热门消息 > 云手机ADB白名单连接攻略:把星界云机无缝接进你的CI/CD

云手机ADB白名单连接攻略:把星界云机无缝接进你的CI/CD

2026-03-10


“2024 年,Google 将 ADB 暴露列为十大云原生安全风险之一;同年,某头部社交 App 因公网开放 5555 端口,3 小时被植入挖矿木马,测试集群直接变‘矿场’。”
——The Stack 年度安全报告

当 Jenkins 的构建红灯一次次亮起,测试同学把咖啡当水喝,CTO 在群里@全员:“谁能把 Android 自动化测试从 3 天压缩到 1 天,团建预算翻倍。” 这篇文章,给你一个可落地的答案:用星界云手机的 ADB 白名单连接,把云真机无缝接入 CI/CD,让流水线像打手游一样丝滑。


1. 企业场景:Jenkins+ADB 批量操控的刚需

敏捷迭代越来越快,每周一次大版本已成常态。传统做法里,测试部要:

  1. 借 30 台实体机,插线、ROOT、装包、调环境;
  2. 用开源框架挨个跑 Monkey、遍历 UI、截图比对;
  3. 崩溃日志导回电脑,人工归因,平均定位 1 个 BUG 需 45 分钟。

一旦设备被同事“顺手”升级系统,脚本全崩。
痛点总结:设备碎片化、借还流程、 ROOT 不稳定、USB 掉线、公网 ADB 高危。


2. 安全陷阱:公网暴露 ADB=瞬间被挖矿

ADB 默认 5555 端口没有任何加密,明文传输 Shell 命令。Shodan 上随时能搜到几十万台开放在公网的手机、盒子、开发板。攻击者只需三行代码即可植入挖矿程序,CPU 飙到 100%,测试任务全卡死。
更糟的是,部分云平台为了“开箱即用”,把 ADB 直接映射到公网,用户侧零配置,却留下巨大隐患。企业安全合规一票否决,测试再快也上不了生产。


3. 星界方案:IP 白名单+密钥校验,30 秒接入

星界云手机在云端复刻了完整的 Android 系统,所有机型默认关闭 ADB;需要使用时,控制台一键开启,并强制填写IP 白名单
- 仅允许白名单内的公网 IP 访问 5555,拒绝其他所有连接;
- 传输仍走 ADB 官方协议,无需额外 VPN,Jenkins 节点、本地电脑、容器云均可直接调用;
- 支持子账号分权,测试组开 20 台、开发组开 50 台,互不干扰;
- 单数据中心统一白名单,一次设置,账户下所有云手机生效,后续加机器零配置。

操作流程(实测 30 秒)
1. 打开 星界控制台 → 选中云手机 → 更多操作 → ADB 连接;
2. 填写本机公网 IP(可访问 ip138.com 查看)→ 确定;
3. 返回页面复制“ADB 连接地址”;
4. 本地 adb connect 云手机域名:端口 立即上线,后续与真机无差别。


4. 代码示例:Python 脚本循环装包、跑 Monkey、导出日志

以下脚本可直接在 Jenkins Pipeline 里新建一个“Execute Python”步骤,5 分钟搞定 nightly build。

import os, subprocess, time, datetime

devices = [
    "cn-x-x-starcloud.chinac.com:17111",
    "cn-x-x-starcloud.chinac.com:17112",
    "cn-x-x-starcloud.chinac.com:17113"
]
apk_path = "app-debug.apk"
pkg_name = "com.example.app"
log_dir = f"logs/{datetime.datetime.now():%m%d_%H%M}"

os.makedirs(log_dir, exist_ok=True)

for d in devices:
    # 1. 连接
    subprocess.run(["adb", "connect", d], check=True)
    # 2. 安装
    subprocess.run(["adb", "-s", d, "install", "-r", apk_path], check=True)
    # 3. Monkey 5 万事件
    monkey = subprocess.Popen(
        ["adb", "-s", d, "shell", "monkey", "-p", pkg_name,
         "--pct-touch", "50", "--pct-motion", "30",
         "--throttle", "200", "-v", "50000"],
        stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True)
    # 4. 实时日志
    logcat = subprocess.Popen(
        ["adb", "-s", d, "logcat", "-v", "time"],
        stdout=open(f"{log_dir}/{d}.log", "w", encoding="utf-8"))
    time.sleep(300)          # 运行 5 分钟后结束
    monkey.terminate(); logcat.terminate()
    # 5. 导出崩溃
    subprocess.run(["adb", "-s", d, "shell", "am", "force-stop", pkg_name])
    subprocess.run(["adb", "-s", d, "pull", f"/sdcard/Android/data/{pkg_name}/files/crash", f"{log_dir}/{d}_crash"])

跑完 30 台并行,只需把 devices 数组换成星界提供的 ADB 地址列表即可。日志统一归档到 Jenkins 工作区,失败用 plot 插件直接出图表,第二天上班看报告就能定位问题。


5. 成果:测试周期从 3 天缩到 8 小时,故障定位效率×5

某跨境电商客户端团队 3 月接入星界云手机, nightly build 跑在 40 台直播增强版 1080P 机型上(8 核 5G,GPU 硬加速)。
- 过去:实体机 30 台 + 手工借还,完整回归 3 天;
- 现在:云手机 40 台 + Jenkins 并行,8 小时跑完 3 万 Monkey 事件、UI 遍历、性能采样;
- 崩溃日志秒级回传,关键字自动聚类,平均定位时间从 45 分钟降到 9 分钟;
- 无需 ROOT,支持 Android 7.1/11/13 多版本同时验证,兼容性问题提前暴露;
- 公网 ADB 零暴露,安全部直接放行上生产。

CTO 在复盘会上说:“团建预算翻倍,今晚海底捞,星界那边的销售也一起。”


写在最后

如果你也在为“设备不够、ROOT 太烦、公网 ADB 高危”而头疼,不妨到星界云手机官网注册账号,联系客服申请一天免费试用——30 秒开启白名单,把云真机写进 Jenkinsfile,让下一次迭代从“人等设备”变成“云机等脚本”。
敏捷测试的终局,是让开发者把精力留给创新,而不是 USB 线。