Jetpack SceneCore
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
30 de julio de 2025 | - | - | - | 1.0.0-alpha05 |
Cómo declarar dependencias
Para agregar una dependencia en XR SceneCore, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha05" // 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-alpha05" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha05") // 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-alpha05") }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 1.0
Versión 1.0.0-alpha05
30 de julio de 2025
Lanzamiento de androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05
, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05
y androidx.xr.scenecore:scenecore:1.0.0-alpha05
. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Se agregó la API de Perceived Resolution a Panel Entities y
SurfaceEntities
. (I118f6) - Se agregaron métodos de devolución de llamada
PerceivedResolution
a Scene.kt para supervisar la resolución percibida del panel principal de la actividad en el HSM. (I58084) SurfaceEntity
: Se agregó compatibilidad para que la aplicación solicite el supermuestreo en el momento de la creación. Esto permite que las aplicaciones usen el filtro de supermuestreo para el suavizado. (I06913)- Se agregó la propiedad
recommendedContentBoxInFullSpace
aActivitySpace
. Devuelve una caja recomendada para colocar contenido cuando se está en el modo de espacio completo. (I4cd6f) - Se proporcionó un constructor sobrecargado para el modificador movible que permite el anclaje. (Ic0c70)
Cambios en la API
En esta versión, se realizaron cambios extensos en la API de SceneCore
. Se cambiaron de nombre o se trasladaron varias clases a diferentes módulos, y la mayoría de los métodos getter/setter se reemplazaron por propiedades de Kotlin. Si bien anticipamos futuros cambios rotundos en la API hasta el lanzamiento de nuestra primera versión beta, estos no serán tan disruptivos ni numerosos.
- Se cambiaron los nombres o se movieron las siguientes clases e interfaces:
androidx.xr.scenecore.PixelDimensions
aandroidx.xr.runtime.math.IntSize2d
,androidx.xr.scenecore.Dimensions
aandroidx.xr.runtime.math.FloatSize3d
,androidx.xr.scenecore.ActivityPose
aScenePose
,androidx.xr.scenecore.ContentlessEntity
aGroupEntity
,androidx.xr.scenecore.PlaneType
aPlaneOrientation
yandroidx.xr.scenecore.PlaneSemantic
aPlaneSemanticType
. (Ifd405)(I3b622) (If534d) - Se hicieron privados varios métodos de configuración para las propiedades de
Scene
; no se pretendía que los clientes deSceneCore
los mutaran:activitySpace
,activitySpaceRoot
,mainPanelEntity
,perceptionSpace
,spatialCapabilities
,spatialEnvironment
yspatialUser
. (I2f506) - En Entity, se cambiaron los siguientes elementos a propiedades:
get/setParent()
,setContentDescription
; se dejó de usarEntity.is/setHidden()
, usaEntity.is/setEnabled
en su lugar. (Ibc4c6) - Se quitó la clase
androidx.xr.scenecore.BasePanelEntity
. En su lugar, usaPanelEntity
directamente. Se reemplazaron los métodos get y set paraPanelEntity
con propiedades. Se cambió la propiedadPanelEntity.size
deFloat3dSize
aFloat2dSize
. Se quitó el métodoandroidx.xr.scenecore.PanelEntity.getPixelDimensions
obsoleto. En su lugar, usagetSizeInPixels
. (Icc174) - Se reemplazó
androidx.xr.scenecore.OnSpaceUpdatedListener
conRunnable
. (I19308) - Se reemplazó
SpatialUser.getCameraViews()
por una propiedad. (Ib0cc5) ParaExrImage
yGltfModel:
, se cambiaron los métodoscreate
para que sean funciones de suspensión; se modificaron los parámetros de creación para que acepten unUri
o unPath
en lugar de unString
. (Id8883) (I0d247), (I25706) - Se trasladaron
SpatialEnvironment.requestFullSpaceMode
ySpatialEnvironment.requestHomeSpaceMode
a Scene. Por ejemplo, usasession.scene.requestFullSpaceMode()
en lugar desession.scene.spatialEnvironment.requestFullSpaceMode()
.addOnPassthroughOpacityChangedListener
yaddOnSpatialEnvironmentChangedListener
ahora tienen anulaciones que aceptan ejecutores opcionales. (I12fe0) (I6b21e) - Se quitaron los siguientes métodos
SpatialEnvironment
obsoletos:togglePassthrough
,setPassthrough
,setPassthroughOpacity
,getPassthroughMode
,getPassthroughOpacity
,setSkybox
ysetGeometry
. También se quitó la claseSpatialEnvironment.PassthroughMode
obsoleta (I927bd) (I927bd) (I927bd). - Se reemplazaron los siguientes métodos de obtención y configuración de
SpatialEnvironment
por propiedades de Kotlin:getCurrentPassthroughOpacity()
,get/setPassthroughOpacityPreference()
,get/setSpatialEnvironmentPreference()
,isSpatialEnvironmentPreferenceActive()
(I33a7b) (Ie06e2) (Ie06e2). - El tipo de
SpatialEnvironmentPreference.preferredPassthroughOpacity
cambió deFloat?
aFloat
. Ya no acepta valores nulos. En su lugar, se usaSpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE
para indicar que no hay preferencia de opacidad. (I40107) - Se actualizó el parámetro
windowBoundsPx
apixelDimensions
y su tipo de Rect aIntSize2d
en el método create. (I1926e) - El constructor
SpatialEnvironment
ahora es interno (I75a51). - Se reemplazaron las clases
SpatialPointerIconNone
ySpatialPointerIconCircle
por los objetos complementariosSpatialPointerIcon.NONE
ySpatialPointerIcon.CIRCLE
(I416d2). SpatialPointerIcon
enSpatialPointerComponent
ya no admite valores nulos. UsaSpatialPointerIcon.DEFAULT
en lugar de null para indicar que se debe usar el ícono de puntero predeterminado del sistema. (I416d2)- Se reemplazó
androidx.xr.scenecore.AnchorEntity.getState()
por una propiedad de solo lectura. Se cambiaron los nombres de los parámetros en el métodoAnchorEntity.create()
para brindar mayor claridad. En los métodos deAnchorEntity
para configurar y agregar objetos de escucha, el objeto de escucha se movió al argumento final para habilitar las lambdas finales. Se reemplazóandroidx.xr.scenecore.OnStateChangedListener
porAnchorEntity
conConsumer<AnchorEntity.State>
. (I472e0) GltfModelEntity.getAnimationState()
ahora es una propiedad. (I10b29)- Se reemplazó
ActivitySpace.getBounds()
por una propiedad. Se cambió el nombre deActivitySpace.addBoundsChangedListener
aActivitySpace.addOnBoundsChangedListener
. Se reemplazóActivitySpace.setOnSpaceUpdatedListener
por métodos de agregar o quitar. (I4c956) - Se cambió el nombre de
AnchorPlacement: planeTypeFilter
aanchorablePlaneOrientations
y el deplaneSemanticFilter
aanchorablePlaneSemanticTypes
. Agregar unMovableComponent
a unAnchorEntity
oActivitySpace
devolverá falso, se cambió el nombre deMoveListener
aEntityMoveListener shouldDisposeParentAnchor
, se cambió el nombre deEntityMoveListener shouldDisposeParentAnchor
adisposeParentOnReAnchor systemMovable
, se quitó de la funcióncreate
en favor decreeateCustomMovable
,createSystemMovable
ycreateAnchorable
(If11c4). - Se quitó
SurfaceEntity.featherRadiusX/Y
y se agregó un concepto de claseEdgeFeatheringParams
. (Ic78fc) - El método
PanelEntity.enablePanelDepthTest()
se reemplazó por la propiedadpanelClippingConfig
. EstableceScene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)
para habilitar la prueba de profundidad o establécela enPanelClippingConfig(isDepthTestEnabled = false)
para inhabilitarla. (I0cbe0) Scene.mainPanelEntity
ahora es de tipoMainPanelEntity
en lugar dePanelEntity
(I7125a).- Se cambió el nombre del método
setFullSpaceMode
de Scene porconfigureBundleForFullSpaceModeLaunch
y el del métodosetFullSpaceModeWithEnvironmentInherited
porconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited
. (I0cbe0) (I0cbe0) - Se cambiaron los nombres de los valores UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV y WITHIN_FOV de
SpatialVisibility
a SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW y SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW, respectivamente (Ie7e8c). - La clase
SpatialVisibility
se reemplazó por un objeto público con valores Int const.setSpatialVisibilityChangedListener
ahora acepta unConsumer<Int>
en lugar deConsumer<SpatialVisibility>
(Ie7e8c) - Se cambió el nombre de las constantes de
PointerCaptureComponent
y se trasladaron al objetoPointerCaptureComponent.PointerCaptureState
(I9c7ac). - Se reemplazó
PointerCaptureComponents' StateListener
conConsumer<Int>
. (I9c7ac) - Se reemplazó
InputEventListener
porConsumer<InputEvent>
(I9c7ac). setPreferredAspectRatio
se trasladó de la clase Scene al objetoSpatialWindow
y toma Session como primer parámetro. (I7b717)Entity.setHidden()
se reemplazó porEntity.setEnabled()
yEntity.isHidden()
se reemplazó porEntity.isEnabled()
.setHidden(false)
es igual asetEnabled(true)
yisHidden() == !isEnabled()
. (Icf0de)- El tipo de
Entity.contentDescription
cambió de String aCharSequence
. (Ie59be) - Ahora
Session.create
ySession.configure
arrojanSecurityException
cuando no se otorgaron los permisos suficientes, en lugar de devolverSessionCreatePermissionsNotGranted
oSessionConfigurePermissionsNotGranted
. (I7c488) - Ahora,
ResizableComponent.create
requiere unConsumer<ResizeEvent> ResizeEventListener
. Se reemplazóConsumer<ResizeEvent> ResizableComponent.size
porResizableComponent.affordanceSize ResizableComponent.minimumSize
, se cambió el nombre deResizableComponent.minimumEntitySize ResizableComponent.maximumSize
aResizableComponent.maximumEntitySize
, se cambió el nombre deResizableComponent.autoHideContent
aResizableComponent.shouldAutoHideContent
y se cambió el nombre deResizableComponent.forceShowResizeOverlay
aResizableComponent.shouldAlwaysShowOverlay
. (I97a2d) - Se redujo
minSDK
a 24 paraandroidx.xr.scenecore
yandroidx.xr.compose
. Los paquetes de XR aún requieren la API 34 en el tiempo de ejecución. (I17224) - Se quitó la restricción de
RequiresApi(34)
en todos los paquetes de Jetpack XR. Esta restricción era redundante, ya que Jetpack XR actualmente solo está disponible en dispositivos con el nivel de API 34 y versiones posteriores. (Iae0f8) - El artefacto
SceneCore
principal (xr:scenecore:scenecore
) solo contendrá APIs asíncronas de estilo Kotlin. Los desarrolladores de Java pueden depender de la bibliotecaxr:scenecore:scenecore-guava
para acceder a las APIs compatibles. (If221b) - Los proyectos lanzados con Kotlin 2.0 requieren que se consuma KGP 2.0.0 o una versión posterior (Idb6b5).
- Esta biblioteca ahora usa anotaciones de nulabilidad de JSpecify, que son de uso de tipo. Los desarrolladores de Kotlin deben usar el siguiente argumento del compilador para aplicar el uso correcto:
-Xjspecify-annotations=strict
(este es el valor predeterminado a partir de la versión 2.1.0 del compilador de Kotlin) (Ia8420). - Todos los métodos asíncronos que devuelven
ListenableFuture
se reemplazaron por funciones de suspensión de Kotlin. Los desarrolladores de Java que deseen usar métodos asíncronos basados enListenableFuture
en lugar de funciones de suspensión de Kotlin ahora deben usar funciones de extensión en:xr:scenecore-scenecore-guava
. Por ejemplo,GuavaExrImage
contiene las funciones asíncronas de ExrImage equivalentes a Guava,GuavaScenePose
contiene las funciones asíncronas deScenePose
equivalentes a Guava,GuavaGltfModel
contiene las funciones asíncronas deGuava-equivalent GltfModel
, etcétera. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
Correcciones de errores
- Se actualizó la regla
ProGuard
de Jetpack XR Scenecore para evitarAbstractMethodError
en clientes minimizados. (I91a01) - Se agregaron correcciones adicionales para admitir la minimización de Proguard para
SceneCore
de Jetpack XR (I4f47e). - Se corrigió un error por el que un
InteractableComponent
podía provocar una falla si elhitPosition
en el HitInfo delInputEvent
podía fallar si elhitPosition
que devolvía el sistema era nulo (I7a695). - Se cambiaron los nombres de los valores de *Mode de Config para reflejar su comportamiento. (I6d247)
- Se corrigieron problemas con el ángulo de visión y
HitTest
enSceneCore
TestApp. (I2c51e) - Se corrigió un error en
SpatialCapabilities.hasCapability()
por el que devolvía verdadero si alguna de las capacidades pasadas con un OR bit a bit era verdadera en lugar de devolver verdadero solo si todas eran verdaderas. (I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOM
se actualizó para que el mapa superior se muestre en el ojo izquierdo y el mapa inferior en el ojo derecho. (I4ae68)
Versión 1.0.0-alpha04
7 de mayo de 2025
Lanzamiento de androidx.xr.scenecore:scenecore:1.0.0-alpha04
y androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04
. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- El control de la acción de volver ahora funcionará en las entidades de panel sin actividades incorporadas. Para que el control de atrás funcione, debes especificar
android:enableOnBackInvokedCallback= "true"
en el manifiesto de Android. StereoSurfaceEntity
ahora admite la reproducción de MV-HEVC a través de dos valores nuevos deStereoMode
: MULTIVIEW_LEFT_PRIMARY y MULTIVIEW_RIGHT_PRIMARY.PanelEntity.setSize
yPanelEntity.getSize
ahora devuelven tamaños en el espacio principal.Entity.setPose
,Entity.getPose
,Entity.setScale
,Entity.getScale
,Entity.setAlpha
yEntity.getAlpha
ahora toman un nuevo parámetrorelativeTo
, que permite obtener o establecer valores relativos a diferentes espacios. Los valores admitidos son los espacios de Parent, Activity y Real World, y el valor predeterminado para este parámetro es Parent.- Se agregaron métodos de extensión de devolución de llamada de visibilidad espacial a
SessionExt.kt
para supervisar cuándo el contenido de la escena se mueve dentro o fuera del campo de visión del usuario. - Se agregó
setPointSourceParams
aSpatialAudioTrack
, lo que permite actualizar los parámetros después de que se haya creado el segmento. - Se agregó una nueva clase, Scene, con referencias a las APIs de
Scenecore
. Se podrá acceder a la escena como una propiedad de extensión de Session. Las funciones dentro deSessionExt
se movieron a Scene, por lo que se deberán ajustar las importaciones; por ejemplo,SessionExt.getScene(session)
.addSpatialCapababilitiesChangedListener
en comparación conSessionExt.addSpatialCapabilitiesChangedListener
- Se agregó
ActivityPose.hitTestAsync
, lo que permite unhitTest
contra el contenido virtual. - Se agregó un nuevo tipo de componente
SpatialPointerComponent
, que permite a los clientes especificar el ícono renderizado para el puntero o inhabilitar el ícono. Actualmente, este componente solo se puede adjuntar a instancias dePanelEntity
. - Se presentó una nueva fábrica de
PanelEntity
, que toma las dimensiones del panel en metros o píxeles. Se quitó la fábricaPanelEntity
anterior que tomaba dos parámetros de tipo Dimension para el panel.
Cambios en la API
- Se quitó la restricción de
RequiresApi(34)
en todos los paquetes de Jetpack XR. Esta restricción era redundante, ya que Jetpack XR actualmente solo está disponible en dispositivos con el nivel de API 34 y versiones posteriores. (Iae0f8) - Los proyectos lanzados con Kotlin 2.0 requieren que se consuma KGP 2.0.0 o una versión posterior (Idb6b5).
- Se quitó la clase
PermissionHelper
. PanelEntity.getPixelDensity
ya no está disponible.- Se quitaron
PanelEntity.setPixelDimensions
yPanelEntity.getPixelDimension
, y se reemplazaron porsetSizeInPixels
ygetSizeInPixels
. - Se quitó
Entity.getActivitySpaceAlpha
. Se puede reemplazar porEntity.getAlpha(Space.Activity)
. - Se quitó
Entity.getWorldSpaceScale
. Se puede reemplazar porEntity.getScale(Space.REAL\_WORLD)
. - Se borró la clase Session en
SceneCore
y se reemplazó por la clase Session en el tiempo de ejecución de XR. - El nombre de
StereoSurfaceEntity
cambió porSurfaceEntity
. - Se quitaron
Entity.setSize
yEntity.getSize
, y se agregaron los mismos métodos aPanelEntity
. - El nombre de
PointSourceAttributes
cambió porPointSourceParams
. - El nombre de
SpatializerConstants.SOURCE\_TYPE\_BYPASS
cambió porSpatializerConstants.SOURCE\_TYPE\_DEFAULT
. - Se modificó la entidad
PointSourceParams
para que el acceso sea interno en lugar de público. - Ahora,
AnchorEntity.create
requiere que se configurePlaneTrackingMode
enSession.configure()
. - Las APIs de
SpatialUser
ahora requieren que se configureHeadTrackingMode
enSession.configure()
. - Cuando
ResizableComponent
no está adjunto, se proporcionará un registro de nivel INFO en lugar de un registro de nivel ERROR. - La clase Fov ahora es una clase normal de Kotlin.
- Divide
Entity.kt
para colocar cada tipo de entidad concreta en su propio archivo. - Cuando se crea un
PanelEntity
nuevo, la mayoría de los objetos View se reasignan como hijos de unFrameLayout
. Esto facilita el uso deLayoutInspector
con los paneles espaciales. - La instancia de
XrExtensions
que se usa actualmente ahora está registrada en la plataforma, de la mejor manera posible, para ayudar con la depuración de la app.
Correcciones de errores
- Se agregó una corrección para evitar una falla que podía ocurrir cuando se movía un
PanelEntity
conMovableComponent
yAnchorPlacement
. - Se solucionó un problema por el que
ResizableComponent
proporcionaba tamaños obsoletos en la devolución de llamadaonResizeStart
. - Se corrigió la falla que se producía cuando se llamaba varias veces al
dispose()
deJxrPlatformAdapterAxr
.
Versión 1.0.0-alpha03
26 de febrero de 2025
Lanzamiento de androidx.xr.scenecore:scenecore:1.0.0-alpha03
y androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03
. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Ahora se admite la minimización de Proguard para el código de Jetpack XR
Correcciones de errores
- Se agregaron correcciones adicionales para admitir la minimización de Proguard para Jetpack XR SceneCore (I4f47e).
- Se actualizó la regla
ProGuard
de Jetpack XR Scenecore para evitarAbstractMethodError
en clientes minimizados. (I91a01)
Versión 1.0.0-alpha02
12 de febrero de 2025
Lanzamiento de androidx.xr.scenecore:scenecore:1.0.0-alpha02
y androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Próximo cambio rotundo que afectará a las apps compiladas antes de la versión 1.0.0-alpha02
- Los métodos de fábrica se movieron de la clase
Session
a un método complementario en cada tipo respectivo:- Se borró
Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)
y se reemplazó porActivityPanelEntity.create(Session, Dimensions, String, Pose)
- Se borró
Session.createAnchorEntity(Anchor)
y se reemplazó porAnchorEntity.create(Session, Anchor)
- Se borró
Session.createAnchorEntity(Dimensions, Int, Int, Duration)
y se reemplazó porAnchorEntity.create(Session, Dimensions, Int, Int, Duration)
- Se borró
Session.createEntity(String, Pose)
y se reemplazó porContentlessEntity.create(Session, String, Pose)
- Se borró
Session.createExrImageResource(String)
y se reemplazó porExrImage.create(Session, String)
- Se borró
Session.createGltfEntity(GltfModel, Pose)
y se reemplazó porGltfModelEntity.create(Session, GltfModel, Pose)
- Se borró
Session.createGltfModelResource(String)
y se reemplazó porGltfModel.create(Session, String)
- Se borró
Session.createInteractableComponent(Executor, InputEventListener)
y se reemplazó porInteractableComponent.create(Session, Executor, InputEventListener)
- Se borró
Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)
y se reemplazó porMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
- Se borró
Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)
y se reemplazó porPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
- Se borró
Session.createResizableComponent(Dimensions, Dimensions)
y se reemplazó porResizableComponent.create(Session, Dimensions, Dimensions)
- Se borró
Session.createStereoSurfaceEntity(Int, Dimensions, Pose)
y se reemplazó porStereoSurface.create(Session, Int, Dimensions, Pose)
- Se borró
- Se quitaron los siguientes métodos obsoletos:
- Se borró
Session.canEmbedActivityPanel(Activity)
. UsagetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)
en su lugar. - Se borró
Session.hasSpatialCapability(Int)
. Se reemplazó por el uso degetSpatialCapabilities().hasCapability()
como una forma más compartimentada de verificar la presencia de capacidades espaciales, ya quegetSpatialCapabilities()
devuelve un objetoSpatialCapabilities
. - Se borró
Session.requestFullSpaceMode()
y se reemplazó porSpatialEnvironment.requestFullSpaceMode()
- Se borró
Session.requestHomeSpaceMode()
y se reemplazó porSpatialEnvironment.requestHomeSpaceMode()
- Se borró
Session.setFullSpaceMode(Bundle)
ySession.setFullSpaceModeWithEnvironmentInherited(Bundle)
se trasladaron a funciones de extensión. Los archivos del desarrollador deberán agregar las nuevas importaciones para el acceso:import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)
se trasladó a una función de extensión. Los archivos del desarrollador deberán agregar la nueva importación para acceder:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)
ySession.getEntityForRtEntity(RtEntity)
se trasladaron a funciones de extensión. Los archivos del desarrollador deberán agregar las nuevas importaciones para el acceso:import androidx.xr.scenecore.getEntitiesOfType
import androidx.xr.scenecore.getEntityForRtEntity
- Se borró
Session.unpersistAnchor(Anchor)
- Se borró
Session.createPersistedAnchorEntity(UUID)
Errores conocidos
- Es posible que
PanelEntity.setCornerRadius()
yActivityPanelEntity.setCornerRadius()
no surtan efecto hasta que se vuelva a mover el panel. Para evitar esto, mueve el panel a su posición actual. - Cuando se llama a
BoundsChanged
enActivitySpace
, es posible que algunosActivityPose
no se hayan actualizado correctamente. Se actualizará en la siguiente llamada deOnSpaceUpdated
elActivitySpace
Cambios rotundos y de comportamiento
PanelEntity
yActivityPanelEntity
tendrán un radio de esquina predeterminado de 32 dp o menos si el panel tiene un ancho o una altura inferior a 32 dp.
Nuevas APIs y capacidades
- Se presenta
StereoSurface.CanvasShape
, que permite crear lienzosSpherical
yHemispherical
para renderizar contenido multimedia envolvente. StereoSurfaceEntity.create()
ahora acepta un parámetroCanvasShape
. (Actualmente, este parámetro se ignora, pero se usará en una versión futura).StereoSurfaceEntity.create()
ya no toma un parámetroDimensions
. Las aplicaciones deben controlar el tamaño del lienzo configurandoCanvasShape
.StereoSurfaceEntity
tiene un miembroCanvasShape
que se puede establecer de forma dinámica.StereoSurfaceEntity.dimensions
ahora es una propiedad de solo lectura. Las aplicaciones deben establecerCanvasShape
para cambiar las dimensiones.StereoSurfaceEntity
ahora permite que se vuelva a configurarStereoMode
después de la construcción.
Otros cambios
- Se redujo el valor de minSDK en tiempo de compilación a 24. Todas las APIs de Jetpack XR siguen requiriendo la API 34 en el tiempo de ejecución.
- La fábrica de sesiones de
SceneCore
(Session.create
) ya no inicia un intent para adquirir el permiso deSCENE_UNDERSTANDING
. En su lugar, la aplicación cliente debe solicitar explícitamente los permisos al usuario antes de intentar crear los anclajes. La creación de anclajes fallará si el usuario no otorga el permiso.
Correcciones de errores
- Se corrigió
getActivitySpacePose()
para tener en cuenta la escala deActivitySpace
, ya que ahora devuelve valores de traducción en metros escalados en lugar de devolver siempre metros sin escalar. Ahora,transformPoseTo
también usa las unidades correctas para calcular los cambios de coordenadas cuandoActivitySpace
está involucrado en la fuente o el destino. - Ahora, el skybox se establecerá en un skybox completamente negro cada vez que se pase una preferencia de skybox nula con
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
. Para volver al skybox y la geometría predeterminados del sistema, usasetSpatialEnvironmentPreference(null).
.
Versión 1.0.0-alpha01
12 de diciembre de 2024
Lanzamiento de androidx.xr.scenecore:scenecore-* 1.0.0-alpha01
.
Funciones de la versión inicial Versión inicial para desarrolladores de Jetpack SceneCore, una biblioteca de gráficos de escena en 3D para crear y manipular escenas y entornos inmersivos. Esta biblioteca te permite colocar y organizar modelos 3D y paneles de contenido en relación con otros elementos y tus entornos virtuales o del mundo real.
- SpatialEnvironment: Crea experiencias completamente envolventes con una imagen de skybox o una geometría de modelo 3D como telón de fondo para la escena de XR de tu entorno. También puedes habilitar el modo de transferencia para que la escena virtual se integre con el entorno del mundo real del usuario.
- PanelEntity: Agrega contenido 2D a tus escenas 3D incorporando diseños y actividades estándar de Android en paneles espacializados que pueden flotar o anclarse a superficies del mundo real.
- GltfModelEntity: Coloca, anima e interactúa con modelos 3D en tu escena. SceneCore admite el formato de archivo glTF para facilitar la integración con modelos existentes.
- SpatialAudio: Agrega fuentes de audio puntuales y ambientales a tu escena en 3D para obtener un sonido espacializado y completamente envolvente.
- StereoSurfaceEntity: SceneCore admite el enrutamiento del contenido renderizado en una Surface de Android para el ojo izquierdo y el derecho. Se puede usar para renderizar contenido estereoscópico en formato lado a lado o de arriba a abajo, como fotos estéreo, videos en 3D o otras IU renderizadas de forma dinámica. Las aplicaciones deben usar MediaPlayer o ExoPlayer para la decodificación de video.
- Sistema de componentes: SceneCore ofrece un sistema de componentes sólido y flexible para agregar capacidades a tu contenido de XR, incluidas las posibilidades para que los usuarios muevan, cambien de tamaño y manipulen modelos y paneles.
- Anclaje: Con el modo de transferencia habilitado, puedes unir paneles y modelos a superficies reales, lo que les brinda a los usuarios una integración fluida del contenido virtual en su entorno del mundo real.
- Pose del usuario: Accede a la ubicación del usuario en la escena virtual para orientar el contenido según su posición.
- SpatialCapabilities: Crea apps completamente adaptables que aprovechen las capacidades espacializadas cuando estén disponibles, como el posicionamiento en 3D del contenido de la IU. No solo eso, sino que tu app puede supervisar los cambios en las capacidades mientras se ejecuta, para modificar la experiencia según cómo el usuario usa su dispositivo Android XR.
Errores conocidos
- Actualmente, se requiere un minSDK de 30 para usar Jetpack SceneCore. Como solución alternativa, agrega la siguiente entrada de manifiesto
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
para poder compilar y ejecutar con un minSDK de 23. - La sesión puede dejar de ser válida en varias situaciones que recrean automáticamente la actividad, como cambiar el tamaño de un panel principal, conectar periféricos y cambiar entre el modo claro y el modo oscuro. Si tienes problemas de invalidación de sesión, las soluciones alternativas incluyen hacer que tu panel principal no se pueda cambiar de tamaño, usar una entidad de panel dinámico, inhabilitar la recreación de actividades para cambios de configuración específicos o inhabilitar los cambios de tema del modo claro o modo oscuro.
- Los componentes Movable y Resizable no son compatibles con GltfEntity.
- Entity.getSize() no es compatible con GltfEntity.
- Las apps de Jetpack XR deben solicitar el permiso
android.permission.SCENE_UNDERSTANDING
en AndroidManifest. - La creación de una sesión solo se admite en dispositivos Android XR. En este momento, si creas una sesión y tratas de usarla en un dispositivo XR que no sea Android, recibirás una RuntimeException.
- Establecer la skybox como nula a través de `SpatialEnvironment.setSpatialEnvironmentPreference()` no genera una skybox negra sólida como se documentó. Puede generar la skybox predeterminada del sistema o no cambiar la skybox actual.
- Los clientes de SceneCore deben agregar
implementation(“com.google.guava:listenablefuture-1.0”)
a la configuración de Gradle para las dependencias de su app. En una versión futura, scenecore incluirá esta biblioteca como una dependencia deapi
, por lo que los clientes no deberán declararla de forma explícita. - SceneCore incluye erróneamente
com.google.guava:guava-31.1-android
ycom.google.protobuf:protobuf-javalite
como dependencias transitivas. Si esto genera errores de clase duplicada en tu compilación, estas dos dependencias se pueden excluir de forma segura. - Si tu app usa SceneCore y habilita ProGuard, fallará cuando crees una sesión. Como solución alternativa, inhabilita ProGuard. Consulta esta guía para obtener más información sobre cómo habilitar ProGuard.