Jetpack SceneCore

Compilar y manipular el gráfico de escena de Android XR con contenido en 3D
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
21 de octubre de 2026 1.0.0 - - 1.1.0-alpha01

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.1.0-alpha01"

    // Use to write unit tests
    testImplementation "androidx.xr.scenecore:scenecore-testing:1.1.0-alpha01"
}

Kotlin

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.1.0-alpha01")

    // Use to write unit tests
    testImplementation("androidx.xr.scenecore:scenecore-testing:1.1.0-alpha01")
}

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.

Crear un error nuevo

Consulta la documentación sobre la herramienta Issue Tracker para obtener más información.

Versión 1.1

Versión 1.1.0-alpha01

21 de octubre de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron APIs de actualización de mallas dinámicas (MeshBuffer.createDynamic, MeshBuffer.updateVertexData, MeshBuffer.updateIndexData y un constructor CustomMesh.BuilderFromMeshData dinámico) para admitir la actualización de datos de vértices y de índices en el entorno de ejecución. (Ia1ecb)
  • Se agregaron métodos auxiliares de VertexLayout.getBufferIndex para recuperar fácilmente el índice de búfer de un VertexAttribute o VertexBufferLayout determinados. (I1a9e3)
  • Se convirtió CustomMesh.bounds en una variable para que el cuadro delimitador se pueda actualizar de forma dinámica durante el tiempo de ejecución. (Ib0397).
  • Se ascendieron las APIs de animación de glTF (GltfAnimation, GltfModelEntity.getAnimations y GltfModelEntity.stopAllAnimations) a públicas/estables, mientras que se mantuvo el método set de GltfAnimation.loop como experimental, y GltfAnimationStartOptions y start(options) como experimentales y obsoletos. (Iacdae)
  • Se agregó stopAllAnimations() a GltfModelEntity, se hizo que GltfAnimation.start() no tuviera parámetros, se agregaron las propiedades loop y speed a GltfAnimation, y se dieron de baja GltfAnimationStartOptions, start(options) y seekTo(Duration). (I53105)
  • Se actualizaron las APIs de GltfModelEntity para documentar IllegalStateException (específicamente Entity.DisposedException) cuando se llama a entidades eliminadas. I65a76f

Correcciones de errores

  • Se actualizó la dependencia androidx.lifecycle:lifecycle-runtime a la versión 2.10.0. Esta versión es necesaria para que las verificaciones de lint del entorno de ejecución del ciclo de vida empaquetado se ejecuten con la versión 9.5.0-alpha04 o posterior del AGP. (I99bfd, b/556807521)
  • Se mejoraron los kdocs relacionados con AudioOutputProvider para destacar que no se debe volver a usar con varias instancias de ExoPlayer (I6b18e).
  • Se quitaron las dependencias innecesarias de impress de varios módulos de XR. I84636c

Versión 1.0

Versión 1.0.0

21 de octubre de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0. La versión 1.0.0 contiene estas confirmaciones.

Funciones principales de la versión 1.0.0:

  • Jetpack XR SceneCore ahora es estable. SceneCore te permite colocar y organizar contenido en 3D, definido por entidades, en relación con los demás elementos y tu entorno. Con SceneCore, puedes crear, colocar y manipular paneles 2D y modelos 3D en escenas virtuales y de realidad mixta, especificar entornos espaciales y fuentes de audio espacial, y anclar contenido virtual al mundo real.
  • Para obtener más información, consulta nuestra página Resumen y la referencia de la API.

Versión 1.0.0-rc02

7 de octubre de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-rc02. La versión 1.0.0-rc02 incluye estas confirmaciones.

Correcciones de errores

  • Se corrigió una posible fuga de memoria quitando el perceptionRuntimeCache en SessionExt y se refactorizó para recuperar el PerceptionRuntime directamente de la instancia de Session. (Ie35b1)
  • Se corrigió una posible fuga de contexto mediante el uso de applicationContext para los controladores nativos de OpenXR para garantizar que el entorno de ejecución nativo no contenga referencias a un contexto de Activity. (Ie35b1)
  • Se corrigieron las condiciones de carrera en XrInstanceManager con la introducción de un bloqueo de inicialización y sincronización adecuado. (Ie35b1)
  • Se corrigió ReferenceCleaner para admitir la anulación del registro de las acciones de limpieza y se garantizó que las acciones de limpieza de Entity se ejecuten de forma explícita durante dispose(), lo que evita la ejecución duplicada durante la recolección de elementos no utilizados. (Ie35b1)
  • Se corrigió una fuga de memoria en Scene quitando sceneCache en SessionExt y refactorizando Scene para recuperar la instancia directamente de sessionConnectors. (Ie35b1)

Versión 1.0.0-rc01

9 de septiembre de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-rc01. La versión 1.0.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la biblioteca xr:scenecore:scenecore-openxr. (Ic49f2)
  • Se quitaron varias APIs obsoletas antes de la versión estable 1.0.0.

Correcciones de errores

  • Se resolvió un error de fuga de memoria en el que el sistema podía retener la referencia de la actividad cuando esta se destruía. (I6dcd7)

Cambios en el comportamiento

  • Se quitó el resultado de logcat de SceneCore. (I10c3c)

Versión 1.0.0-beta02

12 de agosto de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-beta02. La versión 1.0.0-beta02 incluye estas confirmaciones.

Correcciones de errores

  • toMoveEvent() devolverá null si se recolectó la entidad principal como elemento no utilizado. (Ia7a1b)

Versión 1.0.0-beta01

15 de julio de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Las APIs de GltfAnimation y SpatialGltfModelAnimation se marcaron como experimentales. Algunas propiedades se convirtieron en métodos get. (I8d689, b/524771027)
  • Se quitó el método de fábrica público MovableComponent.createTrackingMovable. (I00912, b/477169015)
  • Se convirtió Session.create en una función de suspensión. (I5d27f).
  • ActivitySpace y AnchorSpace ahora extienden una clase SpaceEntity común que contiene un comportamiento común para las entidades cuyas posiciones controla el sistema (I506ec, b/513619219).
  • Se actualizó AnchorEntity para que se llame AnchorSpace (Ifa95e, b/513619219).
  • Proporciona la API de prueba pública SoundEffectPoolComponentTester. (I87df7, b/498104417)
  • Se agregó un parámetro cornerRadius opcional al constructor SurfaceEntity.Shape.Quad y se hizo pública la propiedad cornerRadius. Ahora, los desarrolladores pueden especificar un radio de esquina cuando crean una forma de cuadrilátero para renderizar lienzos de SurfaceEntity con esquinas redondeadas y consultar el radio de los cuadriláteros existentes. (Ia7809, b/474681085).
  • Proporciona sobrecargas de las APIs de prueba públicas SpatialAudioTrackBuilderTester, SpatialAudioTrackTester y SceneCoreTestRule.getTester. (I378c6, b/496333938)
  • Agrega anulaciones especializadas de toString() para varios tipos de ARCore. Estos tipos están diseñados para proporcionar información adicional a los desarrolladores con fines de depuración y no para usarse en aplicaciones de producción o enviadas.

