Jetpack Compose for XR

以声明方式构建利用 Android 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-alpha12androidx.xr.compose:compose-testing:1.0.0-alpha12。版本 1.0.0-alpha12 中包含 这些提交内容

API 变更

  • 添加了 SpatialGltfModel API 和 SpatialGltfModelAnimation API,用于呈现 glTF 并控制动画。将 SpatialGltfModelState 更改为 AutoCloseable,现在需要将其关闭以释放其资源。(I11fdeb/466065486b/481379924)。不过,在进行其他测试之前,SpatialGltfModel API 在此版本中被标记为受限。(Ibf003b/466090694)
  • SubspaceModifier.rotate 添加了已废弃的空重载。(Idceb6)
  • SpatialSmoothFeatheringEffect 函数重命名为 spatialSmoothFeatheringEffect,并将其移至绘制模块。将 SpatialExternalSurface 的默认羽化值更新为 null,这模仿了旧的 ZeroFeatheringEffect 功能。(I5fdaab/460426800)
  • 移除了 onPointSourceParamsAvailable。我们将在不久的将来提供不同的音频空间化 API。(I86507b/458513439)
  • 为偏移子空间修饰符添加了 RTL 行为。还添加了 absoluteOffset 以忽略布局方向。(I30e4bb/474409165)

1.0.0-alpha11

2026 年 2 月 25 日

发布了 androidx.xr.compose:compose:1.0.0-alpha11androidx.xr.compose:compose-testing:1.0.0-alpha11。版本 1.0.0-alpha11 中包含 这些提交内容

新功能

  • SpatialExternalSurfaces 添加了 SuperSampling 参数 (Icd4d1)

