Jetpack Compose for XR
| 最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2026 年 3 月 25 日 | - | - | - | 1.0.0-alpha12 |
声明依赖项
如需添加 XR Compose 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 制品库 。
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.xr.compose:compose:1.0.0-alpha12" // Use to write unit tests testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha12" }
Kotlin
dependencies { implementation("androidx.xr.compose:compose:1.0.0-alpha12") // Use to write unit tests testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha12") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
1.0 版
1.0.0-alpha12
2026 年 3 月 25 日
发布了 androidx.xr.compose:compose:1.0.0-alpha12 和 androidx.xr.compose:compose-testing:1.0.0-alpha12。版本 1.0.0-alpha12 中包含 这些提交内容。
API 变更
- 添加了
SpatialGltfModelAPI 和SpatialGltfModelAnimationAPI,用于呈现 glTF 并控制动画。将SpatialGltfModelState更改为AutoCloseable,现在需要将其关闭以释放其资源。(I11fde、b/466065486、b/481379924)。不过,在进行其他测试之前,SpatialGltfModelAPI 在此版本中被标记为受限。(Ibf003、b/466090694) - 为
SubspaceModifier.rotate添加了已废弃的空重载。(Idceb6) - 将
SpatialSmoothFeatheringEffect函数重命名为spatialSmoothFeatheringEffect,并将其移至绘制模块。将SpatialExternalSurface的默认羽化值更新为 null,这模仿了旧的 ZeroFeatheringEffect 功能。(I5fdaa、b/460426800) - 移除了
onPointSourceParamsAvailable。我们将在不久的将来提供不同的音频空间化 API。(I86507、b/458513439) - 为偏移子空间修饰符添加了 RTL 行为。还添加了
absoluteOffset以忽略布局方向。(I30e4b、b/474409165)
1.0.0-alpha11
2026 年 2 月 25 日
发布了 androidx.xr.compose:compose:1.0.0-alpha11 和 androidx.xr.compose:compose-testing:1.0.0-alpha11。版本 1.0.0-alpha11 中包含 这些提交内容。
新功能
- 向
SpatialExternalSurfaces添加了SuperSampling参数 (Icd4d1)
API 变更
- 子空间修饰符内边距更改,以感知布局方向。(I53e25)
SpatialCapabilities现在是密封的,无法扩展。(I07aef)- 接受通用
SpatialAlignment参数的SpatialRow和SpatialColumnAPI 已废弃;请改为使用分别接受verticalAlignment或horizontalAlignment的SpatialRow和SpatialColumnAPI。(Iec390) - 合并了重载
SubspaceLayout函数 API (Idd30a) - 将
SubspaceModifier.lookAtUser重命名为rotateToLookAtUser,并将up参数重命名为upDirection。(Icafb8) - 将
SpatialRow设为内联函数 (Ia2f20) - 将
SpatialColumn设为内联函数 (I681be) - 移除了广告牌 API (Ib76cd)
1.0.0-alpha10
2026 年 1 月 28 日
发布了 androidx.xr.compose:compose:1.0.0-alpha10 和 androidx.xr.compose:compose-testing:1.0.0-alpha10。版本 1.0.0-alpha10 中包含 这些提交内容。
API 变更
- 移除了已废弃的 API -
ApplicationSubspace(Ia6596、b/468345186) - 将
SpatialShape更新为密封接口 (I7e3f5、b/460426800) - 移除了
SpatialAlignment中已废弃的 API。(Ib0b61、b/468011887) - 废弃了
SpatialLayoutSpacer并引入了SpatialSpacer。(I2ebf3、b/466071383) - 更新了
UserSubspaceAPI,将“延迟锁定”术语替换为“软锁定”。(I9ded1、b/464035984)
1.0.0-alpha09
2025 年 12 月 3 日
发布了 androidx.xr.compose:compose:1.0.0-alpha09 和 androidx.xr.compose:compose-testing:1.0.0-alpha09。版本 1.0.0-alpha09 中包含 这些提交内容。
API 变更
- 添加了
LookAtUser和广告牌修饰符,可让内容始终面向用户。(I49b99) - 添加了为
SpatialExternalSurfaces和SpatialPanels设置InteractionPolicy的功能,可检测点击和其他 3D 输入事件。(Iae155) - 添加了大小和
requiredSize修饰符重载,宽度、高度和深度均为 Dp 值。(I92f79) ParentLayoutParamsModifier接口现在扩展了DelegatableSubspaceNode。(I1a6d4)ApplicationSubspace已废弃,取而代之的是 Subspace API。- Subspace API 行为已更改为仅以建议的姿势和缩放比例提供应用级子空间。
- 引入了
PlanarEmbeddedSubspaceAPI,用于在 2D 上下文中提供嵌入式子空间。(Id3343)
- 向
SubspaceModifier.NodeAPI 添加了shouldAutoInvalidate标志。(I93902) - 在允许开发者将
@SubspaceComposable的大小限制为特定范围(忽略父项的传入测量限制)的 API 中添加了required(Size|Width|Depth|Height)。(Ifaa78) - 添加了
SubspaceModifier.onSizeChanged,为开发者提供了一个简单的专用回调,以便在@SubspaceComposable的大小发生变化时做出响应。(I994f9) - 移除了 Volume API。应使用
SceneCoreEntityAPI 而不是 Volume API。(I4162b) - 将
SubspaceLayoutModifierNode.requestRelayout拆分为invalidateMeasurement/invalidatePlacement。(I14805) - 添加了
SpatialGltfModelAPI,可让开发者在 Compose 中呈现 glTF。(Icc91f) - 引入了
SpatialGltfModel可组合 API,可轻松呈现 glTF (Iade67)
bug 修复
- 修复了
SceneCoreEntity中的布局 bug。它现在应该能够正确遵守其限制条件。(I11bb8) - 将 jxr-compose 模块降级为
Compile sdk = 34(I2d5db)
1.0.0-alpha08
2025 年 10 月 22 日
发布了 androidx.xr.compose:compose:1.0.0-alpha08 和 androidx.xr.compose:compose-testing:1.0.0-alpha08。版本 1.0.0-alpha08 中包含 这些提交内容。
API 变更
- 更改了
ResizePolicy以接受onResizeStart、onResizeUpdate和onResizeEnd。(I7e21f)
bug 修复
- 防止在销毁具有子空间的 Activity 时发生崩溃。(I595a1)
1.0.0-alpha07
2025 年 9 月 24 日
发布了 androidx.xr.compose:compose:1.0.0-alpha07 和 androidx.xr.compose:compose-testing:1.0.0-alpha07。版本 1.0.0-alpha07 中包含 这些提交内容。
API 变更
- 改进了
SpatialMainPanel的 KDocs。(I27b70、b/444467891) - 引入了
SpatialArrangement,用于在SpatialRow和SpatialColumn等 3D 布局中沿主轴排列子项。此新 API 提供了来自 2D Compose 的常用排列选项,包括Start、End、Center、SpaceBetween、SpaceAround和SpaceEvenly,并完全支持 LTR 和 RTL 布局方向。(I7db38、b/436289959) - 为
SubspaceModifier.Node添加了基本接口,以提高扩展接口的类型安全性和可用性;例如CompositionLocalConsumerSubspaceModifierNodeLayoutCoordinatesAwareModifierNodeSubspaceLayoutModifierNodeCoreEntityNode(内部)(Iede00、b/440599394、b/440599394)
- 取消了对
SpatialExternalSurface的限制 (I33315、b/439646773) - 向 Subspace 可组合项引入了
SubspaceModifier,并将限制条件参数替换为具有大小相关SubspaceModifiers的SubspaceModifier。如果allowUnboundedSubspace为 true,则子空间仍可以具有无界限制条件。(Ib06e6、b/433331675) - 废弃了可移动和可调整大小的
SubspaceModifiers,因为DragPolicy()和ResizePolicy()现在是SpatialPanel和SpatialExternalSurfaceAPI 的一部分 (I397bf、b/437924639) - 添加了对空间布局中
LayoutDirection的支持。使用SpatialAlignment的可组合项现在可以在 LTR 和 RTL 上下文中正确放置元素。(I964bb、b/436300273) - 向
PanelAPI 添加了 Resizable 和 Movable 参数,以确保这些行为只能应用于受支持的容器。(Id491c) - 添加了
sizeIn、widthIn、heightIn、depthInSubspaceModifiers,可让您为宽度、高度和深度设置确切的最小和最大限制条件。(I1af09、b/433330761)
1.0.0-alpha06
2025 年 8 月 13 日
发布了 androidx.xr.compose:compose:1.0.0-alpha06 和 androidx.xr.compose:compose-testing:1.0.0-alpha06。版本 1.0.0-alpha06 中包含 这些提交内容。
bug 修复
- 在生命周期所有者被销毁时重新创建
ComposeXrOwnerLocals。(9123ce1)
1.0.0-alpha05
2025 年 7 月 30 日
发布了 androidx.xr.compose:compose:1.0.0-alpha05 和 androidx.xr.compose:compose-testing:1.0.0-alpha05。版本 1.0.0-alpha05 中包含 这些提交内容。
新功能
- 将
SubspaceComposable注解类设为公开。(Ic2a34、b/399432430) - 两个新的
SpatialExternalSurface可组合项,分别表示 180 度和 360 度球体。(I40ef2、b/391705799) - 添加了
SubspaceModifier.aspectRatio(Ide5ab、b/399729509、b/414762147) - 添加了
SceneCoreEntityAPI,以改进SceneCore和 Compose for XR 之间的互操作性。(I50bb3、b/423020989) - 提供了
GravityAlignedsubspaceAPI,以支持未缩放的 AndGravityAligned功能 (I07359)
API 变更
SpatialDialog()将遵循SpatialDialogProperties.dismissOnBack按压配置。(Ib453b、b/416797132)- 将
minimumPanelDimension更新为新的默认尺寸大小Dimensions(0.1f, 0.1f, 0.1f),因为其以米为单位表示。(Ib852a) - 子空间和轨道器现在将在主空间和应用处于后台时保留其内部状态。在主空间模式下,子空间仍会设置其场景,为切换到全沉浸空间模式做准备。(I40317、b/416037751)
SpatialDialogs现在将在应用处于后台时保留其状态。(I6aa56)ApplicationSubspace现在将从系统继承其建议的缩放比例和位置。(I4565f、b/418834194)- 当
SubspaceComposable在非SubspaceComposable上下文中使用时,添加了更好的出错提示并提前触发错误。(Iee2ae、b/416484684) - 将
ExperimentalSubspaceVolumeApi从“警告”更新为“错误”,因为在误用可组合 API 时,警告经常会被忽略。(I427aa、b/424864286) - 子空间和
ApplicationSubspace现在受recommendedContentBoxInFullSpace限制。之前,它受SpatialUser的视野范围限制。(I41015、b/423074142) - 更新了
SpatialElevation以使用最小尺寸,不再使用硬编码尺寸 (I2dbe6、b/427785338) - 更新了我们对
SpatialAcitivityPanel进行遮盖的方式,以便在修改关键变量时进行更新。(I0f64d、b/427999029) - 移除了
VolumeConstraints.Unbounded,改为将默认限制条件值设置为等效值。(Ie24ec、b/407938414) SpatialFeatheringSize不再是公开的 (I1c15b、b/399432430)- 将 XR
Placeable重命名为SubspacePlaceable,以将其与 Compose 的Placeable区分开。(I74874) - 移除了轨道器设置,并添加了
shouldRenderInNonSpatial作为新参数。此外,还移除了类EdgeOffset,并添加了orbiterOffsetType作为新参数,以整合Orbiter()函数。以及将OrbiterEdge重命名为ContentEdge。(Iebf3d) - 将
Measurable重命名为SubspaceMeasurable,以将该类型与 Compose 的Measurable类型区分开。(I9726c) - 将
MeasureResult重命名为SubspaceMeasureResult(I9f34d) - 移除了
setSubspaceContentAPI,改为使用 Compose 的setContent和Subspace可组合项。(Ifff4c、b/421427391、b/421427391) MeasurePolicy重命名为SubspaceMeasurePolicy。(I37a9b、b/422553904)- 将
SubspaceSemanticsInfo转换为密封接口,因为如果没有默认值,我们将无法添加成员。(I372f9、b/423704068) - 更新了
SpatialExternalSurface文档,将ContentSecurityLevel重命名为SurfaceProtection(I3c460、b/420982808) - 为可移动修饰符提供了重载的构造函数,可用于锚定。(Ic0c70)
- 为工具提示添加了更多位置信息提供程序,因此开发者现在可以控制工具提示是放置在锚点的上方、下方、左侧还是右侧。添加了一个 API,用于接收插入符号的形状,因此可以提供更多自定义形状。(Ie513c、b/374766087、b/418854637)
- 移除了
CoreEntity作为PublishedApi(Ifee05)
bug 修复
- 修复了
SpatialDialog在呈现时闪烁的问题。(Ife73c、b/401619909) - 修复了
SpatialDialog无法遮盖 Activity 面板的问题。(I8ca6c、 b/367442109) - 修复了 XR 对话框不显示某些内容的问题 (I17cd5、b/418062437)
- 修复了在内容内点击时
SpatialPopup被关闭的问题。(If262c、b/417245722) - 修复了在链接
resizable().movable()时,SpatialPanel 无法正确调整为新大小的问题。(I02ee3、b/422264230) - 修复了
SpatialComposeVideoPlayer中topBar与菜单重叠的问题 (Id33bc、b/427168167) - 修复了圆角不呈现的问题 (I975fe、b/428261830)
1.0.0-alpha04
2025 年 5 月 7 日
发布了 androidx.xr.compose:compose:1.0.0-alpha04 和 androidx.xr.compose:compose-testing:1.0.0-alpha04。版本 1.0.0-alpha04 中包含 这些提交内容。
新功能
- 添加了
CompositionLocalConsumerSubspaceModifierNode接口,以允许自定义SubspaceModifier类型访问组合本地值。 - 添加了新的
SpatialPanelAPI,该 API 遵循 ComposeAndroidView实现样式,并废弃了之前的ViewBased SpatialPanel。 - 添加了
VolumeConstraints.Unbounded同伴对象,表示无界限制条件。 - 添加了
SubspaceModifier.onPointSourceParams,以允许空间化音频源。 - 添加了公开的
ApplicationSubspace,提供可选的VolumeConstraints来定义应用可以呈现空间内容的 3D 区域。默认情况下,如果未指定任何限制条件,则子空间将受SpatialUser当前视野范围的宽度和高度限制。如果无法确定视野范围,用户可以提供要使用的限制条件。否则,将使用默认的视场宽度和高度值。 - 添加了
SpatialExternalSurface,可用于呈现立体内容。SpatialExternalSurface可使用修饰符(alpha 除外)和边缘羽化效果进行自定义。 - 添加了新的
pointerHoverIcon子空间修饰符,可让用户设置空间指针的图标。
API 变更
- 移除了对所有 Jetpack XR 软件包的
RequiresApi(34)限制。由于 Jetpack XR 目前仅适用于 API 级别为 34 及更高级别的设备,因此此限制是多余的。(Iae0f8) - 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本。(Idb6b5)
- 现在,无需嵌入式 Activity 即可在空间面板上处理返回操作。如需处理返回操作,您需要在 Android 清单中指定
android:enableOnBackInvokedCallback="true"。 - 现在,可以在空间对话框中处理返回操作。如需处理返回操作,您需要在 Android 清单中指定
android:enableOnBackInvokedCallback="true"。 - 基于 Compose 和基于 View 的
SpatialPanel现在可以根据其内容调整自身大小。 - 开发者现在可以设置自己的自定义
SpatialElevationLevel值,而不受预定义级别的限制。 - 现在可以通过
elevation参数自定义轨道器海拔高度。 - 现在,子空间默认情况下可以受
SpatialUser视野范围的宽度和高度限制。如果无法确定视野范围,则使用默认的视野范围宽度和高度值。 - 向
Movable修饰符添加了新的回调onMoveStart和onMoveEnd。当用户开始和结束使用可移动修饰符移动子空间可组合项时,系统会调用onMoveStart和onMoveEnd回调。 - 从
SpatialRow和SpatialPanel等空间 API 中移除了name参数。如需调试空间 Compose 树,请改用SubspaceModifier.testTag。 - 移除了仅具有
spatialElevationLevel和content的SpatialPopup不受支持的重载。请使用支持onDimissRequest的接口。 - 移除了 Movable 修饰符中的
onPoseChange回调。请改用onMove。 - 如果
SubspaceModifiers已分离或当前正在分离,则它们将不再应用其效果。 - 现有的
SpatialRowAPI 已拆分为SpatialRow和SpatialCurvedRow。如果之前使用SpatialRow的curveRadius参数,请现在改用SpatialCurvedRow,它提供相同的行为。 - 在类似最新的系统映像上运行时,
MainPanel和ActivityPanel不再具有标题栏。 - Alpha 和缩放修饰符现在可以堆叠,并将乘以其值以获得最终应用的 alpha 或缩放值。
- 优化了 Movable 修饰符中的
onPoseChange回调,以执行更平滑的姿势移动。 - 可移动和可调整大小的修饰符现在将在主线程上执行其回调,以确保状态更改将触发重组。
- 在布局和测量阶段添加了状态观察,以确保
SubspaceLayout中的状态更改将触发重新布局。 - 优化了修饰符链更新,以更好地重复使用现有修饰符。
bug 修复
- 在显示
SpatialDialog时停止遮盖。(Ic4594) - 现在,在修饰符节点分离时发出的重新布局请求将被忽略。
- 移除了由 Movable 和 Resizable 修饰符触发的重新布局阶段。
- 修复了
MainPanel()可组合项中的崩溃问题,该问题是在任一维度设置为零时(直接或在布局计算期间,例如SpatialRow/SpatialColumn计算)发生的。现在,面板将被隐藏。请注意,此修复专门解决了布局阶段的崩溃问题;通过用户互动将面板调整为零大小的操作将单独处理。隐藏的面板缺少界面功能。 - 修复了可调整大小的修饰符中的
maintainAspectRatio问题。现在应该保留宽高比。 - 修复了嵌套子空间的问题,这些子空间在单个帧中会错误地定位。
- 修复了有时不应用圆角的问题。
NestedSubspaces将不再在错误的位置显示一个帧。
1.0.0-alpha03
2025 年 2 月 26 日
发布了 androidx.xr.compose:compose:1.0.0-alpha03 和 androidx.xr.compose:compose-testing:1.0.0-alpha03,与上一个 Alpha 版相比没有明显变化。版本 1.0.0-alpha03 中包含 这些提交内容
1.0.0-alpha02
2025 年 2 月 12 日
发布了 androidx.xr.compose:compose:1.0.0-alpha02 和 androidx.xr.compose:compose-testing:1.0.0-alpha02。版本 1.0.0-alpha02 中包含 这些提交内容。
新功能
- 现在,当空间对话框被激活时,Activity 面板可以遮盖其内容。
- 现在,
OrbiterAPI 可在SubspaceComposable上下文中使用,并将轨道器附加到其最近的基于SubspaceLayout的可组合父项。 - 引入了
LayoutCoordinatesAwareModifierNode,以允许自定义基于位置的修饰符。 - 向
SubspaceModifier.Node添加了附加/分离生命周期方法。 - 向可移动修饰符添加了
scaleWithDistance。启用scaleWithDistance后,移动的子空间元素将增大或缩小。它还将保留移动前所具有的任何显式缩放比例。
API 变更
- 移除了
SessionCallbackProvider,改为使用SpatialCapabilities。
其他变化
- 将
minSDK降至 24。所有 Jetpack XR API 在运行时仍需要 API 34。 OrbiterEdgeOffset.inner、EdgeOffset.outer和EdgeOffset.overlap构造函数不再是@Composable方法,因此可以在非可组合上下文中使用。- 更新了空间海拔高度级别,以匹配最新的用户体验规范。
- 将
SubspaceSemanticsInfo接口实现到MeasurableLayout中。 - 将
SubspaceModifierElement重命名为SubspaceModifierNodeElement。
bug 修复
- 修复了
SubspaceModifier排序问题,使其更加稳定。SubspaceModifier的行为应该更加可靠。现在,可以按任意顺序使用偏移、旋转、缩放、可移动和可调整大小的修饰符。
1.0.0-alpha01
2024 年 12 月 12 日
发布了 androidx.xr.compose:compose-*1.0.0-alpha01。
初始版本的功能
Jetpack Compose for XR 的初始开发者版本。使用熟悉的 Compose 概念(例如行和列)在 XR 中创建空间界面布局,无论您是将现有 2D 应用移植到 XR 还是从头开始创建新的 XR 应用。此库提供子空间和空间可组合项:例如空间面板和轨道器,可让您将现有的 2D Compose 或基于 View 的界面放置在空间布局中。它引入了 Volume 子空间可组合项,可让您相对于界面放置 SceneCore 实体(例如 3D 模型)。如需了解详情,请参阅此开发者指南:
Subspace:此可组合项可以放置在应用界面层次结构中的任何位置,让您能够维护 2D 和空间界面的布局,而不会丢失文件之间的上下文。这样,您就可以更轻松地在 XR 和其他设备类型之间共享现有应用架构等内容,而无需通过整个界面树提升状态或重新设计应用。SpatialPanel:空间面板是一种子空间可组合项,可让您显示应用内容,例如,您可以在空间面板中显示视频播放、静态图片或任何其他内容。
Orbiter:轨道器是一种空间界面组件。它旨在附加到相应的空间面板,并包含与该空间面板相关的导航和关联操作项。例如,如果您创建了一个空间面板来显示视频内容,则可以在轨道器内添加视频播放控件。
体积:相对于界面放置 SceneCore 实体(例如 3D 模型)。
空间布局: 您可以使用
SpatialRow、SpatialColumn、SpatialBox和SpatialLayoutSpacer创建多个空间面板,并将它们放置在空间布局中。 使用SubspaceModifier自定义布局。空间界面组件:这些元素可以在 2D 界面中重复使用,并且其空间属性仅在启用空间功能时可见。
SpatialDialog:面板将在 z 深度中略微向后推,以显示提升的对话框。SpatialPopUp:面板将在 z 深度中略微向后推,以显示提升的弹出式窗口SpatialElevation:可以设置SpatialElevationLevel以添加海拔高度。
SpatialCapabilities:空间功能可能会随着用户与应用或系统的互动而变化,甚至可能会被应用本身更改,例如,进入主共享空间或全沉浸空间。为避免出现问题,应用需要检查
LocalSpatialCapabilities.current以确定当前环境中支持哪些 API。isSpatialUiEnabled:空间界面元素(例如 SpatialPanel)isContent3dEnabled:3D 对象isAppEnvironmentEnabled:环境isPassthroughControlEnabled:应用是否可以控制透视状态isSpatialAudioEnabled:空间音频
已知问题
- 目前,使用 Jetpack Compose for XR 需要 minSDK 为 30。作为一种解决方法,您可以添加以下清单条目
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>,以便能够使用 minSDK 为 23 进行构建和运行。 - Jetpack XR 应用目前需要在 Android 清单中请求
android.permission.SCENE_UNDERSTANDING权限。 - 当应用使用清单中的
PROPERTY_XR_ACTIVITY_START_MODE属性直接启动到全沉浸空间时,Activity/应用最初会在主共享空间中打开,然后再转换为全沉浸空间。 - Volume 可组合项中的 glTF 最初可能会在错误的位置闪烁。
- 在已大幅移动的面板中使用 SpatialDialog 会将内容推向错误的方向。