Versión 1.0.0-alpha16

17 de junio de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha16. La versión 1.0.0-alpha16 incluye estas confirmaciones.

Cambios en la API

  • Se agregaron sobrecargas para addVertexData, setIndexData y addSubset a CustomMesh.BuilderFromMeshData y CustomMesh.BuilderFromMeshBuffer. Estas sobrecargas permiten que los desarrolladores pasen datos sin procesar y parámetros directamente (p.ej., ByteBuffer, offset, size, topology, indexOffset, indexCount) sin necesidad de unirlos en objetos intermediarios como ByteBufferRegion o MeshSubset. (I84d5c)
  • Se cambió el nombre de Scene.requestFullSpaceMode() y Scene.requestHomeSpaceMode() por requestFullSpace() y requestHomeSpace(), respectivamente. Otros métodos y documentación que hacen referencia a "Modo de espacio principal" y "Modo de espacio completo" se actualizaron de manera similar. (I45751)
  • Se proporcionan las APIs de prueba públicas PanelEntityTester y MainPanelEntityTester (I961e4).
  • Se agregó la propiedad pointSourceParams a SoundEffectPoolComponent (I4a750).
  • Se proporciona la API de prueba pública MovableComponentTester (I0c972).
  • Se proporciona la API de prueba pública PointerCaptureComponentTester (Ic0d4f).
  • Se proporciona la API de prueba pública ActivityPanelEntityTester (I837c4).
  • Proporciona la API de prueba pública ResizableComponentTester (I0a3a4).
  • Se proporciona la API de prueba pública BoundsComponentTester. (Iefd53).
  • Se proporciona la API de prueba pública SpatialMediaPlayerTester (Ia3e09).
  • Se proporciona la API de prueba pública SpatialEnvironmentTester (Icf60f).
  • Proporciona las APIs de prueba públicas GltfModelTester y SceneCoreTestRule.getGltfModelTester. (I33fcb)
  • Proporciona la API de prueba pública InteractableComponentTester. (Ia7096)
  • Proporciona la API de prueba pública SurfaceEntityTester. (Ic0740)
  • Proporciona las APIs de prueba públicas GltfModelEntityTester, TestGltfModelNode y TestGltfAnimation. (I72c4d)
  • Proporciona las APIs de prueba públicas SceneTester y SceneCoreTestRule.sceneTester. (Ib4ec5).
  • Proporciona las APIs de prueba públicas PerceptionSpaceTester y SceneCoreTestRule.perceptionSpaceTester. (Icf739)
  • Proporciona la API de prueba pública MeshEntityTester. (I63801)
  • Proporciona sobrecargas de las APIs de prueba públicas ImageBasedLightingAssetTester y SceneCoreTestRule.getTester. (I57ec4)
  • Se proporciona la API de prueba pública TextureTester (Ia865b).
  • Proporciona la API de prueba pública PositionalAudioComponentTester (Icd96e)
  • Se proporciona la API de prueba pública SpatialSoundPoolTester (Ia3531).
  • Se proporciona la API de prueba pública SoundEffectPoolTester (If349a).
  • Proporciona las APIs de prueba públicas ActivitySpaceTester y SceneCoreTestRule.activitySpaceTester. (I2d5c2)
  • Se proporciona la API de prueba pública SpatialWindowTester (I41837).
  • Se proporciona la API de prueba pública AnchorEntityTester (I68404).
  • Proporciona la interfaz de la API de prueba pública SceneCoreTestRule. (Ic72d3).
  • Se agregó la clase PixelDensity y se expuso a través de Scene#virtualPixelDensity para proporcionar una proporción de píxeles por metro basada en hardware para una asignación precisa de dimensiones físicas en ActivitySpace. (I0e3ac).
  • Se agregaron APIs públicas para crear y renderizar mallas personalizadas. (I7ad2f).
  • Se actualizó la API de VertexLayout para usar una lista de VertexBufferLayout, en la que cada VertexBufferLayout describe los atributos dentro de un solo búfer de vértices. Esto permite disposiciones de datos de vértices más flexibles, incluidos atributos intercalados con pasos y desplazamientos personalizados. (Ic426b)
  • Proporciona MovableComponent.createTrackingMovable para transformar un elemento rastreable de ARCore en una pose relativa al espacio de la actividad. (I12249)
  • El valor predeterminado del elemento superior en Entity.create se actualizó a nulo. (Ic3145)
  • Se actualizó Entity para que sea una clase en lugar de una interfaz, y ahora es la clase base para todos los tipos de Entity. Como parte de este cambio, se quitó BaseEntity. (I7fbc9).
  • GltfModel, ExrImage y ImageBasedLightingAsset ahora implementan AutoCloseable para permitir la administración idiomática de recursos con el bloque use de Kotlin. (I1ac79).
  • Se introdujo la clase ImageBasedLightingAsset para reemplazar ExrImage y definir la iluminación del entorno espacial. Se dio de baja ExrImage y se quitó de la API pública. Se actualizó SpatialEnvironmentPreference para usar ImageBasedLightingAsset. (I6c92a).
  • Se cambió el nombre del parámetro skybox en SpatialEnvironment a imageBasedLightingAsset para reflejar mejor su propósito y se aclaró que las texturas visuales de skybox deben incluirse en el parámetro de geometría. (I24d4a)
  • Las entidades espaciales ahora usan una densidad de dispositivo estable para los cálculos de píxeles a metros en los niveles de API 1 y 2 de la API de Spatial, lo que garantiza un tamaño coherente, independientemente de los cambios en la densidad de la pantalla del sistema. (I37051)

Versión 1.0.0-alpha15

19 de mayo de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha15. La versión 1.0.0-alpha15 incluye estas confirmaciones.