API 变更

  • 子空间修饰符内边距更改,以感知布局方向。(I53e25)
  • SpatialCapabilities 现在是密封的,无法扩展。(I07aef)
  • 接受通用 SpatialAlignment 参数的 SpatialRowSpatialColumn API 已废弃;请改为使用分别接受 verticalAlignmenthorizontalAlignmentSpatialRowSpatialColumn API。(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-alpha10androidx.xr.compose:compose-testing:1.0.0-alpha10。版本 1.0.0-alpha10 中包含 这些提交内容

API 变更

1.0.0-alpha09

2025 年 12 月 3 日

发布了 androidx.xr.compose:compose:1.0.0-alpha09androidx.xr.compose:compose-testing:1.0.0-alpha09。版本 1.0.0-alpha09 中包含 这些提交内容

API 变更

  • 添加了 LookAtUser 和广告牌修饰符,可让内容始终面向用户。(I49b99)
  • 添加了为 SpatialExternalSurfacesSpatialPanels 设置 InteractionPolicy 的功能,可检测点击和其他 3D 输入事件。(Iae155)
  • 添加了大小和 requiredSize 修饰符重载,宽度、高度和深度均为 Dp 值。(I92f79)
  • ParentLayoutParamsModifier 接口现在扩展了 DelegatableSubspaceNode。(I1a6d4)
  • ApplicationSubspace 已废弃,取而代之的是 Subspace API。
    • Subspace API 行为已更改为仅以建议的姿势和缩放比例提供应用级子空间。
    • 引入了 PlanarEmbeddedSubspace API,用于在 2D 上下文中提供嵌入式子空间。(Id3343)
  • SubspaceModifier.Node API 添加了 shouldAutoInvalidate 标志。(I93902)
  • 在允许开发者将 @SubspaceComposable 的大小限制为特定范围(忽略父项的传入测量限制)的 API 中添加了 required(Size|Width|Depth|Height)。(Ifaa78)
  • 添加了 SubspaceModifier.onSizeChanged,为开发者提供了一个简单的专用回调,以便在 @SubspaceComposable 的大小发生变化时做出响应。(I994f9)
  • 移除了 Volume API。应使用 SceneCoreEntity API 而不是 Volume API。(I4162b)
  • SubspaceLayoutModifierNode.requestRelayout 拆分为 invalidateMeasurement/invalidatePlacement。(I14805)
  • 添加了 SpatialGltfModel API,可让开发者在 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-alpha08androidx.xr.compose:compose-testing:1.0.0-alpha08。版本 1.0.0-alpha08 中包含 这些提交内容

API 变更

  • 更改了 ResizePolicy 以接受 onResizeStartonResizeUpdateonResizeEnd。(I7e21f)

bug 修复

  • 防止在销毁具有子空间的 Activity 时发生崩溃。(I595a1)

1.0.0-alpha07

2025 年 9 月 24 日

发布了 androidx.xr.compose:compose:1.0.0-alpha07androidx.xr.compose:compose-testing:1.0.0-alpha07。版本 1.0.0-alpha07 中包含 这些提交内容

API 变更

  • 改进了 SpatialMainPanel 的 KDocs。(I27b70b/444467891)
  • 引入了 SpatialArrangement,用于在 SpatialRowSpatialColumn 等 3D 布局中沿主轴排列子项。此新 API 提供了来自 2D Compose 的常用排列选项,包括 StartEndCenterSpaceBetweenSpaceAroundSpaceEvenly,并完全支持 LTR 和 RTL 布局方向。(I7db38b/436289959)
  • SubspaceModifier.Node 添加了基本接口,以提高扩展接口的类型安全性和可用性;例如
    • CompositionLocalConsumerSubspaceModifierNode
    • LayoutCoordinatesAwareModifierNode
    • SubspaceLayoutModifierNode
    • CoreEntityNode(内部)(Iede00b/440599394b/440599394)
  • 取消了对 SpatialExternalSurface 的限制 (I33315b/439646773)
  • 向 Subspace 可组合项引入了 SubspaceModifier,并将限制条件参数替换为具有大小相关 SubspaceModifiersSubspaceModifier。如果 allowUnboundedSubspace 为 true,则子空间仍可以具有无界限制条件。(Ib06e6b/433331675)
  • 废弃了可移动和可调整大小的 SubspaceModifiers,因为 DragPolicy()ResizePolicy() 现在是 SpatialPanelSpatialExternalSurface API 的一部分 (I397bfb/437924639)
  • 添加了对空间布局中 LayoutDirection 的支持。使用 SpatialAlignment 的可组合项现在可以在 LTR 和 RTL 上下文中正确放置元素。(I964bbb/436300273)
  • Panel API 添加了 Resizable 和 Movable 参数,以确保这些行为只能应用于受支持的容器。(Id491c)
  • 添加了 sizeInwidthInheightIndepthIn SubspaceModifiers,可让您为宽度、高度和深度设置确切的最小和最大限制条件。(I1af09b/433330761)

1.0.0-alpha06

2025 年 8 月 13 日

发布了 androidx.xr.compose:compose:1.0.0-alpha06androidx.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-alpha05androidx.xr.compose:compose-testing:1.0.0-alpha05。版本 1.0.0-alpha05 中包含 这些提交内容

新功能

  • SubspaceComposable 注解类设为公开。(Ic2a34b/399432430)
  • 两个新的 SpatialExternalSurface 可组合项,分别表示 180 度和 360 度球体。(I40ef2b/391705799)
  • 添加了 SubspaceModifier.aspectRatio (Ide5abb/399729509b/414762147)
  • 添加了 SceneCoreEntity API,以改进 SceneCore 和 Compose for XR 之间的互操作性。(I50bb3b/423020989)
  • 提供了 GravityAlignedsubspace API,以支持未缩放的 And GravityAligned 功能 (I07359)

API 变更

  • SpatialDialog() 将遵循 SpatialDialogProperties.dismissOnBack 按压配置。(Ib453bb/416797132)
  • minimumPanelDimension 更新为新的默认尺寸大小 Dimensions(0.1f, 0.1f, 0.1f),因为其以米为单位表示。(Ib852a)
  • 子空间和轨道器现在将在主空间和应用处于后台时保留其内部状态。在主空间模式下,子空间仍会设置其场景,为切换到全沉浸空间模式做准备。(I40317b/416037751)
  • SpatialDialogs 现在将在应用处于后台时保留其状态。(I6aa56)
  • ApplicationSubspace 现在将从系统继承其建议的缩放比例和位置。(I4565fb/418834194)
  • SubspaceComposable 在非 SubspaceComposable 上下文中使用时,添加了更好的出错提示并提前触发错误。(Iee2aeb/416484684)
  • ExperimentalSubspaceVolumeApi 从“警告”更新为“错误”,因为在误用可组合 API 时,警告经常会被忽略。(I427aab/424864286)
  • 子空间和 ApplicationSubspace 现在受 recommendedContentBoxInFullSpace 限制。之前,它受 SpatialUser 的视野范围限制。(I41015b/423074142)
  • 更新了 SpatialElevation 以使用最小尺寸,不再使用硬编码尺寸 (I2dbe6b/427785338)
  • 更新了我们对 SpatialAcitivityPanel 进行遮盖的方式,以便在修改关键变量时进行更新。(I0f64db/427999029)
  • 移除了 VolumeConstraints.Unbounded,改为将默认限制条件值设置为等效值。(Ie24ecb/407938414)
  • SpatialFeatheringSize 不再是公开的 (I1c15bb/399432430)
  • 将 XR Placeable 重命名为 SubspacePlaceable,以将其与 Compose 的 Placeable 区分开。(I74874)
  • 移除了轨道器设置,并添加了 shouldRenderInNonSpatial 作为新参数。此外,还移除了类 EdgeOffset,并添加了 orbiterOffsetType 作为新参数,以整合 Orbiter() 函数。以及将 OrbiterEdge 重命名为 ContentEdge。(Iebf3d)
  • Measurable 重命名为 SubspaceMeasurable,以将该类型与 Compose 的 Measurable 类型区分开。(I9726c)
  • MeasureResult 重命名为 SubspaceMeasureResult (I9f34d)
  • 移除了 setSubspaceContent API,改为使用 Compose 的 setContentSubspace 可组合项。(Ifff4cb/421427391b/421427391)
  • MeasurePolicy 重命名为 SubspaceMeasurePolicy。(I37a9bb/422553904)
  • SubspaceSemanticsInfo 转换为密封接口,因为如果没有默认值,我们将无法添加成员。(I372f9b/423704068)
  • 更新了 SpatialExternalSurface 文档,将 ContentSecurityLevel 重命名为 SurfaceProtection (I3c460b/420982808)
  • 为可移动修饰符提供了重载的构造函数,可用于锚定。(Ic0c70)
  • 为工具提示添加了更多位置信息提供程序,因此开发者现在可以控制工具提示是放置在锚点的上方、下方、左侧还是右侧。添加了一个 API,用于接收插入符号的形状,因此可以提供更多自定义形状。(Ie513cb/374766087b/418854637)
  • 移除了 CoreEntity 作为 PublishedApi (Ifee05)

bug 修复

  • 修复了 SpatialDialog 在呈现时闪烁的问题。(Ife73cb/401619909)
  • 修复了 SpatialDialog 无法遮盖 Activity 面板的问题。(I8ca6c b/367442109)
  • 修复了 XR 对话框不显示某些内容的问题 (I17cd5b/418062437)
  • 修复了在内容内点击时 SpatialPopup 被关闭的问题。(If262cb/417245722)
  • 修复了在链接 resizable().movable() 时,SpatialPanel 无法正确调整为新大小的问题。(I02ee3b/422264230)
  • 修复了 SpatialComposeVideoPlayertopBar 与菜单重叠的问题 (Id33bcb/427168167)
  • 修复了圆角不呈现的问题 (I975feb/428261830)

1.0.0-alpha04

2025 年 5 月 7 日

发布了 androidx.xr.compose:compose:1.0.0-alpha04androidx.xr.compose:compose-testing:1.0.0-alpha04。版本 1.0.0-alpha04 中包含 这些提交内容

新功能

  • 添加了 CompositionLocalConsumerSubspaceModifierNode 接口,以允许自定义 SubspaceModifier 类型访问组合本地值。
  • 添加了新的 SpatialPanel API,该 API 遵循 Compose AndroidView 实现样式,并废弃了之前的 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 修饰符添加了新的回调 onMoveStartonMoveEnd。当用户开始和结束使用可移动修饰符移动子空间可组合项时,系统会调用 onMoveStartonMoveEnd 回调。
  • SpatialRowSpatialPanel 等空间 API 中移除了 name 参数。如需调试空间 Compose 树,请改用 SubspaceModifier.testTag
  • 移除了仅具有 spatialElevationLevelcontentSpatialPopup 不受支持的重载。请使用支持 onDimissRequest 的接口。
  • 移除了 Movable 修饰符中的 onPoseChange 回调。请改用 onMove
  • 如果 SubspaceModifiers 已分离或当前正在分离,则它们将不再应用其效果。
  • 现有的 SpatialRow API 已拆分为 SpatialRowSpatialCurvedRow。如果之前使用 SpatialRowcurveRadius 参数,请现在改用 SpatialCurvedRow,它提供相同的行为。
  • 在类似最新的系统映像上运行时,MainPanelActivityPanel 不再具有标题栏。
  • 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-alpha03androidx.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-alpha02androidx.xr.compose:compose-testing:1.0.0-alpha02。版本 1.0.0-alpha02 中包含 这些提交内容

新功能

  • 现在,当空间对话框被激活时,Activity 面板可以遮盖其内容。
  • 现在,Orbiter API 可在 SubspaceComposable 上下文中使用,并将轨道器附加到其最近的基于 SubspaceLayout 的可组合父项。
  • 引入了 LayoutCoordinatesAwareModifierNode,以允许自定义基于位置的修饰符。
  • SubspaceModifier.Node 添加了附加/分离生命周期方法。
  • 向可移动修饰符添加了 scaleWithDistance。启用 scaleWithDistance 后,移动的子空间元素将增大或缩小。它还将保留移动前所具有的任何显式缩放比例。

API 变更

  • 移除了 SessionCallbackProvider,改为使用 SpatialCapabilities

其他变化

  • minSDK 降至 24。所有 Jetpack XR API 在运行时仍需要 API 34。
  • Orbiter EdgeOffset.innerEdgeOffset.outerEdgeOffset.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 模型)。

  • 空间布局: 您可以使用 SpatialRowSpatialColumnSpatialBoxSpatialLayoutSpacer 创建多个空间面板,并将它们放置在空间布局中。 使用 SubspaceModifier 自定义布局。

  • 空间界面组件:这些元素可以在 2D 界面中重复使用,并且其空间属性仅在启用空间功能时可见。

    • SpatialDialog:面板将在 z 深度中略微向后推,以显示提升的对话框。
    • SpatialPopUp:面板将在 z 深度中略微向后推,以显示提升的弹出式窗口
    • SpatialElevation:可以设置 SpatialElevationLevel 以添加海拔高度。
  • SpatialCapabilities:空间功能可能会随着用户与应用或系统的互动而变化,甚至可能会被应用本身更改,例如,进入主共享空间或全沉浸空间。为避免出现问题,应用需要检查 LocalSpatialCapabilities.current 以确定当前环境中支持哪些 API。isSpatialUiEnabled空间界面元素(例如 SpatialPanel) isContent3dEnabled3D 对象 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 会将内容推向错误的方向。