openSTF是什么
1. OpenSTF 是什么
1.1. OpenSTF(Smartphone Test Farm)是一套开源的 Android 真机管理与远程调试平台
1.2. 目标很纯粹:把一堆散落在机柜里的 Android 手机,变成 可共享、可观测、可自动化接入的“设备云”
1.3. 核心使用场景
- 自动化测试(App / 系统 / ROM)
- 远程调试(USB 不在你身边)
- 设备资源池化(测试、研发、运维共享)
2. OpenSTF 能解决什么问题
2.1. 设备不可控
- USB 直连 → 人肉插拔
- OpenSTF → Web 即插即用
2.2. 调试链路割裂
- adb / scrcpy / 日志 / 安装各自为政
- OpenSTF → 统一入口 + 权限控制
2.3. 自动化难落地
- CI 环境无法稳定占用真机
- OpenSTF → API + token 化设备租用
3. OpenSTF 的核心能力拆解
3.1. 设备管理
- 在线 / 离线状态
- 设备锁定(防抢占)
- 分组 / 标签
3.2. 远程操作
- Web 实时投屏(WebSocket + H.264)
- 远程触控 / 键盘
- 截图 / 录屏
3.3. 调试与维护
- adb over Web
- APK 安装 / 卸载
- Logcat / shell
3.4. 权限与审计
- 用户 / 组
- 设备访问控制
- 操作记录(适合企业内网)
4. OpenSTF 架构
flowchart LR
User[Browser / CI] -->|HTTP/WebSocket| STF_UI[OpenSTF Web UI]
STF_UI --> STF_API[STF API Server]
STF_API --> Auth[Auth Service]
STF_API --> DB[(RethinkDB)]
STF_API --> Triproxy[Triproxy]
Triproxy --> Provider1[STF Provider
Host A]
Triproxy --> Provider2[STF Provider
Host B]
Provider1 --> Phone1[Android Device]
Provider1 --> Phone2[Android Device]
Provider2 --> Phone3[Android Device]
5. 关键组件说明
5.1. STF API
- 核心调度中枢
- 设备状态、锁定、分配
5.2. Provider
- 真正“接管手机”的节点
- 每台插手机的机器都要跑
- 与 adb 强绑定
5.3. Triproxy
- 端口转发枢纽
- 解决多 Provider 场景下的 adb / stream 路由
5.4. 数据层
- RethinkDB(状态型数据库)
- 不适合频繁 schema 变更,但非常适合实时设备状态
6. 部署与运维层面的现实问题
6.1. 项目状态
- OpenSTF 已停止官方维护
- 但在内网、测试环境仍大量存活
6.2. 常见坑
- Chrome 升级 → WebSocket 行为变化
- 新 Android 版本 → adb 权限收紧
- 大规模设备 → USB Hub / 供电是硬伤
6.3. 运维建议
- 容器化部署(docker-compose / k8s)
- Provider 与手机 一对多但别太贪
- 强烈建议 USB 独立供电
- 与现代方案的对比(前瞻视角)
7.1. OpenSTF 的定位
- 真机
- 内网
- 强控制
OpenSTF 是
“一个把 adb 从命令行,拉进浏览器和 CI 世界的老派但可靠的工程系统”