[控场AI]
· 7 分钟阅读· 3,535 字

Remote Compose:以文档驱动跨端UI的Android新范式

Remote Compose:以文档驱动跨端UI的Android新范式

Remote Compose 以几 KB 的二进制文档替代屏幕像素传输,让远程表面自治渲染 UI。

Remote Compose 是 Google 提出的远程 UI 方案,它不传输屏幕截图,而是发送一份由操作列表构成的精简二进制文档,典型体积仅几 KB,复杂布局也多在几十 KB 级别,从而显著降低首帧延迟与交互往返成本。文档支持表达式动画、自适应组件、触摸交互和无障碍 API,加载后缩放、滚动、动画等均在播放器侧自治完成。开发者可通过 Compose API、Kotlin 过程式 API 或 JSON 三种等价方式创建文档,其中 JSON 便于与 LLM 协作修改。通过循环、函数、模板和压缩可将体积再降一个数量级。该方案已在 Wear OS 锻炼追踪器和小组件中落地,Glance 最新版可自动生成 Remote Compose 后端。

在Android开发中,UI通常与应用程序进程紧密绑定,但当界面需要投射到手表、小组件、甚至其他设备时,传统的屏幕镜像或应用分发方式在延迟和性能上捉襟见肘。Remote Compose项目试图从根本上解决这一问题:它不再传输屏幕像素,而是传输一份描述UI的精简文档,让远程表面能够自主渲染与交互。

远程表面的UI困境与文档化思路

据Google技术负责人Nicolas Rod介绍,远程表面可以是手表表盘、桌面小组件,也可以是另一个应用或服务。无论距离是物理网络还是进程边界,传输都有成本。最简单的做法是发送屏幕截图,但这不够快,且每次交互都需往返原始创建者,导致体验迟滞。Remote Compose选择发送一个由操作列表构成的二进制文档,其核心优势在于体积小——典型场景下仅几KB,即使复杂自适应布局也大多在几十KB级别。这直接影响了首帧上屏时间和表面可承载的文档数量。

开发者关系工程师John Zoller补充了Wear OS上的实际收益:使用Remote Compose构建的锻炼追踪器能够实现秒级刷新的实时指标,而传统Compose方案在环境模式下可能需等待一分钟才能更新一次指标,这对电池续航和用户体验都是显著改善。

Glance 是 Jetpack 中用于构建 Android 小组件的声明式 UI 框架,其 API 风格与 Compose 类似,但针对远程表面的渲染限制做了专门优化。Glance 的底层实现长期依赖 RemoteViews,通过将 UI 转换为可在宿主进程中渲染的视图描述来工作。Remote Compose 与 Glance 的关系在于:Glance 最新版本可以自动生成 Remote Compose 文档作为后端,使既有小组件无需重写即可享受更小的文档体积和更丰富的动画能力。这意味着 Glance 成为开发者面向小组件的统一入口,而 Remote Compose 作为其底层序列化格式,二者共同构成从声明式代码到远程渲染的完整链路。

三种文档创建方式与运行时自治

Remote Compose提供三种等价的文档创建途径:Compose API、过程式Kotlin API(KMP),以及JSON格式。三者最终产出相同的字节流。Compose API可直接利用Android Studio的实时预览,开发者在IDE中即可看到表达式驱动的动画效果。JSON格式则特别适合与LLM协作,模型可以读取并修改文档,例如将时钟的分钟指针改为绿色。

文档一旦被播放器加载,便具备自治能力:缩放、滚动、触摸处理、组件显隐与动画均在文档内部完成,无需回源。若确实需要新文档,可显式请求动作。官方播放器包括Compose播放器、View播放器,以及自Android平台某个版本起内置的Remote View实现,后者支撑了启动器小组件。实验性播放器还覆盖C++/Skia、TypeScript和Compose Multiplatform。

Compose播放器可在Compose应用中使用

Compose Multiplatform 是 JetBrains 推动的跨平台 Compose 运行时,支持将 Compose UI 编译到桌面、iOS 和 Web 等目标。Remote Compose 的播放器实现覆盖 Compose Multiplatform,意味着同一份远程文档不仅能在 Android 的 Compose、View 或 Remote View 中播放,也能在非 Android 平台的 Compose 运行时中渲染。这为“一次创建、多表面播放”提供了运行时基础:文档的创建与播放彻底解耦,创建者可以用 Android 工具链生成文档,而播放器可以运行在任意支持 Compose 的平台上,包括嵌入式或跨端场景。