Cambios en la API

  • Se quitó Entity.dispose() como API pública. En lugar de llamar a dispose() en las instancias de Entity, las apps pueden hacer que las instancias se puedan limpiar configurando parent como null y borrando las referencias fuertes a esas instancias. (I396c9).
  • Se borraron los métodos set/clearOnLoadCompleteListener de SoundEffectPool. Utiliza add/removeLoadCompleteListener en lugar de esta función. (Iae78d).
  • Se reemplazó set/clearSpatialVisibilityChangedListener de Scene por add/removeSpatialVisibilityChangedListener. (I67dff).
  • Se cambió el nombre de todos los métodos add/removeOnFooListener de SceneCore a add/removeFooListener, y se quitó On del nombre. (Ibe50b).
  • Los métodos AnchorEntity.setOnOriginChangedListener y AnchorEntity.setOnStateChangedListener se reemplazaron por los métodos add/removeFooListener para admitir varios objetos de escucha simultáneos. (I13749)
  • Se cambió el nombre de AnchorEntity.State.TIMEDOUT a State.TIMED_OUT. (Id2b8d)
  • Se refactorizó la API de Component para mejorar la seguridad y la extensibilidad. Component ahora es una clase abstracta. Los métodos onAttach() y onDetach() ahora son protected para evitar llamadas directas. Usa Entity.addComponent() y Entity.removeComponent() para administrar los ciclos de vida de los componentes. (Id04e8)
  • Las constantes PlaneSemanticType PlaneOrientation de SceneCore se migraron de Ints a tipos personalizados. Se quitarán sus constantes ANY, por lo que los clientes deben enumerar de forma explícita todas las constantes deseadas o usar las nuevas constantes Set inmutables .ALL. El método de fábrica AnchorEntity ahora acepta un conjunto de estos tipos, en lugar de un solo valor. (Ib1033).
  • Se agregó compatibilidad con la animación esquelética (skinning) a la API experimental de Custom Mesh. Ahora, los desarrolladores pueden animar mallas personalizadas especificando un boneCount cuando crean un MeshEntity y actualizando la animación en tiempo real con MeshEntity.setBoneTransforms(). (Id8ba2, b/496692490)
  • Se introdujo la API experimental de CustomMesh. Ahora, los desarrolladores pueden crear y renderizar de forma programática geometría 3D en sus escenas con CustomMesh, MeshBuffer y MeshEntity. (I94617).
  • Se quitó androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD. Usa SourceType.SOUND_FIELD en su lugar. (Ia68b9)
  • Se agregaron componentes de audio espacial: PositionalAudioComponent, SoundEffectPoolComponent y SoundFieldAudioComponent (Ieda89).
  • Se reemplazó AnchorEntity.getAnchor por AnchorEntity.anchor y ahora se devolverá un Anchor cuando se cree el AnchorEntity a partir de un Anchor de ARCore (I5c7c8).
  • El valor predeterminado del parámetro parent en los métodos de fábrica ActivityPanelEntity, GltfModelEntity, GroupEntity, PanelEntity y SurfaceEntity se cambió de ActivitySpace a null. Para adjuntar una entidad al gráfico de la escena y hacer que sea visible, los desarrolladores ahora deben establecer de forma explícita su elemento superior durante la creación de una instancia o a través de Entity.parent = ... (Ie7cc1).

Correcciones de errores

  • SceneCore ahora recupera automáticamente las instancias de Entity cuando se vuelven accesibles de forma fantasma, lo que elimina la necesidad de que los desarrolladores invoquen de forma explícita dispose() para liberar recursos. Para garantizar que una instancia de [Entity] se recupere correctamente, los desarrolladores deben hacer lo siguiente:
    • Desconéctalo del gráfico de escena configurando su parent como null.
    • Renunciar a todas las referencias fuertes a la instancia en su código
    • Nota sobre los tipos de entidades especiales: En el caso de las entidades que no pueden tener un elemento superior (como AnchorEntity), los desarrolladores deben mantener una referencia sólida mientras la instancia esté en uso. Si se liberan todas las referencias, estas instancias se volverán accesibles de forma fantasma y se reclamarán automáticamente. (I83fe4)
  • Se redujeron las reglas de conservación de Proguard para todas las bibliotecas de SceneCore. (I98447)

Errores conocidos

  • Si adjuntas un PositionalAudioComponent a un Entity con una instancia de ExoPlayer inactiva, se producirá una falla. No llames a setPointSourceParams ni adjuntes o desconectes los componentes de audio espacial mientras ExoPlayer esté detenido. Se solucionará este problema en la próxima versión.

Versión 1.0.0-alpha14

6 de mayo de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha14. La versión 1.0.0-alpha14 incluye estas confirmaciones.

Cambios en la API

  • TrackingState y VpsAvailabilityResult se movieron a androidx.xr.arcore package, y los tipos de androidx.xr.runtime ahora están obsoletos. (Ic7930, b/480462213)
  • Se cambió el nombre de Plane.Type a PlaneType. (I8c90c, b/482675376)
  • Se cambió el nombre de Plane.Label a PlaneLabel. (Ic6b67, b/482675376)
  • androidx.xr.runtime.FieldOfView quedó obsoleto. Usa androidx.xr.runtime.math.FieldOfView en su lugar. (Ia01a0, b/480233045)
  • El nombre de Matrix4.pose cambió por Matrix4.toPose(). La propiedad pose ahora está obsoleta. (I329b4, b/493383490)
  • Se cambió el nombre de los valores de enum HandJointType. (Ifbc83, b/482670596)
  • Se expusieron Component.onAttach y onDetach como API públicas para permitir implementaciones personalizadas de Component. (I0ca1f)
  • Se agregaron componentes de audio espacial (I39ddd, b/489421980, b/436642086, b/436642499).
  • Quita la entidad de PointSourceParams. En su lugar, la entidad se usará directamente con SpatialAudioTrack, SpatialSoundPool y SpatialMediaPlayer (Ib3685, b/489421980, b/436634048).
  • Se cambió el nombre de DeviceTrackingMode.LAST_KNOWN a SPATIAL_LAST_KNOWN (con un resguardo obsoleto), se agregó INERTIAL_LAST_KNOWN para el seguimiento de 3DoF y se agregó TRACKING_DEGRADED a TrackingState. (Ie661c, b/445466590)
  • GroupEntity quedó obsoleto. Para tener una entidad con solo la funcionalidad de entidad base, llama a Entity.create, que devolverá una interfaz de entidad. (I4c450, b/473867483)
  • Se agregó la API de XrLog. Establece XrLog.isEnabled en true para habilitar el registro en JetpackXR y usa XrLog.Level para establecer el nivel de registro. (I76a1f, b/463460895, b/487378441)

Correcciones de errores

  • Scene.keyEntity ahora se establece de forma predeterminada en mainPanelEntity. (I6a3ef)

Versión 1.0.0-alpha13

25 de marzo de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha13. La versión 1.0.0-alpha13 incluye estas confirmaciones.

