Jetpack SceneCore
| 最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
|---|---|---|---|---|
| 2025 年 10 月 22 日 | - | - | - | 1.0.0-alpha08 |
声明依赖项
如需添加 XR SceneCore 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle 文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha08" // Optional dependencies for asynchronous conversions implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha08") // Optional dependencies for asynchronous conversions implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
1.0 版
版本 1.0.0-alpha08
2025 年 10 月 22 日
发布了 androidx.xr.scenecore:scenecore-*:1.0.0-alpha08。版本 1.0.0-alpha08 中包含这些提交内容。
API 变更
- 已将
ActivityPanelEntity.moveActivity重命名为transferActivity(I273c5、b/430332856)
bug 修复
:xr:scenecore:scenecore-spatial-rendering和:xr:scenecore:scenecore-spatial-core已添加为:xr:scenecore:scenecore的实现依赖项(I6ab65、b/447000520)- 如果在会话销毁后访问
session.scene,则会抛出异常。(I77e6f)
版本 1.0.0-alpha07
2025 年 9 月 24 日
发布了 androidx.xr.scenecore:scenecore:1.0.0-alpha07、androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 和 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07。版本 1.0.0-alpha07 中包含这些提交内容。
API 变更
- 已将
fixedAspectRatio重命名为isFixedAspectRatioEnabled,并将其设为布尔值属性(I5c4e8、b/440588971) Scenecore伪对象现在位于xr:scenecore:scenecore-testing模块中。(Idd951)- 已将
shouldAutoHideContent重命名为isAutoHideContentWhileResizingEnabled,并将shouldAlwaysShowOverlay重命名为isAlwaysShowOverlayEnabled(I97c36、b/432335421) - 更新了
SceneCoreTextureSampler常量,以提高可读性,例如TextureSampler.MinFilter.LINEAR现在为TextureSampler.MIN_FILTER_LINEAR(Ib159c) - 场景的
setKeyEntitysetter 已合并到keyEntity变量中。将keyEntity设置为不可移动的实体(例如AnchorEntity)将抛出IllegalArgumentException,而不是返回布尔值 false。(I62080、b/428721695、b/422215745) - 场景的
SpatialModeChangeListener变量已替换为setSpatialModeChangedListener。它接受Consumer<SpatialModeChangeEvent>而不是SpatialModeChangedListener。setSpatialModeChangedListener现在可以选择性地接受执行器。(I62080、b/428721695、b/422215745) - 从
ActivityPanelEntity.startActivity中移除了bundle参数(I64344、b/430332856、b/430333040) SpatializerConstants.SOURCE_TYPE_BYPASS已重命名为SpatializerConstants.SOURCE_TYPE_DEFAULT。(Ifc7fe、b/422215565)- 添加了
SpatialSoundPool.PLAY_FAILED常量。(Ifc7fe、b/422215565) - 为
SpatialSoundPool.play方法添加了默认实参。(Ifc7fe、b/422215565) - 移除了
SpatialAudioTrackBuilder中 setter 的返回值。(Ifc7fe、b/422215565) - SurfaceEntity 变更
- 将
SurfaceEntity.CanvasShape重命名为Shape - 将
SurfaceEntity.CanvasShape.Vr180Hemisphere重命名为Hemisphere - 将
SurfaceEntity.CanvasShape.Vr360Sphere重命名为Sphere - 将
SurfaceEntity.EdgeFeatheringParams.SmoothFeather重命名为RectangleFeather - 将
SurfaceEntity.EdgeFeathingParams.SolidEdge重命名为NoFeathering - 将
SurfaceEntity.ContentSecurityLevel重命名为SurfaceProtection SurfaceEntity.ContentSecurityLevel.{values}添加了SURFACE_PROTECTION_前缀。SurfaceEntity.SuperSampling.{$values}添加了SUPER_SAMPLING_前缀SurfaceEntity.StereoMode.{values}添加了STEREO_MODE_前缀SurfaceEntity.ContentColorMetadata.maxCLL重命名为maxContentLightLevel(I7eb5f、b/422216050、b/427529950)
- 将
- 已将
launchActivity重命名为startActivity(I7db90、b/430332856) - 移除了
Scene.activitySpaceRoot。已改用Scene.activitySpace。(I05ee8、b/378706624、b/422215745) configureBundleForFullSpaceModeLaunch和configureBundleForFullSpaceModeLaunchWithEnvironmentInherited分别重命名为createBundleForFullSpaceModeLaunch和createBundleForFullSpaceModeLaunchWithEnvironmentInherited,并移至 LaunchUtils.kt 文件中作为顶级方法,并将 Session 作为第一个参数 (I64a2c, b/437186050)GroupEntity工厂现在返回GroupEntity类型,而不是实体。(I66042)
bug 修复
- 在实体实例被处置后使用时,抛出
IllegalStateException。(I90990、b/427314036、b/432063442)
版本 1.0.0-alpha06
2025 年 8 月 13 日
发布了 androidx.xr.scenecore:scenecore:1.0.0-alpha06、androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 和 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06。版本 1.0.0-alpha06 中包含这些提交内容。
API 变更
- 取消对
SceneCore的BaseEntity和BaseScenePoseAPI 的限制 (88c0ff6)
版本 1.0.0-alpha05
2025 年 7 月 30 日
发布了 androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05、androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 和 androidx.xr.scenecore:scenecore:1.0.0-alpha05。版本 1.0.0-alpha05 中包含这些提交内容。
新功能
- 向面板实体和
SurfaceEntities添加了感知分辨率 API。(I118f6) PerceivedResolution添加到 Scene.kt 的回调方法,用于监控 HSM 中 activity 主面板的感知分辨率。(I58084)SurfaceEntity- 添加了对应用在创建时请求超采样的支持。这使得应用可以使用超采样滤波器进行抗锯齿处理。(I06913)- 向
ActivitySpace添加了recommendedContentBoxInFullSpace属性。它会返回一个建议的框,用于在 Full Space 模式下放置内容。(I4cd6f) - 为可移动修饰符提供了重载的构造函数,以实现锚定。(Ic0c70)
API 变更
在此版本中,我们对 SceneCore 进行了广泛的 API 更改。多个类已重命名和/或移至不同的模块,并且大多数 getter/setter 方法已替换为 Kotlin 属性。虽然我们预计在第一个 Beta 版发布之前,未来还会出现破坏性 API 更改,但这些更改不会像之前那样具有破坏性或数量众多。
- 已重命名和/或移动以下类和接口:
androidx.xr.scenecore.PixelDimensions改为androidx.xr.runtime.math.IntSize2d;androidx.xr.scenecore.Dimensions改为androidx.xr.runtime.math.FloatSize3d;androidx.xr.scenecore.ActivityPose改为ScenePose,androidx.xr.scenecore.ContentlessEntity改为GroupEntity,androidx.xr.scenecore.PlaneType改为PlaneOrientation;androidx.xr.scenecore.PlaneSemantic改为PlaneSemanticType。(Ifd405)(I3b622) (If534d) - 我们已将
Scene属性的多个 setter 设为私有;这些属性不应由SceneCore客户端发生变化:activitySpace、activitySpaceRoot、mainPanelEntity、perceptionSpace、spatialCapabilities、spatialEnvironment和spatialUser。(I2f506) - 在实体中:将以下内容更改为属性:
get/setParent()、setContentDescription;弃用了Entity.is/setHidden(),请改用Entity.is/setEnabled。(Ibc4c6) - 移除了
androidx.xr.scenecore.BasePanelEntity类,请改用PanelEntity。将PanelEntity的 getter 和 setter 替换为属性。将PanelEntity.size属性从Float3dSize更改为Float2dSize。移除了已弃用的方法androidx.xr.scenecore.PanelEntity.getPixelDimensions,请改用getSizeInPixels。(Icc174) - 已将
androidx.xr.scenecore.OnSpaceUpdatedListener替换为Runnable。(I19308) - 将
SpatialUser.getCameraViews()替换为属性。(Ib0cc5) 对于ExrImage和GltfModel:,将create方法更改为挂起函数;修改了创建参数以接受Uri或Path,而不是String。(Id8883) (I0d247)、(I25706) - 将
SpatialEnvironment.requestFullSpaceMode和SpatialEnvironment.requestHomeSpaceMode移到了 Scene 中,例如使用session.scene.requestFullSpaceMode()而不是session.scene.spatialEnvironment.requestFullSpaceMode()。addOnPassthroughOpacityChangedListener和addOnSpatialEnvironmentChangedListener现在具有接受可选执行器的替换项。(I12fe0) (I6b21e) - 移除了以下已弃用的
SpatialEnvironment方法:togglePassthrough、setPassthrough、setPassthroughOpacity、getPassthroughMode、getPassthroughOpacity、setSkybox和setGeometry。还移除了已弃用的类SpatialEnvironment.PassthroughMode(I927bd)(I927bd)(I927bd) - 将以下
SpatialEnvironmentgetter 和 setter 替换为 Kotlin 属性:getCurrentPassthroughOpacity()、get/setPassthroughOpacityPreference()、get/setSpatialEnvironmentPreference()、isSpatialEnvironmentPreferenceActive()(I33a7b) (Ie06e2) (Ie06e2) SpatialEnvironmentPreference.preferredPassthroughOpacity类型已从Float?更改为Float。它不再接受 null 值。相反,SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE用于表示没有不透明度偏好。(I40107)- 在创建方法中,将
windowBoundsPx参数更新为pixelDimensions,并将其类型从 Rect 更新为IntSize2d。(I1926e) SpatialEnvironment构造函数现在是内部函数 (I75a51)- 将类
SpatialPointerIconNone和SpatialPointerIconCircle替换为伴生对象SpatialPointerIcon.NONE和SpatialPointerIcon.CIRCLE(I416d2) SpatialPointerComponent中的SpatialPointerIcon不再可为 null。使用SpatialPointerIcon.DEFAULT而不是 null 来表示应使用系统默认的指针图标。(I416d2)- 将
androidx.xr.scenecore.AnchorEntity.getState()替换为只读属性。重命名了AnchorEntity.create()方法中的参数,以提高清晰度。在AnchorEntity的用于设置和添加监听器的方法中,监听器已移至最后一个实参,以启用尾随 lambda。将AnchorEntity的androidx.xr.scenecore.OnStateChangedListener替换为Consumer<AnchorEntity.State>。(I472e0) GltfModelEntity.getAnimationState()现在是一个属性。(I10b29)- 将
ActivitySpace.getBounds()替换为属性。将ActivitySpace.addBoundsChangedListener重命名为了ActivitySpace.addOnBoundsChangedListener。将ActivitySpace.setOnSpaceUpdatedListener替换为添加/移除方法。(I4c956) - 对于
AnchorPlacement: planeTypeFilter,已重命名为anchorablePlaneOrientations,planeSemanticFilter已重命名为anchorablePlaneSemanticTypes。向AnchorEntity或ActivitySpace添加MovableComponent将返回 false,MoveListener已重命名为EntityMoveListener shouldDisposeParentAnchor,EntityMoveListener shouldDisposeParentAnchor已重命名为disposeParentOnReAnchor systemMovable,disposeParentOnReAnchor systemMovable已从create函数中移除,取而代之的是creeateCustomMovable、createSystemMovable和createAnchorable(If11c4) - 移除了
SurfaceEntity.featherRadiusX/Y并添加了EdgeFeatheringParams类概念。(Ic78fc) PanelEntity.enablePanelDepthTest()方法已替换为panelClippingConfig属性。将Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)设置为 1 可启用深度测试,设置为 0 可停用深度测试。PanelClippingConfig(isDepthTestEnabled = false)(I0cbe0)Scene.mainPanelEntity现在是MainPanelEntity类型,而不是PanelEntity类型 (I7125a)- 将 Scene 的
setFullSpaceMode方法重命名为configureBundleForFullSpaceModeLaunch,并将setFullSpaceModeWithEnvironmentInherited方法重命名为configureBundleForFullSpaceModeLaunchWithEnvironmentInherited。(I0cbe0) (I0cbe0) - 将
SpatialVisibility的 UNKNOWN、OUTSIDE_FOV、PARTIALLY_WITHIN_FOV 和 WITHIN_FOV 值分别重命名为 SPATIAL_VISIBILITY_UNKNOWN、SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW、SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW 和 SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW (Ie7e8c) SpatialVisibility类已替换为具有常量整数值的公共对象。setSpatialVisibilityChangedListener现在接受Consumer<Int>,而非Consumer<SpatialVisibility>(Ie7e8c)- 重命名了
PointerCaptureComponent常量并将其移至PointerCaptureComponent.PointerCaptureState对象 (I9c7ac) - 已将
PointerCaptureComponents' StateListener替换为Consumer<Int>。(I9c7ac) - 已将
InputEventListener替换为Consumer<InputEvent>(I9c7ac) setPreferredAspectRatio从 Scene 类移到了SpatialWindow对象,并将 Session 作为第一个参数。(I7b717)Entity.setHidden()已替换为Entity.setEnabled(),Entity.isHidden()已替换为Entity.isEnabled()。setHidden(false)等于setEnabled(true)和isHidden() == !isEnabled()。(Icf0de)Entity.contentDescription类型已从 String 更改为CharSequence。(Ie59be)- 如果未授予足够的权限,
Session.create和Session.configure现在会抛出SecurityException,而不是返回SessionCreatePermissionsNotGranted或SessionConfigurePermissionsNotGranted。(I7c488) ResizableComponent.create现在需要Consumer<ResizeEvent> ResizeEventListener已替换为Consumer<ResizeEvent> ResizableComponent.size已重命名为ResizableComponent.affordanceSize ResizableComponent.minimumSize已重命名为ResizableComponent.minimumEntitySize ResizableComponent.maximumSize已重命名为ResizableComponent.maximumEntitySize,ResizableComponent.autoHideContent已重命名为ResizableComponent.shouldAutoHideContentResizableComponent.forceShowResizeOverlay已重命名为ResizableComponent.shouldAlwaysShowOverlay(I97a2d)- 将
minSDK减少到 24(适用于androidx.xr.scenecore和androidx.xr.compose)。XR 软件包在运行时仍需要 API 34。(I17224) - 移除了对所有 Jetpack XR 软件包的
RequiresApi(34)限制。此限制是多余的,因为 Jetpack XR 目前仅适用于 API 级别为 34 及更高级别的设备。(Iae0f8) - 主要
SceneCore制品 (xr:scenecore:scenecore) 将仅包含 Kotlin 样式的异步 API。Java 开发者可以依赖于xr:scenecore:scenecore-guava库来访问兼容的 API。(If221b) - 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
- 此库现在使用 JSpecify nullness 注解,这些注解属于 type-use 类型。Kotlin 开发者应使用以下编译器实参来强制执行正确用法:
-Xjspecify-annotations=strict(这是 Kotlin 编译器从 2.1.0 版开始的默认实参)(Ia8420) - 返回
ListenableFuture的所有异步方法均已替换为 Kotlin 挂起函数。希望使用基于ListenableFuture的异步方法(而非 Kotlin 挂起函数)的 Java 开发者现在必须使用:xr:scenecore-scenecore-guava中的扩展函数。例如,GuavaExrImage包含与 Guava 等效的 ExrImage 异步函数,GuavaScenePose包含与 Guava 等效的ScenePose异步函数,GuavaGltfModel包含Guava-equivalent GltfModel异步函数,等等。(If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
bug 修复
- 更新了 Jetpack XR Scenecore
ProGuard规则,以防止精简客户端出现AbstractMethodError。(I91a01) - 针对 Jetpack XR
SceneCore增加了对 Proguard 缩减的支持 (I4f47e) - 修复了以下 bug:如果
InputEvent的 HitInfo 上的hitPosition可能导致崩溃,则从系统返回的hitPosition为 null 时可能会发生崩溃 (I7a695)InteractableComponent - 配置 *Mode 值已重命名,以反映其行为。(I6d247)
- 修复了
SceneCoreTestApp 中 FOV 和HitTest存在的问题。(I2c51e) - 修复了
SpatialCapabilities.hasCapability()中的 bug,该 bug 会在通过按位或传递的任何功能为 true 时返回 true,而不是仅在所有功能都为 true 时才返回 true。(I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOM更新为将顶部地图显示在左眼,底部地图显示在右眼。(I4ae68)
版本 1.0.0-alpha04
2025 年 5 月 7 日
发布了 androidx.xr.scenecore:scenecore:1.0.0-alpha04 和 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04。版本 1.0.0-alpha04 中包含这些提交内容。
新功能
- 现在,返回处理功能将适用于没有嵌入 activity 的面板实体。如需使返回处理正常运行,您需要在 Android 清单中指定
android:enableOnBackInvokedCallback= "true"。 StereoSurfaceEntity现在支持通过两个新的StereoMode值(MULTIVIEW_LEFT_PRIMARY 和 MULTIVIEW_RIGHT_PRIMARY)播放 MV-HEVC。PanelEntity.setSize和PanelEntity.getSize现在返回父空间中的大小。Entity.setPose、Entity.getPose、Entity.setScale、Entity.getScale、Entity.setAlpha和Entity.getAlpha现在采用新的参数relativeTo,该参数允许获取/设置相对于不同空间的价值。支持的值为 Parent、Activity 和 Real World 空间,此形参的默认值为 Parent。- 向
SessionExt.kt添加了空间可见性回调扩展方法,用于监控场景内容何时移入或移出用户的视野。 - 已将
setPointSourceParams添加到SpatialAudioTrack,以便在轨道构建完成后更新参数。 - 添加了一个新类 Scene,其中包含对
ScenecoreAPI 的引用。场景将作为会话的扩展属性进行访问。SessionExt中的函数已移至 Scene,因此需要调整导入项;例如,SessionExt.getScene(session)。addSpatialCapababilitiesChangedListener与SessionExt.addSpatialCapabilitiesChangedListener。 - 添加了
ActivityPose.hitTestAsync,可针对虚拟内容进行hitTest。 - 添加了新的组件类型
SpatialPointerComponent,允许客户端指定为指针渲染的图标,或停用该图标。此组件目前只能附加到PanelEntity个实例。 - 引入了新的
PanelEntity工厂,该工厂以米或像素为单位获取面板尺寸。移除了旧的PanelEntity工厂,该工厂采用两个 Dimension 类型参数来表示面板。
API 变更
- 移除了对所有 Jetpack XR 软件包的
RequiresApi(34)限制。此限制是多余的,因为 Jetpack XR 目前仅适用于 API 级别为 34 及更高级别的设备。(Iae0f8) - 使用 Kotlin 2.0 发布的项目需要使用 KGP 2.0.0 或更高版本才能使用 (Idb6b5)
- 已移除
PermissionHelper类。 - 弃用了
PanelEntity.getPixelDensity。 - 移除了
PanelEntity.setPixelDimensions和PanelEntity.getPixelDimension,取而代之的是setSizeInPixels和getSizeInPixels。 - 已移除
Entity.getActivitySpaceAlpha。可替换为Entity.getAlpha(Space.Activity)。 - 已移除
Entity.getWorldSpaceScale。可替换为Entity.getScale(Space.REAL\_WORLD)。 SceneCore中的会话类已被删除,取而代之的是 XR 运行时的会话。StereoSurfaceEntity已重命名为SurfaceEntity。- 移除了
Entity.setSize和Entity.getSize,并将相同的方法添加到了PanelEntity中。 PointSourceAttributes已重命名为PointSourceParams。SpatializerConstants.SOURCE\_TYPE\_BYPASS已重命名为SpatializerConstants.SOURCE\_TYPE\_DEFAULT。PointSourceParams实体的访问权限已从公开修改为内部。AnchorEntity.create现在要求在Session.configure()中配置PlaneTrackingMode。SpatialUserAPI 现在要求在Session.configure()中配置HeadTrackingMode。- 如果未附加
ResizableComponent,系统将提供 INFO 级日志,而不是 ERROR 级日志。 - Fov 类现在是常规 Kotlin 类。
- 拆分
Entity.kt以将每个具体实体类型放入其自己的文件中。 - 创建新的
PanelEntity时,大多数视图都会重新归属到FrameLayout。这有助于将LayoutInspector与空间面板搭配使用。 - 当前使用的
XrExtensions实例现已尽最大努力注册到平台,以帮助进行应用调试。
bug 修复
- 添加了一项修复,以防止在移动具有
MovableComponent和AnchorPlacement的PanelEntity时可能发生的崩溃 - 修复了
ResizableComponent在onResizeStart回调中提供过时尺寸的问题。 - 修复了多次调用
JxrPlatformAdapterAxr的dispose()时发生的崩溃。
版本 1.0.0-alpha03
2025 年 2 月 26 日
发布了 androidx.xr.scenecore:scenecore:1.0.0-alpha03 和 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03。版本 1.0.0-alpha03 中包含这些提交内容。
新功能
- 现在支持对 Jetpack XR 代码进行 Proguard 缩小
bug 修复
- 其他修复,以支持 Jetpack XR SceneCore 的 Proguard 缩小功能 (I4f47e)
- 更新了 Jetpack XR Scenecore
ProGuard规则,以防止精简客户端出现AbstractMethodError。(I91a01)
版本 1.0.0-alpha02
2025 年 2 月 12 日
发布了 androidx.xr.scenecore:scenecore:1.0.0-alpha02 和 androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02。版本 1.0.0-alpha02 中包含这些提交内容。
即将发生的重大变更会影响在 1.0.0-alpha02 之前构建的应用
- 工厂方法已从
Session类移至每个相应类型中的配套方法:Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)已被删除,取而代之的是ActivityPanelEntity.create(Session, Dimensions, String, Pose)Session.createAnchorEntity(Anchor)已被删除,取而代之的是AnchorEntity.create(Session, Anchor)Session.createAnchorEntity(Dimensions, Int, Int, Duration)已被删除,取而代之的是AnchorEntity.create(Session, Dimensions, Int, Int, Duration)Session.createEntity(String, Pose)已被删除,取而代之的是ContentlessEntity.create(Session, String, Pose)Session.createExrImageResource(String)已被删除,取而代之的是ExrImage.create(Session, String)Session.createGltfEntity(GltfModel, Pose)已被删除,取而代之的是GltfModelEntity.create(Session, GltfModel, Pose)Session.createGltfModelResource(String)已被删除,取而代之的是GltfModel.create(Session, String)Session.createInteractableComponent(Executor, InputEventListener)已被删除,取而代之的是InteractableComponent.create(Session, Executor, InputEventListener)Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)已被删除,取而代之的是MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)已被删除,取而代之的是PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)Session.createResizableComponent(Dimensions, Dimensions)已被删除,取而代之的是ResizableComponent.create(Session, Dimensions, Dimensions)Session.createStereoSurfaceEntity(Int, Dimensions, Pose)已被删除,取而代之的是StereoSurface.create(Session, Int, Dimensions, Pose)
- 移除了以下已弃用的方法:
- 已删除“
Session.canEmbedActivityPanel(Activity)”。请改用getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)。 - 已删除“
Session.hasSpatialCapability(Int)”。它已被替换,现在使用getSpatialCapabilities().hasCapability()作为一种更细分的方式来检查是否存在空间功能,因为getSpatialCapabilities()会返回SpatialCapabilities对象。 Session.requestFullSpaceMode()已被删除,取而代之的是SpatialEnvironment.requestFullSpaceMode()Session.requestHomeSpaceMode()已被删除,取而代之的是SpatialEnvironment.requestHomeSpaceMode()
- 已删除“
Session.setFullSpaceMode(Bundle)和Session.setFullSpaceModeWithEnvironmentInherited(Bundle)已移至扩展函数。开发者文件需要添加新的导入项以进行访问:import androidx.xr.scenecore.setFullSpaceModeimport androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)已移至扩展函数。开发者文件需要添加新的导入项才能进行访问:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)和Session.getEntityForRtEntity(RtEntity)已移至扩展函数。开发者文件需要添加新的导入项以进行访问:import androidx.xr.scenecore.getEntitiesOfTypeimport androidx.xr.scenecore.getEntityForRtEntity
- “
Session.unpersistAnchor(Anchor)”已被删除 - “
Session.createPersistedAnchorEntity(UUID)”已被删除
已知问题
PanelEntity.setCornerRadius()和ActivityPanelEntity.setCornerRadius()可能要等到面板下次移动时才会生效,将面板移至当前位置可以缓解此问题- 当在
ActivitySpace上调用BoundsChanged时,某些ActivityPose可能未正确更新。它将在ActivitySpace的下一次OnSpaceUpdated通话中更新
破坏性变更和行为变更
- 如果面板的宽度或高度小于 32dp,
PanelEntity和ActivityPanelEntity的默认圆角半径将为 32dp 或更小
新 API 和功能
- 引入了
StereoSurface.CanvasShape,该类允许创建Spherical和Hemispherical画布以渲染沉浸式媒体。 StereoSurfaceEntity.create()现在接受CanvasShape参数。(此参数目前会被忽略,但会在未来版本中使用)StereoSurfaceEntity.create()不再接受Dimensions参数。应用应通过设置CanvasShape来控制画布的大小StereoSurfaceEntity具有可动态设置的CanvasShape成员。StereoSurfaceEntity.dimensions现在是只读属性;应用应设置CanvasShape以更改尺寸。StereoSurfaceEntity现在允许在构建后重新设置StereoMode。
其他变化
- 将编译时 minSDK 降低到 24。所有 Jetpack XR API 在运行时仍需要 API 34。
SceneCore的会话工厂 (Session.create) 不再启动 intent 来获取SCENE_UNDERSTANDING权限。客户端应用必须先明确向用户请求权限,然后才能尝试创建锚点。如果用户未授予相应权限,则锚点创建将失败。
bug 修复
getActivitySpacePose()已修复,可返回缩放后的米数(而非始终返回未缩放的米数),从而考虑ActivitySpace比例。现在,如果ActivitySpace涉及来源或目的地,transformPoseTo还会使用正确的单位来计算坐标变化。- 现在,每当使用
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))传递 null 天空盒偏好设置时,天空盒都会设置为全黑天空盒。如需恢复为系统默认天空盒和几何图形,请使用setSpatialEnvironmentPreference(null).
版本 1.0.0-alpha01
2024 年 12 月 12 日
发布了 androidx.xr.scenecore:scenecore-* 1.0.0-alpha01。
初始版本的特性 Jetpack SceneCore 的初始开发者版本,这是一个用于创建和操纵沉浸式场景和环境的 3D 场景图库。借助此库,您可以相对于彼此以及虚拟或现实世界环境放置和排列 3D 模型和内容面板。
- SpatialEnvironment:使用天空盒图片和/或 3D 模型几何形状作为 XR 场景的背景,打造完全沉浸式体验。或者,启用透视功能,以便您的虚拟场景可以与用户的现实世界环境相集成。
- PanelEntity:通过将标准 Android 布局和 activity 嵌入到可浮动或锚定到现实世界表面的空间化面板中,将 2D 内容添加到 3D 场景中。
- GltfModelEntity:在场景中放置 3D 模型、为其添加动画效果并与之互动。SceneCore 支持 glTF 文件格式,以便轻松与现有模型集成。
- SpatialAudio:将环境音频源和点音频源添加到 3D 场景中,以实现完全沉浸式的空间化声音。
- StereoSurfaceEntity:SceneCore 支持将渲染到 Android Surface 上的内容路由到左眼/右眼。此模式可用于以并排或上下格式渲染立体内容,例如立体照片、3D 视频或其他动态渲染的界面。应用应使用 MediaPlayer 或 ExoPlayer 进行视频解码。
- 组件系统:SceneCore 提供强大而灵活的组件系统,可为您的 XR 内容添加各种功能,包括供用户移动、调整大小以及与模型和面板互动的可供性。
- 锚点:启用透视功能后,您可以将面板和模型附加到实际表面,让用户在真实环境中无缝集成虚拟内容。
- 用户姿势:访问虚拟场景中的用户位置,以便根据用户的位置调整内容的方向。
- SpatialCapabilities:构建完全自适应的应用,以便在可用时利用空间化功能,例如界面内容的 3D 定位。不仅如此,您的应用还可以在执行期间监控功能变化,以便根据用户使用 Android XR 设备的方式修改体验。
已知问题
- 目前,使用 Jetpack SceneCore 需要将 minSDK 设置为 30。作为一种解决方法,请添加以下清单条目
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>,以便能够使用 23 的 minSDK 进行构建和运行。 - 在各种会自动重新创建 activity 的情况下,会话可能会失效,包括调整主面板的大小、连接外围设备以及在浅色模式和深色模式之间切换。如果您遇到会话失效问题,可以采取以下解决方法:使主面板不可调整大小、使用动态面板实体、为特定配置更改停用 activity 重新创建或停用浅色/深色模式主题更改。
- GltfEntity 不支持可移动和可调整大小的组件。
- GltfEntity 不支持 Entity.getSize()。
- Jetpack XR 应用需要在 AndroidManifest 中请求
android.permission.SCENE_UNDERSTANDING权限。 - 创建会话仅在 Android XR 设备上受支持。目前,如果您创建会话并尝试在非 Android XR 设备上使用它,则会收到 RuntimeException。
- 通过 `SpatialEnvironment.setSpatialEnvironmentPreference()` 将天空盒设置为 null 不会像文档中所述的那样生成纯黑色天空盒。这可能会导致系统默认天空盒或当前天空盒保持不变。
- SceneCore 客户端应将
implementation(“com.google.guava:listenablefuture-1.0”)添加到其 Gradle 配置中,以作为应用的依赖项。在未来的版本中,scenecore 将包含此库作为api依赖项,因此客户端无需明确声明它。 - SceneCore 错误地将
com.google.guava:guava-31.1-android和com.google.protobuf:protobuf-javalite作为传递依赖项包含在内。如果这导致 build 中出现重复的类错误,则可以放心地排除这两个依赖项。 - 如果您的应用使用 SceneCore 并启用 ProGuard,则在创建会话时会发生崩溃。如需解决此问题,请停用 ProGuard。如需详细了解如何启用 ProGuard,请参阅本指南。