Jetpack Compose for XR
| 最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2026 年 10 月 21 日 | - | - | 1.0.0-beta02 | - |
声明依赖项
如需添加 XR Compose 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.xr.compose:compose:1.0.0-beta02" // Use to write unit tests testImplementation "androidx.xr.compose:compose-testing:1.0.0-beta02" }
Kotlin
dependencies { implementation("androidx.xr.compose:compose:1.0.0-beta02") // Use to write unit tests testImplementation("androidx.xr.compose:compose-testing:1.0.0-beta02") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.0
版本 1.0.0-beta02
2026 年 10 月 21 日
发布了 androidx.xr.compose:compose:1.0.0-beta02 和 androidx.xr.compose:compose-testing:1.0.0-beta02。版本 1.0.0-beta02 包含这些提交内容。
API 变更
- 库现在以 Kotlin 2.2 为目标平台,并且需要 kotlinc 2.2 (I82396, b/498369605)
- 将
FollowMode.soft()的halfLifeMs参数重命名为halfLifeMillis。(I39187) - 将
PitchLimits转换为@JvmInline value class,将两个浮点数打包到一个Long中,以消除对象分配。(Id43c3) - 为
FollowMode.soft添加了新参数:halfLifeMs、startDelay和startThresholds参数。移除了参数durationMs,因为在从smoothStep算法过渡到exponentialDecay算法后,不再需要该参数。(If0140) - 移除了已废弃的
SpatialActivityPanel重载。请改用接受SpatialActivityPanelController的SpatialActivityPanel重载。(I5abc3) - 在
FullSpaceMode中,支持在单个 Activity 内实现 3D 和 2D 可组合项内容之间的转换。此变更受SpatialComposeFlags.isMainPanelResetOnSubspaceDisposeEnabled控制。(I4e237) - 公开了接受
FollowTarget参数的实验性Subspace过载,以支持以下内容。(Iec1a9) - 移除了已废弃的可移动修饰符。请改用新的可移动修饰符,该修饰符接受新的
MovePolicy作为参数。(Ib135d) - 移除了已废弃的
DragPolicy。已改用SubspaceModifier.movable()。(I108d4) - 废弃了无状态
Slider和RangeSlider重载,改为使用其有状态版本。将RangeSliderState中的activeRangeStart和activeRangeEnd重命名为了startValue和endValue,并弃用了带有DeprecationLevel.HIDDEN的旧版未升级和实验性 Slider API。(If8995)
bug 修复
- 通过引入
poseInActivitySpace修复了RotateToLookAtUser,以确保为所有子空间类型(包括附加到锚点或用户的子空间类型)正确计算姿势。Ica367b - 修复了 Orbiter 附加到大型面板时发生的 Constraints 崩溃问题 (I8c4bf)
- 修复了
SubspaceLayoutNode中的一个 bug,即removeAll()会导致不必要的ArrayList分配。还修复了深度计算性能问题。I34a10a androidx.lifecycle:lifecycle-runtime依赖项已更新至 2.10.0。此版本是捆绑的生命周期运行时 lint 检查在 AGP 9.5.0-alpha04 或更高版本中运行所必需的。(I99bfd、b/556807521)- 改进了与
AudioOutputProvider相关的 kdoc,以强调不应将其与多个ExoPlayer实例重复使用 (I6b18e) - 修复了 kdoc 的一些细微拼写和语法问题 (Id3ba6)
已知问题
- 此版本的
androidx.xr.compose依赖于androidx.xr.scenecore:1.0.0-rc01,后者存在已知的内存泄漏问题。在 build 配置中,您可以明确将SceneCore依赖项替换为1.0.0版本,其中包含针对内存泄漏问题的修复。
版本 1.0.0-beta01
2026 年 9 月 23 日
发布了 androidx.xr.compose:compose:1.0.0-beta01 和 androidx.xr.compose:compose-testing:1.0.0-beta01。版本 1.0.0-beta01 包含这些提交内容。
API 变更
- 移除了已废弃的
DragPolicy。已改用SubspaceModifier.movable()。(I108d4) - 移除了已废弃的
ResizePolicy及其在SpatialPanel和SpatialExternalSurface中的用法。移除了已废弃的SubspaceModifier.resizable函数。请改用新的SubspaceModifier.resizable和新的ResizePolicy。(I59e6b) - 添加了
isPitchUpdateEnabled参数,以便单独启用或停用音高跟踪。(Ie9e86) - 移除了
pitchLimits的可为 null 性,并将PitchLimits.UNCONSTRAINED重命名为PitchLimits.FullRange。(I0154f) ExposedDropdownMenu现在是ExposedDropdownMenuBoxScope的扩展函数,而不是成员。您可能需要使用新的导入语句来更新代码。(Ie8a65)- 移除了已废弃的
SurfaceProtection类。已改用SpatialExternalSurfaceProtection。(Iab2c6) - 采用
OrbiterPoseProvider的 Orbiter 函数已被弃用,取而代之的是使用SpatialAlignment的函数。(I4d12b) SpatialActivityPanel现在需要SpatialActivityPanelController(使用rememberSpatialActivityPanelController实例化)来启动和管理嵌入式 activity。(Id25c6)- 从
rotateToLookAtUser中移除了upDirection参数,并添加了旋转限制参数(isYawUpdateEnabled和pitchLimits)。(I1370a)
bug 修复
- 修复了各种
InteractionPolicy问题。如果输入事件发生在可组合项或子项(例如 Orbiter)启动处置序列时,则会发生崩溃。还修复了子级会收到悬停事件的问题。(Ifc477) - 缩小了
RotateToLookAtUserActivity中的面板尺寸,以防止在视野较小的设备上出现画面被裁剪的情况。(I8d672)
已知问题
- Compose XR 面板存在一个问题:在单个 activity 中创建多个面板可能会导致正在查看的内容出现一些损坏,即使在面板销毁后也是如此。
版本 1.0.0-alpha17
2026 年 8 月 12 日
发布了 androidx.xr.compose:compose:1.0.0-alpha17 和 androidx.xr.compose:compose-testing:1.0.0-alpha17。版本 1.0.0-alpha17 包含这些提交内容。
API 变更
- 移除了
Meter值类,该类在Scenecore中被virtualPixelDensity替换。(I690ee) SpatialGltfModelAPI 目前处于实验阶段,必须选择启用才能使用。(I4557e)- 将
systemresizable 设为可为 null (Ib0093) - 在
SubspaceSemanticsInfo中公开了Density,用于测试。(I2e826) - 将
ResizePolicy默认选项重命名为system,并添加了不带参数的新Default选项 (Ic8b16) - 将
FollowTarget标记为实验性。整个FollowingSubspaceAPI 目前处于实验阶段。(Id4ee3) - 移除了
GltfAnimationAPI (Ic2894) - 将参数化
MovePolicy.default()方法重命名为MovePolicy.system()。引入了val MovePolicy.Default属性,用于表示标准默认移动行为。(Iedcc9) - 将
ExperimentalMoveAnchorPolicy选择启用要求扩展到PlaneSemantic和PlaneOrientation(Ief927) - 从
VolumeConstraints.offset中移除了resetMins(Ib2f2f) - 移除了已弃用的
SceneCoreEntitySizeAdapter函数。(Ib6722) - 移除了已废弃的
Subspace重载,并替换为allowUnboundedSubspace。(I8e97f) - 移除了已废弃的语义修饰符重载。(I4ac10)
bug 修复
- 修复了以下问题:附加了
InteractionPolicy的Composable的子级会触发输入事件 (Icdba6)
版本 1.0.0-alpha16
2026 年 7 月 15 日
发布了 androidx.xr.compose:compose:1.0.0-alpha16 和 androidx.xr.compose:compose-testing:1.0.0-alpha16。版本 1.0.0-alpha16 包含这些提交内容。
API 变更
- 移除了
ComponentOverrideAPI (I820c4) GltfAnimation和SpatialGltfModelAnimationAPI 已标记为实验性。某些属性已转换为 getter。(I8d689、b/524771027)- 通过将米和像素之间的转换设置为常量,修复了整体密度行为。Meter.kt 已废弃,现在可以使用
Session.scene.virtualPixelDensity作为替代方案。(I122ff、b/430097855、b/474168798) - 更新了 resizable 修饰符,以使用一个
ResizePolicy,而不是两个修饰符 (I7fb0f, b/496257436, b/519672992) - 向
SubspaceAssertions.kt中的所有公共浮点维度和位置相等性断言添加了 tolerance:Dp = Dp(0.5f)参数。默认容忍度行为 (0.5.dp) 已完整记录。(I266cb、b/521491915) - 添加了带有
movePolicy参数的可移动重载,并废弃了transformingMovable和movable(Ic88c1, b/481781189) - 添加了遵循 Material Expressive 规范的标准列表项和分段列表项的新非交互式变体。非表达版本已被弃用。(Ide4de、b/491994186)
- 对于子空间,
allowUnboundedSubspace参数现已弃用并隐藏。现在,应通过在 Subspace 修饰符上使用SubspaceModifier.requiredSizeIn(maxWidth=Dp.Infinity,maxHeight=Dp.Infinity,maxDepth=Dp.Infinity) 来实现无边界行为。allowUnboundedSubspace参数已从FollowingSubspace中移除。(Ia72ae、b/433624021) - 将
Session.create转换为挂起函数。(I5d27f) - 添加了
SubspaceModifier.spatializedAudioOutput,允许通过ExoPlayer或SoundEffectPlayer空间化音频播放(I46697、b/489421980、b/497867019) - 更新了
ComponentActivity.requestHomeSpace()和requestFullSpace(),以返回SpaceRequestResult进行状态验证。(If1672) - 将
AnchorEntity更新为AnchorSpace(Ifa95e, b/513619219) - 取消了对
SpatialGltfModelSource中fromResource方法的限制 (I1f5a1, b/503047416) SubspaceSemanticsMatcher成员是公开的:description属性、伴生工厂方法(expectValue、keyIsDefined、keyNotDefined)、成员函数(matches、matchesAny)和运算符(and、or、not)。(I972a4, b/460427288)- 更新了
SubspaceModifier.semantics、SubspaceModifier.testTag、SubspaceSemanticsInfo、SubspaceSemanticsModifierNode,以使用精选的空间语义类型。(I80dea、b/460427288) - 在
SpatialAlignment中将position重命名为align,并移除了各个方向偏移方法,改为使用统一的alignAPI。(I9bdb2、b/479805937) - 从
SpatialConfiguration中移除了已废弃的 Space Mode API。(I1ef5c、b/458712461) - 推出了
SubspaceSemanticsConfiguration。这是空间节点的语义属性配置。此类可安全地公开 3D 语义的查询方法,而不会向外部使用者泄露基础 2D 语义功能。(Id025e、b/460427288) - 引入了
SubspaceSemanticsPropertyReceiver:一个专用封装容器,可将 3D 布局容器属性限制为有效字段(最初为testTag和contentDescription)。(I5cf5c, b/460427288)
bug 修复
- 将语义修饰符的
hasContentDescription更新为默认使用子字符串匹配。(I08214) - 添加了受限的
FollowBehavior.ExponentialDecay(),它提供由弹性物理学引导的软跟随行为。(I7449c、b/485639909、b/500493335)
大多数 API 都会受到影响。具体而言,LocalSession CompositionLocal 和依赖于 LocalSession 的所有 CompositionLocals(例如 LocalSpatialConfiguration、LocalSpatialCapabilities 等)现在都会在 Session 初始化之前解析为 null 或其非 XR 版本。
Session 可用后,系统会以正确的状态触发重组。(I0cfa4、b/514712835、b/514712835)
- 阐明了
ComponentActivity.requestHomeSpace和ComponentActivity.requestFullSpace的文档,涉及挂起行为、取消和并发。更新了测试,以验证CancellationException传播。(I22f75、b/493289528)
版本 1.0.0-alpha15
2026 年 6 月 17 日
发布了 androidx.xr.compose:compose:1.0.0-alpha15 和 androidx.xr.compose:compose-testing:1.0.0-alpha15。版本 1.0.0-alpha15 包含这些提交内容。
API 变更
- 废弃了
ResizePolicy和旧的可调整大小修饰符,取而代之的是新的SubspaceModifier.resizable重载和SubspaceModifier.transformingResizable。(I9e4bc) - 更新了
SpatialGltfModelAPI:添加了对通过SpatialGltfModelSource.fromResource从资源加载模型的支持。在SpatialGltfModelAnimation中将 speed 重命名为playbackSpeed,并添加了 resume() 方法。SpatialGltfModelStatus.Loaded 和 Loading 现在是对象。(I523de) - 将
rotateToLookAtUser标记为实验性 API。(I86c16) - 将受保护的变量
targetCurrentPose移至局部变量currentTargetPoseMeter并重命名。(Ia557c) - 更新了
SpatialPanel和SpatialExternalSurfacekdoc,以包含对象在其布局大小中的呈现位置 (I72104) - 在
SpatialGltfModelState中封装了SpatialGltfModel加载逻辑,并阐明了失败行为。(Ibe98b) - 在
SubspaceModifer.sizekdocs 中阐明了depth(I0f84f)
版本 1.0.0-alpha14
2026 年 5 月 19 日
发布了 androidx.xr.compose:compose:1.0.0-alpha14 和 androidx.xr.compose:compose-testing:1.0.0-alpha14。版本 1.0.0-alpha14 包含这些提交内容。
API 变更
- 引入了
transformingMovable,用于默认由系统处理的 3D 移动;并引入了movable的新重载,用于处理自定义移动行为。(I50960) - 已移除
SpatialGltfModel.fromData()。(I4d083) - 添加了新的修饰符节点接口
SubspaceMeasuredSizeAwareModifierNode,该接口在测量传递后提供onRemeasured回调。SubspaceLayoutAwareModifierNode现在扩展了此新接口。onSizeChanged修饰符已更新为使用onRemeasured,以确保在测量后立即触发回调,而不是在放置后触发。(Iafbae) - 将
InteractionPolicy更新为Interface(I0ff30) - 将 Compose
compileSdk更新到了 API 37。这意味着,使用 Compose 时,AGP 版本至少需要为 9.2.0。(Id45cd) - 更新了
Sizekdocs (Iefa9a)
版本 1.0.0-alpha13
2026 年 5 月 6 日
发布了 androidx.xr.compose:compose:1.0.0-alpha13 和 androidx.xr.compose:compose-testing:1.0.0-alpha13。版本 1.0.0-alpha13 包含这些提交内容。
API 变更
- Orbiter API 还有待进一步更改,我们建议您忽略 Orbiter 的弃用通知,并留意即将发布的版本中 Orbiter 的更改。
- 使用
SceneCoreEntity呈现 glTF 的用户应确保将session.scene.activitySpace传递给其GltfModel.create调用的parent参数,以确保其 glTF 能够呈现。 - 添加了
SpatialGltfModelAPI,以便开发者向其 Compose for XR 应用添加 Gltf。开发者还可以查询其 glTF 模型中的动画和节点。(I8b542、b/495422586) - 将
SceneCoreEntitySizeAdapter从类更改为接口 (I5a784, b/475292310) SurfaceProtection已重命名为SpatialExternalSurfaceProtection。更新了SpatialExternalSurfacekdocs (Ifad0a, b/485231082)- 弃用
currentWindowAdaptiveInfo并引入其 V2 版本 (I40ecf, b/424442112) resizable修饰符现已公开,并适用于组(例如SpatialRow)。(I2bcf6, b/348483527, b/489753178, b/479530787)movable修饰符现已公开。目前,此修饰符适用于SpatialPanels和SpatialExternalSurface;不过,我们的目标是让所有SubspaceComposables都能很好地支持此修饰符。(I9a3cd、b/479530787、b/478935063、b/478935063)SpatialEnterTransition和SpatialExitTransition已标记为@Immutable(If1710, b/487757837)SpatialGltfModelAPI 在此版本中被标记为受限,有待进一步测试。(Ibf003、b/466090694)- 将
DeviceTrackingMode.LAST_KNOWN重命名为SPATIAL_LAST_KNOWN(具有已弃用的回退),为 3DoF 跟踪添加了INERTIAL_LAST_KNOWN,并向TrackingState添加了TRACKING_DEGRADED。(Ie661c、b/445466590) - 移除了已废弃的
SpatialLayoutSpacer(I7b36c) - 移除了已废弃的 padding API (If1886)
- 添加了
floatRange以偏置值。移除了LayoutDirection的默认值 (I9d74e)
bug 修复
- 为
SpatialColumn、SpatialRow和SpatialCurvedRow添加了代码示例和 KDoc 文档。(Iaf54f、b/495777633)
版本 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,并将其移至 draw 模块。将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)
已知问题
- SceneCore 中的
SurfaceEntity存在问题,可能会导致应用在创建SpatialExternalSurface实例时崩溃。此问题已在androidx.xr.scenecore:scenecore-*:1.0.0-alpha13、androidx.xr.compose:compose:1.0.0-alpha12及其后续版本中得到解决。受影响的应用应更新到最新版本。
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) - 移除了 billboard 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和 Billboard 修饰符,使内容始终面向用户。(I49b99) - 添加了将
InteractionPolicy设置为SpatialExternalSurfaces和SpatialPanels的功能,从而可以检测点击和其他 3D 输入事件。(Iae155) - 添加了 size 和
requiredSize修饰符重载,其中宽度、高度和深度为 Dp 值。(I92f79) ParentLayoutParamsModifier接口现在扩展了DelegatableSubspaceNode。(I1a6d4)ApplicationSubspace已弃用,取而代之的是 Subspace API。- Subspace API 行为已更改为仅在推荐的姿势和比例下提供应用范围的子空间。
- 引入了
PlanarEmbeddedSubspaceAPI,以便在 2D 上下文中提供嵌入式子空间。(Id3343)
- 向
SubspaceModifier.NodeAPI 添加了shouldAutoInvalidate标志。(I93902) - 添加了
required(Size|Width|Depth|Height)In API,可让开发者将@SubspaceComposable的大小限制在特定范围内,而无需考虑父级的传入测量约束条件。(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 修复
版本 1.0.0-alpha08
October 22, 2025
发布了 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 修复
- 防止在销毁具有 Subspace 的 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的 KDoc。(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,并将 constraints 参数替换为SubspaceModifier和与大小相关的SubspaceModifiers。如果allowUnboundedSubspace为 true,则子空间仍可以具有无界限约束条件。(Ib06e6、b/433331675) - 由于
DragPolicy()和ResizePolicy()现已成为SpatialPanel和SpatialExternalSurfaceAPI 的一部分,因此弃用可移动和可调整大小的SubspaceModifiers(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) - 现在,子空间和 Orbiter 在主共享空间中以及应用在后台运行时,都会保留其内部状态。在主共享空间模式下,子空间仍会设置其场景,为切换到全沉浸空间模式做好准备。(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) - 移除 Orbiter 设置,并添加
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,该 API 接受 Shape 作为光标,以便提供更多自定义形状。(Ie513c、b/374766087、b/418854637)
- 移除了作为
PublishedApi的CoreEntity(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类型访问组合本地值。 - 添加了遵循 Compose
AndroidView实现样式的新SpatialPanelAPI,并废弃了之前的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。当用户开始和结束移动具有 movable 修饰符的子空间可组合项时,系统会调用onMoveStart和onMoveEnd回调。 name参数已从SpatialRow和SpatialPanel等空间 API 中移除。如需调试空间 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计算)期间将任一维度设置为零时发生。现在,该面板将被隐藏。请注意,此修复专门针对布局阶段的崩溃问题;通过用户互动将面板大小调整为零的情况将单独处理。隐藏的面板缺少界面功能。 - 修复了 resizable 修饰符中的
maintainAspectRatio问题。现在应保持宽高比。 - 修复了嵌套 Subspace 在单帧中位置不正确的问题。
- 修复了有时未在应应用圆角时应用圆角的问题。
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 包含这些提交内容。
新功能
- 现在,当空间对话框处于启用状态时,活动面板可以遮盖其内容。
OrbiterAPI 现在可在SubspaceComposable上下文中使用,并将 Orbiter 附加到其最近的基于SubspaceLayout的可组合父级。- 引入了
LayoutCoordinatesAwareModifierNode,以允许基于位置的自定义修饰符。 - 向
SubspaceModifier.Node添加了 attach/detach 生命周期方法。 - 向可移动修饰符添加了
scaleWithDistance。启用scaleWithDistance后,移动的子空间元素会放大或缩小。此外,它还会保持移动前的任何显式缩放。
API 变更
- 移除了
SessionCallbackProvider,取而代之的是SpatialCapabilities。
其他变化
- 将
minSDK减少到 24。所有 Jetpack XR API 在运行时仍需要 API 34。 OrbiterEdgeOffset.inner、EdgeOffset.outer和EdgeOffset.overlap构造函数不再是@Composable方法,因此可以在不可组合的上下文中使用。- 更新了空间高度级别,以符合最新的用户体验规范。
- 在
MeasurableLayout中实现SubspaceSemanticsInfo接口。 - 将
SubspaceModifierElement重命名为了SubspaceModifierNodeElement。
bug 修复
- 修复了
SubspaceModifier排序稳定性问题。SubspaceModifier的运行应该会更可靠。现在,偏移、旋转、缩放、可移动和可调整大小修饰符应能以任意顺序使用。
版本 1.0.0-alpha01
2024 年 12 月 12 日
发布了 androidx.xr.compose:compose-*1.0.0-alpha01。
初始版本的功能
Jetpack Compose for XR 的初始开发者版本。无论您是要将现有 2D 应用移植到 XR,还是要从头开始创建新的 XR 应用,都可以使用熟悉的 Compose 概念(例如行和列)在 XR 中创建空间界面布局。此库提供子空间和空间可组合项,例如空间面板和轨道器,可让您将现有的 2D Compose 或基于 View 的界面放置在空间布局中。它引入了 Volume 子空间可组合项,可让您相对于界面放置 SceneCore 实体(例如 3D 模型)。如需了解详情,请参阅此开发者指南:
Subspace:此可组合项可以放置在应用界面层次结构中的任何位置,让您能够维护 2D 和空间界面的布局,而不会丢失文件之间的上下文。这样一来,您就可以更轻松地在 XR 和其他设备规格之间共享现有应用架构等内容,而无需通过整个界面树提升状态或重新构建应用。SpatialPanel:空间面板是一种子空间可组合项,可用于显示应用内容,例如,您可以在空间面板中显示视频播放、静态图片或任何其他内容。
轨道器:轨道器是一种空间界面组件。它旨在附加到相应的空间面板,并包含与该空间面板相关的导航和关联操作项。例如,如果您创建了一个用于显示视频内容的空间面板,则可以在 Orbiter 中添加视频播放控件。
Volume:相对于界面放置 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 应用目前需要在 AndroidManifest 中请求
android.permission.SCENE_UNDERSTANDING权限。 - 当应用使用清单中的
PROPERTY_XR_ACTIVITY_START_MODE属性直接启动到全沉浸空间时,Activity/应用最初会在主共享空间中打开,然后再过渡到全沉浸空间。 - Volume 可组合项中的 glTF 最初可能会在错误的位置闪烁。
- 在已大幅移动的面板中使用 SpatialDialog 会将内容推向错误的方向。