Cambios en la API

  • Se quitó la marca unscaledGravityAlignedActivitySpace de Session.create. ActivitySpace ahora siempre se muestra sin escala y alineado con la gravedad. (If6f11, b/458173423)
  • Se quitaron las funciones obsoletas setMaterialOverride y clearMaterialOverride de GltfModelEntity, que ahora se llaman en el GltfModelNode individual. (I2e5d2)
  • Se agregaron transformPixelCoordinatesToLocalPosition y transformNormalizedCoordinatesToLocalPosition a PanelEntity, y se quitaron los métodos experimentales equivalentes que solían devolver poses en lugar de posiciones de Vector3. (Ib6960, b/460123106, b/458333591).
  • Se agregaron las APIs de GltfAnimation para controlar las animaciones de glTF en SceneCore. (I2c172, b/466065486, b/465819070, b/465818617)
  • Se cambió el nombre de ScenePose.activitySpacePose a ScenePose.poseInActivitySpace (I8f175, b/427822261).
  • Se agregó la implementación del entorno de ejecución proyectado de Scenecore (I9c4ab, b/476440158)
  • Cuando se cambia el tamaño de la entidad del panel principal, es posible que se vuelva a colocar en el origen ActivitySpace. No hay otra solución que volver a colocar el panel en su ubicación original de forma manual o programática. Este error se corregirá en una versión futura. (b/489427007).
  • En algunos casos, es posible que la affordance de MovableComponent no aparezca para SurfaceEntity y otros tipos de entidades que no sean paneles. Si configuras MovableComponent.size de forma explícita, aparecerá la affordance. Este error se corregirá en una versión futura (b/490983469).

Versión 1.0.0-alpha12

25 de febrero de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha12. La versión 1.0.0-alpha12 contiene estas confirmaciones.

Errores conocidos

  • Las entidades fijadas pueden ajustarse de su posición fijada al origen del espacio de actividad después de varios segundos.
  • Es posible que las apps fallen cuando se creen instancias de SurfaceEntity. Este problema se resolvió en androidx.xr.scenecore:scenecore-*:1.0.0-alpha13 y en las versiones posteriores. Las apps afectadas deben actualizarse a las versiones más recientes.

Cambios en la API

  • Se cambió el nombre de ActivitySpace.addOnSpaceUpdatedListener y ActivitySpace.removeOnSpaceUpdatedListener por addOnOriginChangedListener y removeOnOriginChangedListener. Se cambió el nombre de AnchorEntity.setOnSpaceUpdatedListener por setOnOriginChangedListener. (I5d8fb).
  • Se agregó la propiedad de nombre público a FakeEntity y se hizo pública la vista en FakePanelEntity. (Ifa1f9)

Correcciones de errores

  • Se corrigieron los cálculos de densidad de píxeles en imágenes del sistema más recientes (I57d04).

Versión 1.0.0-alpha11

28 de enero de 2026

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha11. La versión 1.0.0-alpha11 incluye estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de PerceivedResolutionResult.InvalidCameraView a PerceivedResolutionResult.InvalidRenderViewpoint, ya que las APIs de getPerceivedResolution ahora dependen de la API de RenderViewpoint de ARCore en lugar de CameraViewScenePose. Este nombre refleja mejor la nueva implementación. (I8c967, b/446989745, b/419311998)
  • Los métodos PanelEntity/SurfaceEntity.getPerceivedResolution ahora toman un RenderViewpoint proporcionado por el desarrollador como argumento. Antes, el entorno de ejecución elegía de forma arbitraria el RenderViewpoint que se usaba en el cálculo de la resolución percibida. (I8c967, b/446989745 y b/419311998)
  • Se quitaron SpatialUser, ScenePose.Head y ScenePose.CameraView. La funcionalidad de estas APIs está cubierta por las APIs de ArDevice y RenderViewpoint dentro de ARCore para Jetpack XR. Para obtener un ScenePose correspondiente a la cabeza o al ojo izquierdo o derecho del usuario, los desarrolladores pueden usar PerceptionSpace.getScenePoseFromPerceptionPose con la pose adecuada obtenida con las APIs de ARCore. (I2f69c, b/446989745)

Versión 1.0.0-alpha10

3 de diciembre de 2025

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron transformPixelCoordinatesToPose y transformNormalizedCoordinatesToPose a PanelEntity (I462b3).
  • Se agregó una clase auxiliar, Utils, al entorno de ejecución de SceneCore según la lógica de SceneCore (I570b9).

Correcciones de errores

  • Se corrigió una posible falla que puede ocurrir cuando se destruye la sesión y se recibe un SpatialModeChangeEvent (If44e8).
  • Se corrigió un error que podía provocar que se arrojara una IllegalStateException cuando se salía de una actividad o se volvía a ingresar a ella. (Ibff1c).

Versión 1.0.0-alpha09

19 de noviembre de 2025

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Nuevas funciones

  • Agrega una API para recuperar un ScenePose que represente la composición de la pose de origen del espacio de percepción y una pose con respecto al origen del espacio de percepción. (I5b50a).
  • Se agregó la función getGravityAlignedPose. La pose alineada con la gravedad ignora el cabeceo y el balanceo de la rotación. (I5ae21)
  • Los tipos de constantes de AnchorEntity.State se cambiaron de Ints a subtipos de State. (Ib0c49).
  • Se agregó getChildren() a la interfaz de Entity. Se actualizó el ciclo de vida de MainPanelEntity. (Ia69d6)

Cambios en la API

  • Los tipos de constantes de PointerCaptureComponent.PointerCaptureState se cambiaron de Ints a subtipos de PointerCaptureState. (Ic888a)
  • Scene.spatialCapabilities ahora es del tipo Set<SpatialCapability> en lugar de un campo Int. Se cambiaron los nombres de las constantes SpatialCapability. (I9c109)
  • Se cambiaron los nombres de los tipos de constantes de SurfaceEntity y se cambiaron de Ints a subtipos de SurfaceEntity. (I419ed)
  • Se cambiaron los nombres de los tipos de constantes de SpatializerConstant y se cambiaron de Ints a subtipos de SpatializerConstant. (Ia0e18)
  • Se cambiaron los nombres de los tipos de constantes de TextureSampler y se cambiaron de Ints a subtipos de TextureSampler. (I44078).
  • Los tipos de constantes de SpatialVisibility se cambiaron de Ints a subtipos de SpatialVisibility. (I70739)
  • Se cambiaron los nombres de los tipos de constantes de ResizeEvent.ResizeState y se cambiaron de Ints a subtipos de ResizeState. (I384d5)
  • Se cambiaron los nombres de los tipos de constantes de InputEvent y se modificaron de Ints para que hereden de su respectivo tipo envolvente. (I82817)
  • Los tipos de constantes de GltfModelEntity.AnimationState se cambiaron de Ints a subtipos de AnimationState. (I24f4e)
  • Se cambiaron los nombres de los tipos de constantes de AlphaMode y se cambiaron de Ints a subtipos de AlphaMode. (I27b56).
  • Se cambiaron los tipos de constantes Space de Ints a subtipos de Space. (I9255b)
  • ScenePose.hitTest y los métodos relacionados ahora devuelven null si no se encontró ninguna intersección, en lugar de un HitTestResult con un hitPosition nulo. HitTestResult.hitPosition ya no admite valores nulos. (I1400a)
  • Se cambiaron las referencias de ActivityPose a ScenePose. (I7fe43)