能力层级:从Canvas到自适应组件

文档的底层是一块Canvas,完整保留Android Canvas的全部特性,同时允许将所有浮点值替换为表达式。这些表达式支持数学、三角函数、数组访问和样条插值,任何可变值都可被动画化。演示中的钟摆各自采用不同的动画类型,全部在文档内运行。

在此之上是熟悉的Compose基础组件——Box、Row、Column,以及自适应组件。由于文档在播放时已脱离创建者控制,这些组件能独立处理因尺寸变化导致的元素出现与消失,并支持组件级动画,包括自定义着色器效果。交互方面,点击、触摸、滚动和完整的无障碍API均已内置。演示中一个完整的秒表应用完全在播放器侧运行,未向服务器回传任何数据。宿主应用与文档之间还能双向通信:蓝色部分的应用与黑色的远程文档可互相传递数值。

表达式依赖树实现高效脏值清理

表达式 是 Remote Compose 文档中替代静态数值的动态计算单元,支持数学运算、三角函数、数组访问和样条插值。其关键设计在于表达式之间形成依赖树:当一个表达式依赖的输入值发生变化时,系统只重新计算该表达式及其下游节点,而无需遍历整棵文档树。演示中的“表达式依赖树实现高效脏值清理”正是指这一机制——播放器在每帧更新时仅评估受影响的表达式分支,使动画和交互在文档内部高效运行,同时保持文档体积精简,因为表达式描述的是计算规则而非逐帧数据。

让文档更小:循环、函数、模板与压缩

“小是特性”是贯穿演讲的设计哲学。以一个典型列表UI为例,原始文档约25KB,Remote Compose提供多重手段进一步压缩:自动去重相同字符串、使用循环操作绘制图形、将重复图形抽象为函数、用模板复用组件行。最后,文档可整体压缩,通常可节省约一半体积。文档头部不参与压缩,便于快速筛选大量文档而无需解压。综合运用这些手段,示例文档体积可降低一个数量级。

文档压缩与体积优化示意

小组件与Wear OS的落地进展

Remote Compose已能完整复刻现有小组件,并支持自适应调整与动画。一个完整的小组件游戏文档仅约4KB。对于既有小组件,官方建议继续使用Glance,其最新版本可自动生成Remote Compose后端。Wear OS方面,新的锻炼追踪器已用Remote Compose构建,并已落地到Asics RunKeeper应用的公开测试版。Wear OS小组件取代了旧的ProtoLayout Tiles库,统一到Jetpack Glance生态,UI与具体应用进程解耦,可序列化并在设备上安全渲染,同时带来现代图形与响应式布局。Wear OS 7的硬件厂商已采用垂直滚动托盘,旧设备则自动以全屏Tile形式呈现,并向下兼容至Wear OS 4。

Wear OS上Remote Compose带来的实时指标优势

ProtoLayout Tiles 是 Wear OS 此前用于构建 Tiles(小组件)的库,基于 ProtoLayout 布局协议,与 Jetpack 生态相对割裂。Remote Compose 在 Wear OS 小组件场景中取代了 ProtoLayout Tiles,将 Tiles 统一到 Jetpack Glance 生态下。这一迁移的意义在于:UI 与具体应用进程解耦,文档可序列化并在设备上安全渲染,同时获得现代图形能力与响应式布局。Wear OS 7 的硬件厂商已采用垂直滚动托盘,旧设备则自动以全屏 Tile 形式呈现,并向下兼容至 Wear OS 4,开发者无需为不同设备形态维护多套 Tiles 代码。

开发者工具与开放生态

Remote Compose的库托管在AndroidX,文档与版本随DAC发布。团队正在推进文档格式的公开规范,并开发向量资源转换工具,鼓励开发者发送矢量而非位图。文档检查器(Document Inspector)已放出预览,支持逐步执行操作、在不同密度与尺寸下可视化布局,以及类似Android Studio的完整布局检查能力,甚至可进行3D查看。项目在开放环境中开发,团队明确表示希望收集开发者反馈,以拓展更多远程表面场景。

值得一提的是,整场演讲的界面本身即由Remote Compose驱动,包括所有动画。

#Remote Compose#Android UI#Wear OS#Jetpack Glance#跨端渲染#文档驱动UI
分享:

相关推荐