Jetpack SceneCore
最近更新时间 | 稳定版 | 候选版 | Beta 版 | Alpha 版 |
---|---|---|---|---|
2025 年 5 月 7 日 | - | - | - | 1.0.0-alpha04 |
声明依赖项
如需添加 XR SceneCore 的依赖项,您必须将 Google Maven 制品库添加到项目中。如需了解详情,请参阅 Google 的 Maven 代码库。
在应用或模块的 build.gradle
文件中添加所需工件的依赖项:
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha04" // Required for Java implementation "com.google.guava:listenablefuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha04") // Required for Java implementation("com.google.guava:listenablefuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04") }
如需详细了解依赖项,请参阅添加 build 依赖项。
反馈
您的反馈将帮助我们改进 Jetpack。如果您发现了新问题,或对此库有任何改进建议,请告诉我们。创建新问题前,请先查看此库中的现有问题。您可以点击星标按钮,为现有问题投票。
如需了解详情,请参阅问题跟踪器文档。
版本 1.0
版本 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,其中包含对
Scenecore
API 的引用。场景将作为会话的扩展属性进行访问。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
中的 Session 类已被删除,取而代之的是 XR 运行时的 Session。StereoSurfaceEntity
已重命名为SurfaceEntity
。- 移除了
Entity.setSize
和Entity.getSize
,并将相同的方法添加到了PanelEntity
中。 PointSourceAttributes
已重命名为PointSourceParams
。SpatializerConstants.SOURCE\_TYPE\_BYPASS
已重命名为SpatializerConstants.SOURCE\_TYPE\_DEFAULT
。PointSourceParams
实体的访问权限已从公开修改为内部。AnchorEntity.create
现在要求在Session.configure()
中配置PlaneTrackingMode
。SpatialUser
API 现在要求在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.setFullSpaceMode
import 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.getEntitiesOfType
import 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 客户端应向其 Gradle 配置添加
implementation(“com.google.guava:listenablefuture-1.0”)
,以作为应用的依赖项。在未来的版本中,scenecore 将包含此库作为api
依赖项,因此客户端无需明确声明它。 - SceneCore 错误地将
com.google.guava:guava-31.1-android
和com.google.protobuf:protobuf-javalite
作为传递依赖项包含在内。如果这会导致 build 中出现重复的类错误,则可以安全地排除这两个依赖项。 - 如果您的应用使用 SceneCore 并启用 ProGuard,则在创建会话时会发生崩溃。如需解决此问题,请停用 ProGuard。如需详细了解如何启用 ProGuard,请参阅本指南。