Versión 1.0.0-alpha08

22 de octubre de 2025

Lanzamiento de androidx.xr.scenecore:scenecore-*:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de ActivityPanelEntity.moveActivity a transferActivity (I273c5, b/430332856).

Correcciones de errores

  • Se agregaron :xr:scenecore:scenecore-spatial-rendering y :xr:scenecore:scenecore-spatial-core como dependencia de implementación de :xr:scenecore:scenecore (I6ab65, b/447000520).
  • Se arroja una excepción si se accede a session.scene después de que se destruye la sesión. (I77e6f).

Versión 1.0.0-alpha07

24 de septiembre de 2025

Lanzamiento de androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 y androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07. La versión 1.0.0-alpha07 incluye estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de fixedAspectRatio a isFixedAspectRatioEnabled y se convirtió en una propiedad booleana (I5c4e8, b/440588971).
  • Scenecore Los objetos falsos ahora se encuentran en el módulo xr:scenecore:scenecore-testing. (Idd951)
  • Se cambió el nombre de shouldAutoHideContent a isAutoHideContentWhileResizingEnabled y de shouldAlwaysShowOverlay a isAlwaysShowOverlayEnabled (I97c36, b/432335421).
  • Se actualizaron las constantes SceneCore TextureSampler para mejorar la legibilidad; por ejemplo, TextureSampler.MinFilter.LINEAR ahora es TextureSampler.MIN_FILTER_LINEAR (Ib159c).
  • El método set setKeyEntity de Scene se combinó con la variable keyEntity. Si se establece keyEntity en una entidad que no se puede mover, como AnchorEntity, se arrojará un IllegalArgumentException en lugar de mostrar un valor booleano falso. (I62080, b/428721695, b/422215745)
  • La variable SpatialModeChangeListener de Scene se reemplazó por setSpatialModeChangedListener. Toma un Consumer<SpatialModeChangeEvent> en lugar de un SpatialModeChangedListener. Ahora, setSpatialModeChangedListener puede recibir un Executor de forma opcional. (I62080, b/428721695, b/422215745)
  • Se quitó el parámetro bundle de ActivityPanelEntity.startActivity (I64344, b/430332856, b/430333040).
  • Se cambió el nombre de SpatializerConstants.SOURCE_TYPE_BYPASS a SpatializerConstants.SOURCE_TYPE_DEFAULT. (Ifc7fe, b/422215565)
  • Se agregó la constante SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565)
  • Se agregaron argumentos predeterminados a los métodos SpatialSoundPool.play. (Ifc7fe, b/422215565)
  • Se quitó el valor que se muestra de los métodos set en SpatialAudioTrackBuilder. (Ifc7fe, b/422215565)
  • Cambios en SurfaceEntity
    • SurfaceEntity.CanvasShape cambió el nombre de Shape
    • SurfaceEntity.CanvasShape.Vr180Hemisphere cambió el nombre de Hemisphere
    • SurfaceEntity.CanvasShape.Vr360Sphere cambió el nombre de Sphere
    • SurfaceEntity.EdgeFeatheringParams.SmoothFeather cambió el nombre de RectangleFeather
    • SurfaceEntity.EdgeFeathingParams.SolidEdge cambió el nombre de NoFeathering
    • SurfaceEntity.ContentSecurityLevel cambió el nombre de SurfaceProtection
    • SurfaceEntity.ContentSecurityLevel.{values} agregó un prefijo SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} agregó un prefijo SUPER_SAMPLING_
    • SurfaceEntity.StereoMode.{values} agregó un prefijo STEREO_MODE_
    • Se cambió el nombre de SurfaceEntity.ContentColorMetadata.maxCLL a maxContentLightLevel (I7eb5f, b/422216050, b/427529950)
  • Se cambió el nombre de launchActivity a startActivity (I7db90, b/430332856).
  • Se quitó Scene.activitySpaceRoot. Usa Scene.activitySpace en su lugar. (I05ee8, b/378706624, b/422215745)
  • Se cambiaron los nombres de configureBundleForFullSpaceModeLaunch y configureBundleForFullSpaceModeLaunchWithEnvironmentInherited a createBundleForFullSpaceModeLaunch y createBundleForFullSpaceModeLaunchWithEnvironmentInherited, respectivamente, y se movieron al archivo LaunchUtils.kt como métodos de nivel superior y toman Session como primer parámetro (I64a2c, b/437186050).
  • La fábrica de GroupEntity ahora devuelve el tipo GroupEntity en lugar de Entity. (I66042)

Correcciones de errores

Versión 1.0.0-alpha06

13 de agosto de 2025

Lanzamiento de androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 y androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.

Cambios en la API

  • Se quitaron las restricciones de las APIs de BaseEntity y BaseScenePose de SceneCore (88c0ff6).

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 incluye estas confirmaciones.

Nuevas funciones

  • Se agregó la API de Perceived Resolution a las entidades de panel y a SurfaceEntities. (I118f6)
  • PerceivedResolution Se agregaron métodos de devolución de llamada a Scene.kt para supervisar la resolución percibida del panel principal de la actividad en HSM. (I58084)
  • SurfaceEntity: Se agregó compatibilidad para que la aplicación solicite supermuestreo en el momento de la creación. Esto permite que las aplicaciones usen el filtro de supermuestreo para el suavizado de líneas. (I06913)
  • Se agregó la propiedad recommendedContentBoxInFullSpace a ActivitySpace. Devuelve un cuadro recomendado para colocar el contenido cuando se encuentra 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

