近日三星推出了首款 Galaxy XR 设备,这是第一款基于 Android XR 的 Android 设备,而 Android XR 是为下一代耳机和眼镜推出的新操作系统。

作为对标苹果 Vision Pro 的设备, Galaxy XR 搭载的是 Android XR 系统 , Android XR 基于开放标准构建,并支持 OpenXR、WebXR 和 Unity 等工具,例如可以通过 360 度支持的 VR 内容,体验沉浸式的视频和应用交互:

还可以使用 Circle 搜索虚拟对象(或房间中的真实物品),从网络上获取有关所看到的任何事物的有用信息:

还有自由调整、伸缩的应用交互,同步进行操作的视野空间,这就是 Android XR 的不同至于,支持在 AR 和 VR 之间无缝切换:

而在此基础上,为了提供更好的开发体验,官方提供了 Jetpack XR SDK,而基于 SDK 开发的 UI 框架也就是熟悉的 Jetpack Compose ,那它有什么特别之处?
首先,在 XR 设备上应用的展示和操作风格发生了较大改变,而 Jetpack XR SDK 的作用就是:让开发者可以直接使用 Kotlin + Compose 进行开发,减少全新 XR 工具链门槛 ,让持原有 2D 应用能直接在 XR 设备(尤其 Home Space 模式)中"无修改"运行,从而降低适配成本。
什么是 Home Space ?这就需要见到 Android XR 的关键基本概念,首先应用程序可以运行的两种模式:主空间和全空间:

在 Home Space 中 ,多个应用可以并排运行,方便用户跨不同窗口执行多任务,从这个意义上来说,它很像在大屏幕 Android 设备上的桌面窗口:

而如果在 Full Space 中 ,应用没有空间边界,可以利用 Android XR 的完整空间功能,例如 spatial UI 和控制虚拟环境,这个情况更像是一个普通大屏幕,不需要太多的定位操作。

而实际开发过程中,应用其实往往需要适配两种不同场景切换,这才是 XR 设备里最需要的适配场景:

具体对比为:
Home Space | Full Space |
---|---|
多个应用并行运行,可以进行多任务处理 | 一次只运行一个应用,不受空间限制,所有其他应用均被隐藏 |
兼容自适应的 Compose 一般不需要额外开发 | 可以在全空间中空间化现有的 Android 应用 |
Home Space 支持系统环境,它不支持 spatial-ui、 3d-content 或应用的 spatial environments(环境模拟) | 支持 spatial-ui、 3d-content 、 spatial environments(环境模拟) |
应用程序具有受限的边界,默认1024 x 720dp,最小尺寸 385 x 595dp,最大尺寸 2560 x 1800dp | 应用可以覆盖 panel-depth 并具有移动和调整大小的功能 |
应用程序在距离用户 1.75 米处启动 | 应用程序可以直接打开到完整空间,Unity 、 OpenXR 和 WebXR 应用在非托管的完整空间中运行 |
而 Android XR 里的交互,将 press、 pinch 和 swipe 等熟悉的移动操作扩展为基于手势的导航系统,例如使用食指和拇指捏合来选择项目,这相当于在空间上点击触摸屏或按下鼠标按钮,按住捏合可以滚动、移动或调整窗口大小,以及在 2D 和 3D 空间中选择和移动 UI 元素或对象:

用户通过将主手的手掌向内、捏合并握住食指和拇指来导航,手向上、向下、向左或向右移动, 释放以选择一个选项:

以上这些都是需要适配的不同之处,其他是其实还是使用 Compose 进行布局,不同的是使用 spatial layouts 的 SpatialRows
和 SpatialColumn
之类:

还有使用 SpatialPanel
来显示文本、按钮和视频等 2D 内容等,SpatialPanel
是一个 subspace composable ,而Orbiter 可以附加到 SpatialPanel 上,并随其所附加的内容一起移动, 它们通常用于提供与其所附加内容相关的上下文控件,让内容成为主要焦点,一般可以放置在内容的四个侧面中的任意一个:
kotlin
Subspace {
SpatialPanel(
SubspaceModifier
.height(824.dp)
.width(1400.dp)
) {
Text("I'm a panel!")
}
}

这也是 Jetpack XR SDK 提供的空间化 UI 构建工具 ,提供 Subspace
、SpatialPanel
、SpatialRow
、SpatialColumn
、Orbiter
等新 Compose API,用于将 UI 放置在 3D 空间、控制大小、位置、拖动、缩放、深度,最重要的是
支持当设备/模式不支持空间化(如普通手机或 Home Space)时自动降级到 2D 表示,从而提高兼容性
另外还需要支持 XR 模式管理、环境、场景控制,例如:
- SDK 提供 API 来检测是否支持 XR 空间化特性(如
LocalSpatialConfiguration.current.hasXrSpatialFeature
)以及切换到 Full Space 模式 - 支持将 UI 内容置于不同空间模式(Home vs Full)
- 支持环境、3D 模型、空间音频、实体管理等 XR 特有功能
用一句话来总结:
Jetpack XR SDK(Compose for XR)让你用熟悉的 Android Compose 构建跨设备的 UI,同时新增"空间化"能力(深度/3D 面板/拖动/缩放/模式切换等),从而将你的应用从二维屏幕拓展到 XR 沉浸式环境。
而从目前的情况下,这个赛道的跨平台支持很微弱,几乎都是原生赛道,虽然目前场景不多,但是可以说是一个非常纯净的 Android 原生开发赛道了。
另外其实还有一个赛道,智能眼镜的独立 app ,像雷鸟,meta ai,阿里夸克ai眼镜,rokid 等等,基本都是纯原生开发,没有用一点跨平台,估计是因为和手机平台比较强关联,涉及各种硬件和通信协议处理,所以基本都是原生开发,目前看来这个赛道也基本都是纯原生的净土。
只能说,目前还有这样纯净的原生开发赛道,不多了,实际上比如笨重和昂贵的 XR 头戴赛道,智能眼镜虽然严重依赖手机支持(毕竟才 200 毫安不到,还要考虑发热),但是它整体价格和场景会更丰富,想比较起来更推荐 Android 原生开发尝试。
那么,你对 XR 有什么看法呢?