蜂壳云 / Phones Cloud

蜂壳云真正的技术能力,不是“远程打开一台手机”

Phones Cloud ·

把屏幕传出来只是最表层的问题。真正困难的是把一台有状态、会漂移、会失败的 Android 设备,放进一个实时、可恢复、可治理的分布式系统里。

如果只从产品界面看,云手机像是在浏览器里打开了一台 Android。但做过多年系统工程的人会先看到另一件事:这不是网页功能,这是一个实时分布式系统。

它有长连接,有媒体流,有控制流,有设备侧进程,有包管理器和权限状态,有租期边界,有失败恢复,还有资源池的再交付问题。蜂壳云真正的技术能力,不在“能不能看到屏幕”,而在这些边界条件失效时,系统能不能收敛。

先定义问题:这不是请求响应页面

普通 Web 页面大多是短请求:请求来了,服务端计算,返回结果,连接可以很快结束。云手机不是这样。用户按下一个键、滑动一次屏幕、等待一帧画面返回,中间是一组持续存在的数据面和控制面。

数据面承载视频和音频,控制面承载触控、按键、状态、截图、Shell 和文件类任务。它们的流量形态不同,优先级不同,失败方式也不同。把它们当成同一种 HTTP 请求处理,系统迟早会在弱网、慢客户端或长会话里失控。

Relay 的价值不只是转发

转发本身不稀奇。真正的问题是连接长期存在以后,慢消费者、半开连接、重连、重复会话、写入阻塞和缓冲区堆积怎么处理。TCP 不会替业务判断一台设备现在属于哪个用户,也不会替业务清掉已经失效的会话映射。

Relay 要维护设备、用户、客户端和会话之间的绑定关系。写入要有 deadline,缓冲要有上限,断开的连接要释放路由和状态。否则一条慢连接就可能拖住整条转发路径,一个旧会话就可能污染下一次连接。

控制链路不能只靠“发命令”

触控和按键看起来是单向输入,但截图、Shell、文件读取、安装任务不是。服务端发出去的是一个请求,设备侧要执行,执行完还要把结果带着请求编号返回。没有请求匹配,并发任务就会串线;没有超时,调用方就会被一台卡住的设备拖死。

Shell Extension 的意义在这里。Immediate、Ordered、Background 三类队列不是装饰性概念,而是执行语义:即时任务保护交互延迟,顺序任务保证依赖关系,后台任务承接更长耗时。stdout、stderr、退出码、输出截断、进程清理和全局并发限制,都是底层执行器必须面对的问题。

真实 Android 不是无状态容器

如果底层是真实 Android,就不能用无状态容器的思路想它。Android 上有包管理器状态、应用数据、下载目录、权限授权、系统设置、账号态、前台 Activity、后台进程和各种厂商差异。

一次使用结束后,把设备标记为空闲是最危险的假象。正确的做法是先结束会话,再进入回收清理流水线,逐步收敛应用、数据、存储、权限和基线状态。清理失败的设备不能直接回池,必须进入重试或人工处理路径。

Kiosk 治理是在减少状态空间

很多系统治理问题,不应该等到回收阶段才处理。Kiosk、Device Owner、LockTask 和 allowlist 的价值,是在用户使用期间就减少设备可能进入的状态空间。

用户能进入的系统入口越少,能修改的关键设置越少,能破坏的管理组件越少,回收阶段要修复的状态面就越小。做过底层系统的人都知道,最稳定的恢复不是把所有坏状态都修好,而是从源头减少坏状态的数量。

Agent 接入的本质是可编程设备端点

Agent 操作手机,不是把聊天机器人接到一个屏幕上。它需要稳定的观察和动作原语:拿到截图,判断状态,执行 tap、swipe、text、keyevent、shell 或 install,再读取结果进入下一轮。

phones-cloud-cli 和 API 把这些能力从控制台里抽出来,变成可被脚本、测试系统和 Agent 调用的接口。这里的关键不是“自动化很酷”,而是每个动作都要有明确输入、执行边界和可解释的返回结果。

延迟是用户可见的系统指标

云手机的延迟不能只放在服务端日志里。用户进入控制页以后,右上角会实时看到毫秒级延迟;这个值来自控制链路的 RTT 回调,并以平均 RTT 展示为当前交互延迟。小于 50ms、50ms 到 100ms、超过 100ms 会对应不同的视觉状态,让用户能直接判断当前操作是否足够跟手。

更重要的是,延迟被拆成两个用户能理解的信号:端到端延迟和中继到设备的链路延迟。端到端延迟反映浏览器、网络、Relay、设备侧反馈这一整条路径;中继到设备延迟则帮助判断压力是否集中在设备侧连接段。把这两个数字放到控制界面里,才算把实时系统的运行质量交给用户感知,而不是只在后台说系统正常。

最后拼起来看

远程打开一台手机,只解决“可见”。蜂壳云真正解决的是“可交付”:这台设备能不能连得上、控得住、跑得稳、收得回、清得干净、再次交给下一个用户。

Relay 让连接收敛,Shell Extension 让设备侧执行有边界,命令队列让不同任务隔离,回收流水线和 Kiosk 让真实 Android 回到基线,CLI 和 API 让设备变成可编程端点,延迟显示把实时质量交给用户感知。一个老工程师看这件事,看的不是屏幕,而是失败路径是否有限、状态是否能回收、系统是否能长期运行。

工程要点

  • 云手机不是一个远程桌面功能,而是一个实时、有状态、可恢复的分布式系统。
  • 底层能力的核心是让失败路径有限:连接能收敛,命令有边界,设备状态能回到基线。
  • 延迟是云手机体验的一等指标:端到端 RTT 和中继到设备 RTT 要能被用户直接感知。

继续查看平台能力

继续了解蜂壳云如何把实时连接、设备侧执行、资源池治理和开发者接口组合成可长期运行的云手机基础设施。