Se realizaron cambios extensos en la API de SceneCore para esta versión. Se cambiaron los nombres de varias clases o se movieron a módulos diferentes, y la mayoría de los métodos get y set se reemplazaron por propiedades de Kotlin. Si bien anticipamos que habrá cambios rotundos en la API hasta nuestra primera versión beta, no serán tan disruptivos ni numerosos.

  • Se cambiaron los nombres o se movieron las siguientes clases e interfaces: androidx.xr.scenecore.PixelDimensions a androidx.xr.runtime.math.IntSize2d; androidx.xr.scenecore.Dimensions a androidx.xr.runtime.math.FloatSize3d; androidx.xr.scenecore.ActivityPose a ScenePose, androidx.xr.scenecore.ContentlessEntity a GroupEntity, androidx.xr.scenecore.PlaneType a PlaneOrientation; androidx.xr.scenecore.PlaneSemantic a PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • Se hicieron privados varios métodos set para las propiedades de Scene, ya que no se pretendía que los clientes de SceneCore los mutaran: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironment y spatialUser. (I2f506)
  • En Entity, se cambiaron las siguientes propiedades: get/setParent(), setContentDescription; se dio de baja Entity.is/setHidden(), usa Entity.is/setEnabled en su lugar. (Ibc4c6)
  • Se quitó la clase androidx.xr.scenecore.BasePanelEntity. En su lugar, usa PanelEntity directamente. Se reemplazaron los métodos get y set de PanelEntity por propiedades. Se cambió la propiedad PanelEntity.size de Float3dSize a Float2dSize. Se quitó el método androidx.xr.scenecore.PanelEntity.getPixelDimensions obsoleto. En su lugar, usa getSizeInPixels. (Icc174)
  • Se reemplazó androidx.xr.scenecore.OnSpaceUpdatedListener con Runnable. (I19308)
  • Se reemplazó SpatialUser.getCameraViews() por una propiedad. (Ib0cc5) Para ExrImage y GltfModel:, se cambiaron los métodos create para que sean funciones de suspensión; se modificaron los parámetros de creación para que acepten un Uri o Path en lugar de un String. (Id8883) (I0d247), (I25706)
  • Se movieron SpatialEnvironment.requestFullSpaceMode y SpatialEnvironment.requestHomeSpaceMode a Scene; por ejemplo, usa session.scene.requestFullSpaceMode() en lugar de session.scene.spatialEnvironment.requestFullSpaceMode(). addOnPassthroughOpacityChangedListener y addOnSpatialEnvironmentChangedListener ahora tienen anulaciones que aceptan ejecutores opcionales. (I12fe0) (I6b21e)
  • Se quitaron los siguientes métodos obsoletos de SpatialEnvironment: togglePassthrough, setPassthrough, setPassthroughOpacity, getPassthroughMode, getPassthroughOpacity, setSkybox y setGeometry. También se quitó la clase obsoleta SpatialEnvironment.PassthroughMode (I927bd) (I927bd) (I927bd).
  • Se reemplazaron los siguientes métodos get y set de SpatialEnvironment por propiedades de Kotlin: getCurrentPassthroughOpacity(), get/setPassthroughOpacityPreference(), get/setSpatialEnvironmentPreference(), isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2)
  • El tipo de SpatialEnvironmentPreference.preferredPassthroughOpacity cambió de Float? a Float. Ya no acepta valores nulos. En cambio, se usa SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE para indicar que no hay preferencia de opacidad. (I40107)
  • Se actualizó el parámetro windowBoundsPx a pixelDimensions y su tipo de Rect a IntSize2d en el método de creación. (I1926e)
  • El constructor SpatialEnvironment ahora es interno (I75a51).
  • Se reemplazaron las clases SpatialPointerIconNone y SpatialPointerIconCircle por los objetos complementarios SpatialPointerIcon.NONE y SpatialPointerIcon.CIRCLE (I416d2).
  • SpatialPointerIcon en SpatialPointerComponent ya no puede ser nulo. Usa SpatialPointerIcon.DEFAULT en lugar de un valor nulo 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étodo AnchorEntity.create() para mayor claridad. En los métodos de AnchorEntity para configurar y agregar objetos de escucha, el objeto de escucha se movió al argumento final para habilitar lambdas finales. Se reemplazó androidx.xr.scenecore.OnStateChangedListener de AnchorEntity por Consumer<AnchorEntity.State>. (I472e0)
  • GltfModelEntity.getAnimationState() ahora es una propiedad. (I10b29).
  • Se reemplazó ActivitySpace.getBounds() por una propiedad. Se cambió el nombre de ActivitySpace.addBoundsChangedListener a ActivitySpace.addOnBoundsChangedListener. Se reemplazó ActivitySpace.setOnSpaceUpdatedListener por métodos para agregar y quitar. (I4c956).
  • Se cambió el nombre de AnchorPlacement: planeTypeFilter a anchorablePlaneOrientations, y el de planeSemanticFilter a anchorablePlaneSemanticTypes. Agregar un MovableComponent a un AnchorEntity o ActivitySpace mostrará un valor falso, se cambió el nombre de MoveListener a EntityMoveListener shouldDisposeParentAnchor, se cambió el nombre a disposeParentOnReAnchor systemMovable, se quitó de la función create en favor de creeateCustomMovable, createSystemMovable y createAnchorable (If11c4)
  • Se quitó SurfaceEntity.featherRadiusX/Y y se agregó un concepto de clase EdgeFeatheringParams. (Ic78fc)
  • Se reemplazó el método PanelEntity.enablePanelDepthTest() por la propiedad panelClippingConfig. Establece Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) para habilitar la prueba de profundidad o PanelClippingConfig(isDepthTestEnabled = false) para inhabilitarla. (I0cbe0).
  • Scene.mainPanelEntity ahora es del tipo MainPanelEntity en lugar de PanelEntity (I7125a).
  • Se cambió el nombre del método setFullSpaceMode de Scene por configureBundleForFullSpaceModeLaunch y el del método setFullSpaceModeWithEnvironmentInherited por configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (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).
  • Se reemplazó la clase SpatialVisibility por un objeto público con valores Int constantes. setSpatialVisibilityChangedListener ahora acepta un Consumer<Int> en lugar de Consumer<SpatialVisibility> (Ie7e8c).
  • Se cambiaron los nombres de las constantes de PointerCaptureComponent y se movieron al objeto PointerCaptureComponent.PointerCaptureState (I9c7ac).
  • Se reemplazó PointerCaptureComponents' StateListener con Consumer<Int>. (I9c7ac).
  • Se reemplazó InputEventListener por Consumer<InputEvent> (I9c7ac).
  • setPreferredAspectRatio se movió de la clase Scene al objeto SpatialWindow y toma Session como primer parámetro. (I7b717)
  • Entity.setHidden() se reemplazó por Entity.setEnabled(), y Entity.isHidden() se reemplazó por Entity.isEnabled(). setHidden(false) es igual a setEnabled(true) y isHidden() == !isEnabled(). (Icf0de)
  • El tipo de Entity.contentDescription cambió de String a CharSequence. (Ie59be).
  • Session.create y Session.configure ahora arrojan SecurityException cuando no se otorgaron los permisos suficientes, en lugar de devolver SessionCreatePermissionsNotGranted o SessionConfigurePermissionsNotGranted. (I7c488).
  • ResizableComponent.create ahora requiere un Consumer<ResizeEvent> ResizeEventListener que se reemplazó por Consumer<ResizeEvent> ResizableComponent.size, que se cambió de nombre a ResizableComponent.affordanceSize ResizableComponent.minimumSize, que se cambió de nombre a ResizableComponent.minimumEntitySize ResizableComponent.maximumSize, que se cambió de nombre a ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent se cambió de nombre a ResizableComponent.shouldAutoHideContent, ResizableComponent.forceShowResizeOverlay se cambió de nombre a ResizableComponent.shouldAlwaysShowOverlay (I97a2d)
  • Se redujo minSDK a 24 para androidx.xr.scenecore y androidx.xr.compose. Los paquetes de XR aún requieren la API 34 en el entorno 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 nivel de API 34 o superior. (Iae0f8)
  • El artefacto principal de SceneCore (xr:scenecore:scenecore) solo contendrá APIs asíncronas de estilo Kotlin. Los desarrolladores de Java pueden depender de la biblioteca xr:scenecore:scenecore-guava para acceder a las APIs compatibles. (If221b)
  • Los proyectos lanzados con Kotlin 2.0 requieren KGP 2.0.0 o una versión posterior para consumirse (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 en ListenableFuture 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 de ScenePose equivalentes a Guava, GuavaGltfModel contiene las funciones asíncronas de Guava-equivalent GltfModel, etc. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

Correcciones de errores

  • Se actualizó la regla de Jetpack XR Scenecore ProGuard para evitar AbstractMethodError en clientes reducidos. (I91a01)
  • Se agregaron correcciones adicionales para admitir la reducción de Proguard para Jetpack XR SceneCore (I4f47e).
  • Se corrigió un error por el que un InteractableComponent podía causar una falla si el hitPosition en el HitInfo del InputEvent podía fallar si el hitPosition que devolvía el sistema era nulo (I7a695).
  • Se cambiaron los nombres de los valores de Config *Mode para reflejar su comportamiento. (I6d247)
  • Se corrigieron problemas con el FOV y HitTest en la TestApp de SceneCore. (I2c51e)
  • Se corrigió un error en SpatialCapabilities.hasCapability() que devolvía el valor verdadero si alguna de las capacidades pasadas con un OR bit a bit era verdadera, en lugar de devolver el valor verdadero solo si todas eran verdaderas. (I2cd40)
  • Se actualizó SurfaceEntity.StereoMode.TOP_BOTTOM para que el mapa superior se asigne al ojo izquierdo y el mapa inferior, al 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 incluye estas confirmaciones.

Nuevas funciones

  • Ahora, el control de retroceso funcionará en las entidades de panel sin actividades incorporadas. Para que funcione el control de retroceso, debes especificar android:enableOnBackInvokedCallback= "true" en el manifiesto de Android.
  • StereoSurfaceEntity ahora admite la reproducción de MV-HEVC a través de dos nuevos valores de StereoMode: MULTIVIEW_LEFT_PRIMARY y MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize y PanelEntity.getSize ahora devuelven tamaños en el espacio superior.
  • Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha y Entity.getAlpha ahora toman un nuevo parámetro relativeTo, que permite obtener o establecer valores relativos a diferentes espacios. Los valores admitidos son Parent, Activity y Real World spaces, y el valor predeterminado de 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 visual del usuario.
  • Se agregó setPointSourceParams a SpatialAudioTrack, lo que permite que se actualicen los parámetros después de que se haya creado la pista.
  • Se agregó una clase nueva, Scene, con referencias a las APIs de Scenecore. Se podrá acceder a Scene como una propiedad de extensión de Session. Las funciones dentro de SessionExt se movieron a Scene, por lo que se deberán ajustar las importaciones; por ejemplo, SessionExt.getScene(session).addSpatialCapababilitiesChangedListener contra SessionExt.addSpatialCapabilitiesChangedListener.
  • Se agregó ActivityPose.hitTestAsync, lo que habilita un hitTest en el contenido virtual.
  • Se agregó el nuevo tipo de componente SpatialPointerComponent, que permite a los clientes especificar el ícono renderizado para el puntero o inhabilitarlo. Por el momento, este componente solo se puede adjuntar a instancias de PanelEntity.
  • Se introdujo la nueva fábrica PanelEntity, que toma las dimensiones del panel en metros o píxeles. Se quitó la fábrica PanelEntity 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 nivel de API 34 o superior. (Iae0f8)
  • Los proyectos lanzados con Kotlin 2.0 requieren KGP 2.0.0 o una versión posterior para consumirse (Idb6b5).
  • Se quitó la clase PermissionHelper.
  • PanelEntity.getPixelDensity ya no está disponible.
  • Se quitaron PanelEntity.setPixelDimensions y PanelEntity.getPixelDimension, y se reemplazaron por setSizeInPixels y getSizeInPixels.
  • Se quitó Entity.getActivitySpaceAlpha. Se puede reemplazar por Entity.getAlpha(Space.Activity).
  • Se quitó Entity.getWorldSpaceScale. Se puede reemplazar por Entity.getScale(Space.REAL\_WORLD).
  • Se borró la clase Session en SceneCore y se reemplazó por Session en XR Runtime.
  • El nombre de StereoSurfaceEntity cambió por SurfaceEntity.
  • Se quitaron Entity.setSize y Entity.getSize, y se agregaron los mismos métodos a PanelEntity.
  • El nombre de PointSourceAttributes cambió por PointSourceParams.
  • El nombre de SpatializerConstants.SOURCE\_TYPE\_BYPASS cambió por SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • Se modificó la entidad PointSourceParams de acceso público a interno.
  • AnchorEntity.create ahora requiere que se configure PlaneTrackingMode en Session.configure().
  • Las APIs de SpatialUser ahora requieren que se configure HeadTrackingMode en Session.configure().
  • Cuando no se adjunte ResizableComponent, se proporcionará un registro de nivel INFO en lugar de uno de nivel ERROR.
  • La clase Fov ahora es una clase de Kotlin normal.
  • Divide Entity.kt para colocar cada tipo de entidad concreta en su propio archivo.
  • Cuando crees un PanelEntity nuevo, la mayoría de las vistas se volverán a vincular a un FrameLayout. Esto facilita el uso de LayoutInspector con 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 con MovableComponent y AnchorPlacement.
  • Se solucionó un problema por el que ResizableComponent proporcionaba tamaños obsoletos en la devolución de llamada de onResizeStart.
  • Se corrigió la falla que se producía cuando se llamaba varias veces a dispose() de JxrPlatformAdapterAxr.

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 reducción de Proguard para el código de Jetpack XR

Correcciones de errores

  • Se agregaron correcciones adicionales para admitir la reducción de Proguard para Jetpack XR SceneCore (I4f47e).
  • Se actualizó la regla de Jetpack XR Scenecore ProGuard para evitar AbstractMethodError en clientes reducidos. (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 incluye 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ó por ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Se borró Session.createAnchorEntity(Anchor) y se reemplazó por AnchorEntity.create(Session, Anchor)
    • Se borró Session.createAnchorEntity(Dimensions, Int, Int, Duration) y se reemplazó por AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Se borró Session.createEntity(String, Pose) y se reemplazó por ContentlessEntity.create(Session, String, Pose)
    • Se borró Session.createExrImageResource(String) y se reemplazó por ExrImage.create(Session, String)
    • Se borró Session.createGltfEntity(GltfModel, Pose) y se reemplazó por GltfModelEntity.create(Session, GltfModel, Pose)
    • Se borró Session.createGltfModelResource(String) y se reemplazó por GltfModel.create(Session, String)
    • Se borró Session.createInteractableComponent(Executor, InputEventListener) y se reemplazó por InteractableComponent.create(Session, Executor, InputEventListener)
    • Se borró Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) y se reemplazó por MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Se borró Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) y se reemplazó por PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Se borró Session.createResizableComponent(Dimensions, Dimensions) y se reemplazó por ResizableComponent.create(Session, Dimensions, Dimensions)
    • Se borró Session.createStereoSurfaceEntity(Int, Dimensions, Pose) y se reemplazó por StereoSurface.create(Session, Int, Dimensions, Pose)
  • Se quitaron los siguientes métodos obsoletos:
    • Se borró Session.canEmbedActivityPanel(Activity). Usa getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY) en su lugar.
    • Se borró Session.hasSpatialCapability(Int). Se reemplazó por el uso de getSpatialCapabilities().hasCapability() como una forma más compartimentada de verificar la presencia de capacidades espaciales, ya que getSpatialCapabilities() devuelve un objeto SpatialCapabilities.
    • Se borró Session.requestFullSpaceMode() y se reemplazó por SpatialEnvironment.requestFullSpaceMode()
    • Se borró Session.requestHomeSpaceMode() y se reemplazó por SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle) y Session.setFullSpaceModeWithEnvironmentInherited(Bundle) se movieron 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 movió a una función de extensión. Los archivos del desarrollador deberán agregar la nueva importación para el acceso:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) y Session.getEntityForRtEntity(RtEntity) se movieron 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() y ActivityPanelEntity.setCornerRadius() no se apliquen hasta que se mueva el panel. Esto se puede mitigar moviendo el panel a su posición actual.
  • Cuando se llama a BoundsChanged en ActivitySpace, es posible que algunos ActivityPose no se hayan actualizado correctamente. Se actualizará en la siguiente llamada de OnSpaceUpdated el ActivitySpace

Cambios rotundos y de comportamiento

  • PanelEntity y ActivityPanelEntity tendrán un radio de esquina predeterminado de 32 dp o menos si el panel tiene un ancho o una altura inferiores a 32 dp.

Nuevas APIs y funciones

  • Se introduce StereoSurface.CanvasShape, que permite crear lienzos de Spherical y Hemispherical para renderizar contenido multimedia envolvente.
  • StereoSurfaceEntity.create() ahora acepta un parámetro CanvasShape. (Actualmente, este parámetro se ignora, pero se usará en una versión futura).
  • StereoSurfaceEntity.create() ya no toma un parámetro Dimensions. Las aplicaciones deben controlar el tamaño del lienzo configurando CanvasShape.
  • StereoSurfaceEntity tiene un miembro CanvasShape que se puede configurar de forma dinámica.
  • StereoSurfaceEntity.dimensions ahora es una propiedad de solo lectura; las aplicaciones deben establecer CanvasShape para cambiar las dimensiones.
  • StereoSurfaceEntity ahora permite que se vuelva a configurar StereoMode después de la construcción.

Otros cambios

  • Se redujo el minSDK de tiempo de compilación a 24. Todas las APIs de Jetpack XR siguen requiriendo la API 34 en el entorno de ejecución.
  • La fábrica de sesiones de SceneCore (Session.create) ya no inicia un intent para adquirir el permiso SCENE_UNDERSTANDING. En cambio, la aplicación cliente debe solicitar explícitamente los permisos al usuario antes de intentar crear los anclajes. La creación de la ancla fallará si el usuario no otorga el permiso.

Correcciones de errores

  • Se corrigió getActivitySpacePose() para tener en cuenta la escala de ActivitySpace, ya que devuelve valores de traslación en metros ajustados en lugar de devolver siempre metros no ajustados. Ahora, transformPoseTo también usa las unidades correctas para calcular los cambios de coordenadas cuando el ActivitySpace está involucrado en el origen 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, usa setSpatialEnvironmentPreference(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 escenas 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 los demás y con 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 fondo para la escena de XR de tu entorno. También puedes habilitar la transferencia para que tu escena virtual se integre con el entorno real del usuario.
  • PanelEntity: Agrega contenido en 2D a tus escenas en 3D incorporando diseños y actividades estándar de Android en paneles espacializados que pueden flotar o fijarse a superficies del mundo real.
  • GltfModelEntity: Coloca modelos 3D en tu escena, anímalos y, luego, interactúa con ellos. SceneCore admite el formato de archivo glTF para facilitar la integración con los modelos existentes.
  • SpatialAudio: Agrega fuentes de audio ambiental y puntual a tu escena en 3D para obtener un sonido espacial completamente envolvente.
  • StereoSurfaceEntity: SceneCore admite el enrutamiento de contenido renderizado en una Surface de Android para el ojo izquierdo o derecho. Esto se puede usar para renderizar contenido estereoscópico en un formato en paralelo o de arriba abajo, como fotos estéreo, videos en 3D o cualquier otra IU renderizada 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 funciones a tu contenido de RE, incluidas las affordances para que los usuarios muevan, cambien el tamaño y, además, interactúen con modelos y paneles.
  • Anclaje: Con la transferencia habilitada, puedes adjuntar paneles y modelos a superficies reales, lo que les brinda a los usuarios una integración perfecta del contenido virtual en su entorno real.
  • Pose del usuario: Accede a la ubicación del usuario en la escena virtual para orientar tu contenido en torno a 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 en función de cómo el usuario usa su dispositivo Android XR.

Errores conocidos

  • Actualmente, se requiere un minSDK de 30 para usar SceneCore de Jetpack. 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 oscuro. Si tienes problemas de invalidación de sesiones, las soluciones alternativas incluyen hacer que el 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/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 un dispositivo Android XR. En este momento, si creas una Session y tratas de usarla en un dispositivo Android XR, obtendrás una RuntimeException.
  • Establecer el skybox como nulo a través de `SpatialEnvironment.setSpatialEnvironmentPreference() no genera un skybox negro sólido como se documenta. Esto puede dar como resultado el skybox predeterminado del sistema o que no se produzca ningún cambio en el skybox actual.
  • Los clientes de SceneCore deben agregar implementation(“com.google.guava:listenablefuture-1.0”) a su configuración de Gradle para las dependencias de su app. En una versión futura, scenecore incluirá esta biblioteca como una dependencia de api, por lo que los clientes no necesitarán declararla de forma explícita.
  • SceneCore incluye erróneamente com.google.guava:guava-31.1-android y com.google.protobuf:protobuf-javalite como dependencias transitivas. Si esto genera errores de clases duplicadas 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.