Jetpack SceneCore
| 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.
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.updateIndexDatay un constructorCustomMesh.BuilderFromMeshDatadiná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.getBufferIndexpara recuperar fácilmente el índice de búfer de unVertexAttributeoVertexBufferLayoutdeterminados. (I1a9e3) - Se convirtió
CustomMesh.boundsen 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.getAnimationsyGltfModelEntity.stopAllAnimations) a públicas/estables, mientras que se mantuvo el método set deGltfAnimation.loop como experimental, yGltfAnimationStartOptionsy start(options) como experimentales y obsoletos. (Iacdae) - Se agregó
stopAllAnimations()aGltfModelEntity, se hizo queGltfAnimation.start()no tuviera parámetros, se agregaron las propiedadesloopyspeedaGltfAnimation, y se dieron de bajaGltfAnimationStartOptions,start(options)yseekTo(Duration). (I53105) - Se actualizaron las APIs de
GltfModelEntitypara documentarIllegalStateException(específicamenteEntity.DisposedException) cuando se llama a entidades eliminadas. I65a76f
Correcciones de errores
- Se actualizó la dependencia
androidx.lifecycle:lifecycle-runtimea 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
AudioOutputProviderpara destacar que no se debe volver a usar con varias instancias deExoPlayer(I6b18e). - Se quitaron las dependencias innecesarias de
impressde 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
perceptionRuntimeCacheenSessionExty se refactorizó para recuperar elPerceptionRuntimedirectamente de la instancia deSession. (Ie35b1) - Se corrigió una posible fuga de contexto mediante el uso de
applicationContextpara los controladores nativos deOpenXRpara garantizar que el entorno de ejecución nativo no contenga referencias a un contexto deActivity. (Ie35b1) - Se corrigieron las condiciones de carrera en
XrInstanceManagercon la introducción de un bloqueo de inicialización y sincronización adecuado. (Ie35b1) - Se corrigió
ReferenceCleanerpara admitir la anulación del registro de las acciones de limpieza y se garantizó que las acciones de limpieza deEntityse ejecuten de forma explícita durantedispose(), lo que evita la ejecución duplicada durante la recolección de elementos no utilizados. (Ie35b1) - Se corrigió una fuga de memoria en
ScenequitandosceneCacheenSessionExty refactorizandoScenepara recuperar la instancia directamente desessionConnectors. (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ánullsi 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
GltfAnimationySpatialGltfModelAnimationse 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).
ActivitySpaceyAnchorSpaceahora extienden una claseSpaceEntitycomún que contiene un comportamiento común para las entidades cuyas posiciones controla el sistema (I506ec, b/513619219).- Se actualizó
AnchorEntitypara que se llameAnchorSpace(Ifa95e, b/513619219). - Proporciona la API de prueba pública
SoundEffectPoolComponentTester. (I87df7, b/498104417) - Se agregó un parámetro
cornerRadiusopcional al constructorSurfaceEntity.Shape.Quady se hizo pública la propiedadcornerRadius. Ahora, los desarrolladores pueden especificar un radio de esquina cuando crean una forma de cuadrilátero para renderizar lienzos deSurfaceEntitycon esquinas redondeadas y consultar el radio de los cuadriláteros existentes. (Ia7809, b/474681085). - Proporciona sobrecargas de las APIs de prueba públicas
SpatialAudioTrackBuilderTester,SpatialAudioTrackTesterySceneCoreTestRule.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,setIndexDatayaddSubsetaCustomMesh.BuilderFromMeshDatayCustomMesh.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 comoByteBufferRegionoMeshSubset. (I84d5c) - Se cambió el nombre de
Scene.requestFullSpaceMode()yScene.requestHomeSpaceMode()porrequestFullSpace()yrequestHomeSpace(), 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
PanelEntityTesteryMainPanelEntityTester(I961e4). - Se agregó la propiedad
pointSourceParamsaSoundEffectPoolComponent(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
GltfModelTesterySceneCoreTestRule.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,TestGltfModelNodeyTestGltfAnimation. (I72c4d) - Proporciona las APIs de prueba públicas
SceneTesterySceneCoreTestRule.sceneTester. (Ib4ec5). - Proporciona las APIs de prueba públicas
PerceptionSpaceTesterySceneCoreTestRule.perceptionSpaceTester. (Icf739) - Proporciona la API de prueba pública
MeshEntityTester. (I63801) - Proporciona sobrecargas de las APIs de prueba públicas
ImageBasedLightingAssetTesterySceneCoreTestRule.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
ActivitySpaceTesterySceneCoreTestRule.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
PixelDensityy se expuso a través deScene#virtualPixelDensitypara proporcionar una proporción de píxeles por metro basada en hardware para una asignación precisa de dimensiones físicas enActivitySpace. (I0e3ac). - Se agregaron APIs públicas para crear y renderizar mallas personalizadas. (I7ad2f).
- Se actualizó la API de
VertexLayoutpara usar una lista deVertexBufferLayout, en la que cadaVertexBufferLayoutdescribe 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.createTrackingMovablepara transformar un elemento rastreable de ARCore en una pose relativa al espacio de la actividad. (I12249) - El valor predeterminado del elemento superior en
Entity.createse actualizó a nulo. (Ic3145) - Se actualizó
Entitypara 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,ExrImageyImageBasedLightingAssetahora implementanAutoCloseablepara permitir la administración idiomática de recursos con el bloqueusede Kotlin. (I1ac79).- Se introdujo la clase
ImageBasedLightingAssetpara reemplazarExrImagey definir la iluminación del entorno espacial. Se dio de bajaExrImagey se quitó de la API pública. Se actualizóSpatialEnvironmentPreferencepara usarImageBasedLightingAsset. (I6c92a). - Se cambió el nombre del parámetro
skyboxenSpatialEnvironmentaimageBasedLightingAssetpara 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 adispose()en las instancias de Entity, las apps pueden hacer que las instancias se puedan limpiar configurandoparentcomonully borrando las referencias fuertes a esas instancias. (I396c9). - Se borraron los métodos
set/clearOnLoadCompleteListenerdeSoundEffectPool. Utilizaadd/removeLoadCompleteListeneren lugar de esta función. (Iae78d). - Se reemplazó
set/clearSpatialVisibilityChangedListenerde Scene poradd/removeSpatialVisibilityChangedListener. (I67dff). - Se cambió el nombre de todos los métodos
add/removeOnFooListenerde SceneCore aadd/removeFooListener, y se quitóOndel nombre. (Ibe50b). - Los métodos
AnchorEntity.setOnOriginChangedListeneryAnchorEntity.setOnStateChangedListenerse reemplazaron por los métodosadd/removeFooListenerpara admitir varios objetos de escucha simultáneos. (I13749) - Se cambió el nombre de
AnchorEntity.State.TIMEDOUTaState.TIMED_OUT. (Id2b8d) - Se refactorizó la API de Component para mejorar la seguridad y la extensibilidad.
Componentahora es una clase abstracta. Los métodosonAttach()yonDetach()ahora sonprotectedpara evitar llamadas directas. UsaEntity.addComponent()yEntity.removeComponent()para administrar los ciclos de vida de los componentes. (Id04e8) - Las constantes
PlaneSemanticTypePlaneOrientationde SceneCore se migraron de Ints a tipos personalizados. Se quitarán sus constantesANY, 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ábricaAnchorEntityahora 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
boneCountcuando crean unMeshEntityy actualizando la animación en tiempo real conMeshEntity.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 conCustomMesh,MeshBufferyMeshEntity. (I94617). - Se quitó
androidx.xr.scenecore.SpatializerConstants.SourceType.SOURCE_TYPE_SOUND_FIELD. UsaSourceType.SOUND_FIELDen su lugar. (Ia68b9) - Se agregaron componentes de audio espacial:
PositionalAudioComponent,SoundEffectPoolComponentySoundFieldAudioComponent(Ieda89). - Se reemplazó
AnchorEntity.getAnchorporAnchorEntity.anchory ahora se devolverá unAnchorcuando se cree elAnchorEntitya partir de unAnchorde ARCore (I5c7c8). - El valor predeterminado del parámetro
parenten los métodos de fábricaActivityPanelEntity,GltfModelEntity,GroupEntity,PanelEntityySurfaceEntityse cambió deActivitySpaceanull. 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 deEntity.parent = ...(Ie7cc1).
Correcciones de errores
SceneCoreahora recupera automáticamente las instancias deEntitycuando se vuelven accesibles de forma fantasma, lo que elimina la necesidad de que los desarrolladores invoquen de forma explícitadispose()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
parentcomonull. - 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)
- Desconéctalo del gráfico de escena configurando su
- Se redujeron las reglas de conservación de Proguard para todas las bibliotecas de
SceneCore. (I98447)
Errores conocidos
- Si adjuntas un
PositionalAudioComponenta unEntitycon una instancia deExoPlayerinactiva, se producirá una falla. No llames asetPointSourceParamsni 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
TrackingStateyVpsAvailabilityResultse movieron aandroidx.xr.arcore package, y los tipos deandroidx.xr.runtimeahora están obsoletos. (Ic7930, b/480462213)- Se cambió el nombre de
Plane.TypeaPlaneType. (I8c90c, b/482675376) - Se cambió el nombre de
Plane.LabelaPlaneLabel. (Ic6b67, b/482675376) androidx.xr.runtime.FieldOfViewquedó obsoleto. Usaandroidx.xr.runtime.math.FieldOfViewen su lugar. (Ia01a0, b/480233045)- El nombre de
Matrix4.posecambió porMatrix4.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.onAttachyonDetachcomo API públicas para permitir implementaciones personalizadas deComponent. (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 conSpatialAudioTrack,SpatialSoundPoolySpatialMediaPlayer(Ib3685, b/489421980, b/436634048). - Se cambió el nombre de
DeviceTrackingMode.LAST_KNOWNaSPATIAL_LAST_KNOWN(con un resguardo obsoleto), se agregóINERTIAL_LAST_KNOWNpara el seguimiento de 3DoF y se agregóTRACKING_DEGRADEDaTrackingState. (Ie661c, b/445466590) GroupEntityquedó obsoleto. Para tener una entidad con solo la funcionalidad de entidad base, llama aEntity.create, que devolverá una interfaz de entidad. (I4c450, b/473867483)- Se agregó la API de
XrLog. EstableceXrLog.isEnabledentruepara habilitar el registro en JetpackXR y usaXrLog.Levelpara establecer el nivel de registro. (I76a1f, b/463460895, b/487378441)
Correcciones de errores
Scene.keyEntityahora se establece de forma predeterminada enmainPanelEntity. (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
unscaledGravityAlignedActivitySpacedeSession.create.ActivitySpaceahora siempre se muestra sin escala y alineado con la gravedad. (If6f11, b/458173423) - Se quitaron las funciones obsoletas
setMaterialOverrideyclearMaterialOverridedeGltfModelEntity, que ahora se llaman en elGltfModelNodeindividual. (I2e5d2) - Se agregaron
transformPixelCoordinatesToLocalPositionytransformNormalizedCoordinatesToLocalPositionaPanelEntity, y se quitaron los métodos experimentales equivalentes que solían devolver poses en lugar de posiciones deVector3. (Ib6960, b/460123106, b/458333591). - Se agregaron las APIs de
GltfAnimationpara controlar las animaciones de glTF enSceneCore. (I2c172, b/466065486, b/465819070, b/465818617) - Se cambió el nombre de
ScenePose.activitySpacePoseaScenePose.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
MovableComponentno aparezca paraSurfaceEntityy otros tipos de entidades que no sean paneles. Si configurasMovableComponent.sizede 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ó enandroidx.xr.scenecore:scenecore-*:1.0.0-alpha13y 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.addOnSpaceUpdatedListeneryActivitySpace.removeOnSpaceUpdatedListenerporaddOnOriginChangedListeneryremoveOnOriginChangedListener. Se cambió el nombre deAnchorEntity.setOnSpaceUpdatedListenerporsetOnOriginChangedListener. (I5d8fb). - Se agregó la propiedad de nombre público a
FakeEntityy se hizo pública la vista enFakePanelEntity. (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.InvalidCameraViewaPerceivedResolutionResult.InvalidRenderViewpoint, ya que las APIs degetPerceivedResolutionahora dependen de la API deRenderViewpointde ARCore en lugar deCameraViewScenePose. Este nombre refleja mejor la nueva implementación. (I8c967, b/446989745, b/419311998) - Los métodos
PanelEntity/SurfaceEntity.getPerceivedResolutionahora toman unRenderViewpointproporcionado por el desarrollador como argumento. Antes, el entorno de ejecución elegía de forma arbitraria elRenderViewpointque se usaba en el cálculo de la resolución percibida. (I8c967, b/446989745 y b/419311998) - Se quitaron
SpatialUser,ScenePose.HeadyScenePose.CameraView. La funcionalidad de estas APIs está cubierta por las APIs deArDeviceyRenderViewpointdentro de ARCore para Jetpack XR. Para obtener unScenePosecorrespondiente a la cabeza o al ojo izquierdo o derecho del usuario, los desarrolladores pueden usarPerceptionSpace.getScenePoseFromPerceptionPosecon 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
transformPixelCoordinatesToPoseytransformNormalizedCoordinatesToPoseaPanelEntity(I462b3). - Se agregó una clase auxiliar, Utils, al entorno de ejecución de
SceneCoresegún la lógica deSceneCore(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
IllegalStateExceptioncuando 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
ScenePoseque 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.Statese cambiaron de Ints a subtipos de State. (Ib0c49). - Se agregó
getChildren()a la interfaz de Entity. Se actualizó el ciclo de vida deMainPanelEntity. (Ia69d6)
Cambios en la API
- Los tipos de constantes de
PointerCaptureComponent.PointerCaptureStatese cambiaron de Ints a subtipos dePointerCaptureState. (Ic888a) Scene.spatialCapabilitiesahora es del tipoSet<SpatialCapability>en lugar de un campo Int. Se cambiaron los nombres de las constantesSpatialCapability. (I9c109)- Se cambiaron los nombres de los tipos de constantes de
SurfaceEntityy se cambiaron de Ints a subtipos deSurfaceEntity. (I419ed) - Se cambiaron los nombres de los tipos de constantes de
SpatializerConstanty se cambiaron de Ints a subtipos deSpatializerConstant. (Ia0e18) - Se cambiaron los nombres de los tipos de constantes de
TextureSamplery se cambiaron de Ints a subtipos deTextureSampler. (I44078). - Los tipos de constantes de
SpatialVisibilityse cambiaron de Ints a subtipos deSpatialVisibility. (I70739) - Se cambiaron los nombres de los tipos de constantes de
ResizeEvent.ResizeStatey se cambiaron de Ints a subtipos deResizeState. (I384d5) - Se cambiaron los nombres de los tipos de constantes de
InputEventy se modificaron de Ints para que hereden de su respectivo tipo envolvente. (I82817) - Los tipos de constantes de
GltfModelEntity.AnimationStatese cambiaron de Ints a subtipos deAnimationState. (I24f4e) - Se cambiaron los nombres de los tipos de constantes de
AlphaModey se cambiaron de Ints a subtipos deAlphaMode. (I27b56). - Se cambiaron los tipos de constantes
Spacede Ints a subtipos de Space. (I9255b) ScenePose.hitTesty los métodos relacionados ahora devuelvennullsi no se encontró ninguna intersección, en lugar de unHitTestResultcon unhitPositionnulo.HitTestResult.hitPositionya no admite valores nulos. (I1400a)- Se cambiaron las referencias de
ActivityPoseaScenePose. (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.moveActivityatransferActivity(I273c5, b/430332856).
Correcciones de errores
- Se agregaron
:xr:scenecore:scenecore-spatial-renderingy:xr:scenecore:scenecore-spatial-corecomo dependencia de implementación de:xr:scenecore:scenecore(I6ab65, b/447000520). - Se arroja una excepción si se accede a
session.scenedespué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
fixedAspectRatioaisFixedAspectRatioEnabledy se convirtió en una propiedad booleana (I5c4e8, b/440588971). ScenecoreLos objetos falsos ahora se encuentran en el móduloxr:scenecore:scenecore-testing. (Idd951)- Se cambió el nombre de
shouldAutoHideContentaisAutoHideContentWhileResizingEnabledy deshouldAlwaysShowOverlayaisAlwaysShowOverlayEnabled(I97c36, b/432335421). - Se actualizaron las constantes
SceneCoreTextureSamplerpara mejorar la legibilidad; por ejemplo,TextureSampler.MinFilter.LINEARahora esTextureSampler.MIN_FILTER_LINEAR(Ib159c). - El método set
setKeyEntityde Scene se combinó con la variablekeyEntity. Si se establecekeyEntityen una entidad que no se puede mover, comoAnchorEntity, se arrojará unIllegalArgumentExceptionen lugar de mostrar un valor booleano falso. (I62080, b/428721695, b/422215745) - La variable
SpatialModeChangeListenerde Scene se reemplazó porsetSpatialModeChangedListener. Toma unConsumer<SpatialModeChangeEvent>en lugar de unSpatialModeChangedListener. Ahora,setSpatialModeChangedListenerpuede recibir un Executor de forma opcional. (I62080, b/428721695, b/422215745) - Se quitó el parámetro
bundledeActivityPanelEntity.startActivity(I64344, b/430332856, b/430333040). - Se cambió el nombre de
SpatializerConstants.SOURCE_TYPE_BYPASSaSpatializerConstants.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.CanvasShapecambió el nombre deShapeSurfaceEntity.CanvasShape.Vr180Hemispherecambió el nombre deHemisphereSurfaceEntity.CanvasShape.Vr360Spherecambió el nombre deSphereSurfaceEntity.EdgeFeatheringParams.SmoothFeathercambió el nombre deRectangleFeatherSurfaceEntity.EdgeFeathingParams.SolidEdgecambió el nombre deNoFeatheringSurfaceEntity.ContentSecurityLevelcambió el nombre deSurfaceProtectionSurfaceEntity.ContentSecurityLevel.{values}agregó un prefijoSURFACE_PROTECTION_.SurfaceEntity.SuperSampling.{$values}agregó un prefijoSUPER_SAMPLING_SurfaceEntity.StereoMode.{values}agregó un prefijoSTEREO_MODE_- Se cambió el nombre de
SurfaceEntity.ContentColorMetadata.maxCLLamaxContentLightLevel(I7eb5f, b/422216050, b/427529950)
- Se cambió el nombre de
launchActivityastartActivity(I7db90, b/430332856). - Se quitó
Scene.activitySpaceRoot. UsaScene.activitySpaceen su lugar. (I05ee8, b/378706624, b/422215745) - Se cambiaron los nombres de
configureBundleForFullSpaceModeLaunchyconfigureBundleForFullSpaceModeLaunchWithEnvironmentInheritedacreateBundleForFullSpaceModeLaunchycreateBundleForFullSpaceModeLaunchWithEnvironmentInherited, 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
GroupEntityahora devuelve el tipoGroupEntityen lugar de Entity. (I66042)
Correcciones de errores
- Se arroja un
IllegalStateExceptioncuando se usa una instancia de entidad después de la eliminación. (I90990, b/427314036, b/432063442)
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
BaseEntityyBaseScenePosedeSceneCore(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) PerceivedResolutionSe 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
recommendedContentBoxInFullSpaceaActivitySpace. 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.PixelDimensionsaandroidx.xr.runtime.math.IntSize2d;androidx.xr.scenecore.Dimensionsaandroidx.xr.runtime.math.FloatSize3d;androidx.xr.scenecore.ActivityPoseaScenePose,androidx.xr.scenecore.ContentlessEntityaGroupEntity,androidx.xr.scenecore.PlaneTypeaPlaneOrientation;androidx.xr.scenecore.PlaneSemanticaPlaneSemanticType. (Ifd405)(I3b622) (If534d) - Se hicieron privados varios métodos set para las propiedades de
Scene, ya que no se pretendía que los clientes deSceneCorelos mutaran:activitySpace,activitySpaceRoot,mainPanelEntity,perceptionSpace,spatialCapabilities,spatialEnvironmentyspatialUser. (I2f506) - En Entity, se cambiaron las siguientes propiedades:
get/setParent(),setContentDescription; se dio de bajaEntity.is/setHidden(), usaEntity.is/setEnableden su lugar. (Ibc4c6) - Se quitó la clase
androidx.xr.scenecore.BasePanelEntity. En su lugar, usaPanelEntitydirectamente. Se reemplazaron los métodos get y set dePanelEntitypor propiedades. Se cambió la propiedadPanelEntity.sizedeFloat3dSizeaFloat2dSize. Se quitó el métodoandroidx.xr.scenecore.PanelEntity.getPixelDimensionsobsoleto. En su lugar, usagetSizeInPixels. (Icc174) - Se reemplazó
androidx.xr.scenecore.OnSpaceUpdatedListenerconRunnable. (I19308) - Se reemplazó
SpatialUser.getCameraViews()por una propiedad. (Ib0cc5) ParaExrImageyGltfModel:, se cambiaron los métodoscreatepara que sean funciones de suspensión; se modificaron los parámetros de creación para que acepten unUrioPathen lugar de unString. (Id8883) (I0d247), (I25706) - Se movieron
SpatialEnvironment.requestFullSpaceModeySpatialEnvironment.requestHomeSpaceModea Scene; por ejemplo, usasession.scene.requestFullSpaceMode()en lugar desession.scene.spatialEnvironment.requestFullSpaceMode().addOnPassthroughOpacityChangedListeneryaddOnSpatialEnvironmentChangedListenerahora tienen anulaciones que aceptan ejecutores opcionales. (I12fe0) (I6b21e) - Se quitaron los siguientes métodos obsoletos de
SpatialEnvironment:togglePassthrough,setPassthrough,setPassthroughOpacity,getPassthroughMode,getPassthroughOpacity,setSkyboxysetGeometry. También se quitó la clase obsoletaSpatialEnvironment.PassthroughMode(I927bd) (I927bd) (I927bd). - Se reemplazaron los siguientes métodos get y set de
SpatialEnvironmentpor propiedades de Kotlin:getCurrentPassthroughOpacity(),get/setPassthroughOpacityPreference(),get/setSpatialEnvironmentPreference(),isSpatialEnvironmentPreferenceActive()(I33a7b) (Ie06e2) (Ie06e2) - El tipo de
SpatialEnvironmentPreference.preferredPassthroughOpacitycambió deFloat?aFloat. Ya no acepta valores nulos. En cambio, se usaSpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCEpara indicar que no hay preferencia de opacidad. (I40107) - Se actualizó el parámetro
windowBoundsPxapixelDimensionsy su tipo de Rect aIntSize2den el método de creación. (I1926e) - El constructor
SpatialEnvironmentahora es interno (I75a51). - Se reemplazaron las clases
SpatialPointerIconNoneySpatialPointerIconCirclepor los objetos complementariosSpatialPointerIcon.NONEySpatialPointerIcon.CIRCLE(I416d2). SpatialPointerIconenSpatialPointerComponentya no puede ser nulo. UsaSpatialPointerIcon.DEFAULTen 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étodoAnchorEntity.create()para mayor claridad. En los métodos deAnchorEntitypara configurar y agregar objetos de escucha, el objeto de escucha se movió al argumento final para habilitar lambdas finales. Se reemplazóandroidx.xr.scenecore.OnStateChangedListenerdeAnchorEntityporConsumer<AnchorEntity.State>. (I472e0) GltfModelEntity.getAnimationState()ahora es una propiedad. (I10b29).- Se reemplazó
ActivitySpace.getBounds()por una propiedad. Se cambió el nombre deActivitySpace.addBoundsChangedListeneraActivitySpace.addOnBoundsChangedListener. Se reemplazóActivitySpace.setOnSpaceUpdatedListenerpor métodos para agregar y quitar. (I4c956). - Se cambió el nombre de
AnchorPlacement: planeTypeFilteraanchorablePlaneOrientations, y el deplaneSemanticFilteraanchorablePlaneSemanticTypes. Agregar unMovableComponenta unAnchorEntityoActivitySpacemostrará un valor falso, se cambió el nombre deMoveListeneraEntityMoveListener shouldDisposeParentAnchor, se cambió el nombre adisposeParentOnReAnchor systemMovable, se quitó de la funcióncreateen favor decreeateCustomMovable,createSystemMovableycreateAnchorable(If11c4) - Se quitó
SurfaceEntity.featherRadiusX/Yy se agregó un concepto de claseEdgeFeatheringParams. (Ic78fc) - Se reemplazó el método
PanelEntity.enablePanelDepthTest()por la propiedadpanelClippingConfig. EstableceScene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)para habilitar la prueba de profundidad oPanelClippingConfig(isDepthTestEnabled = false)para inhabilitarla. (I0cbe0). Scene.mainPanelEntityahora es del tipoMainPanelEntityen lugar dePanelEntity(I7125a).- Se cambió el nombre del método
setFullSpaceModede Scene porconfigureBundleForFullSpaceModeLaunchy el del métodosetFullSpaceModeWithEnvironmentInheritedporconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0) - Se cambiaron los nombres de los valores UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV y WITHIN_FOV de
SpatialVisibilitya 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
SpatialVisibilitypor un objeto público con valores Int constantes.setSpatialVisibilityChangedListenerahora acepta unConsumer<Int>en lugar deConsumer<SpatialVisibility>(Ie7e8c). - Se cambiaron los nombres de las constantes de
PointerCaptureComponenty se movieron al objetoPointerCaptureComponent.PointerCaptureState(I9c7ac). - Se reemplazó
PointerCaptureComponents' StateListenerconConsumer<Int>. (I9c7ac). - Se reemplazó
InputEventListenerporConsumer<InputEvent>(I9c7ac). setPreferredAspectRatiose movió de la clase Scene al objetoSpatialWindowy 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.contentDescriptioncambió de String aCharSequence. (Ie59be). Session.createySession.configureahora arrojanSecurityExceptioncuando no se otorgaron los permisos suficientes, en lugar de devolverSessionCreatePermissionsNotGrantedoSessionConfigurePermissionsNotGranted. (I7c488).ResizableComponent.createahora requiere unConsumer<ResizeEvent> ResizeEventListenerque se reemplazó porConsumer<ResizeEvent> ResizableComponent.size, que se cambió de nombre aResizableComponent.affordanceSize ResizableComponent.minimumSize, que se cambió de nombre aResizableComponent.minimumEntitySize ResizableComponent.maximumSize, que se cambió de nombre aResizableComponent.maximumEntitySize,ResizableComponent.autoHideContentse cambió de nombre aResizableComponent.shouldAutoHideContent,ResizableComponent.forceShowResizeOverlayse cambió de nombre aResizableComponent.shouldAlwaysShowOverlay(I97a2d)- Se redujo
minSDKa 24 paraandroidx.xr.scenecoreyandroidx.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 bibliotecaxr:scenecore:scenecore-guavapara 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
ListenableFuturese reemplazaron por funciones de suspensión de Kotlin. Los desarrolladores de Java que deseen usar métodos asíncronos basados enListenableFutureen lugar de funciones de suspensión de Kotlin ahora deben usar funciones de extensión en:xr:scenecore-scenecore-guava. Por ejemplo,GuavaExrImagecontiene las funciones asíncronas de ExrImage equivalentes a Guava,GuavaScenePosecontiene las funciones asíncronas deScenePoseequivalentes a Guava,GuavaGltfModelcontiene las funciones asíncronas deGuava-equivalent GltfModel, etc. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
Correcciones de errores
- Se actualizó la regla de Jetpack XR Scenecore
ProGuardpara evitarAbstractMethodErroren 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
InteractableComponentpodía causar una falla si elhitPositionen el HitInfo delInputEventpodía fallar si elhitPositionque 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
HitTesten la TestApp deSceneCore. (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_BOTTOMpara 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. StereoSurfaceEntityahora admite la reproducción de MV-HEVC a través de dos nuevos valores deStereoMode: MULTIVIEW_LEFT_PRIMARY y MULTIVIEW_RIGHT_PRIMARY.PanelEntity.setSizeyPanelEntity.getSizeahora devuelven tamaños en el espacio superior.Entity.setPose,Entity.getPose,Entity.setScale,Entity.getScale,Entity.setAlphayEntity.getAlphaahora toman un nuevo parámetrorelativeTo, 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.ktpara supervisar cuándo el contenido de la escena se mueve dentro o fuera del campo visual del usuario. - Se agregó
setPointSourceParamsaSpatialAudioTrack, 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 deSessionExtse movieron a Scene, por lo que se deberán ajustar las importaciones; por ejemplo,SessionExt.getScene(session).addSpatialCapababilitiesChangedListenercontraSessionExt.addSpatialCapabilitiesChangedListener. - Se agregó
ActivityPose.hitTestAsync, lo que habilita unhitTesten 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 dePanelEntity. - Se introdujo la nueva fábrica
PanelEntity, que toma las dimensiones del panel en metros o píxeles. Se quitó la fábricaPanelEntityanterior 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.getPixelDensityya no está disponible.- Se quitaron
PanelEntity.setPixelDimensionsyPanelEntity.getPixelDimension, y se reemplazaron porsetSizeInPixelsygetSizeInPixels. - 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
SceneCorey se reemplazó por Session en XR Runtime. - El nombre de
StereoSurfaceEntitycambió porSurfaceEntity. - Se quitaron
Entity.setSizeyEntity.getSize, y se agregaron los mismos métodos aPanelEntity. - El nombre de
PointSourceAttributescambió porPointSourceParams. - El nombre de
SpatializerConstants.SOURCE\_TYPE\_BYPASScambió porSpatializerConstants.SOURCE\_TYPE\_DEFAULT. - Se modificó la entidad
PointSourceParamsde acceso público a interno. AnchorEntity.createahora requiere que se configurePlaneTrackingModeenSession.configure().- Las APIs de
SpatialUserahora requieren que se configureHeadTrackingModeenSession.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.ktpara colocar cada tipo de entidad concreta en su propio archivo. - Cuando crees un
PanelEntitynuevo, la mayoría de las vistas se volverán a vincular a unFrameLayout. Esto facilita el uso deLayoutInspectorcon paneles espaciales. - La instancia de
XrExtensionsque 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
PanelEntityconMovableComponentyAnchorPlacement. - Se solucionó un problema por el que
ResizableComponentproporcionaba tamaños obsoletos en la devolución de llamada deonResizeStart. - Se corrigió la falla que se producía cuando se llamaba varias veces a
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 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
ProGuardpara evitarAbstractMethodErroren 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
Sessiona 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 movieron a funciones de extensión. Los archivos del desarrollador deberán agregar las nuevas importaciones para el acceso:import androidx.xr.scenecore.setFullSpaceModeimport 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>)ySession.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.getEntitiesOfTypeimport androidx.xr.scenecore.getEntityForRtEntity
- Se borró
Session.unpersistAnchor(Anchor) - Se borró
Session.createPersistedAnchorEntity(UUID)
Errores conocidos
- Es posible que
PanelEntity.setCornerRadius()yActivityPanelEntity.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
BoundsChangedenActivitySpace, es posible que algunosActivityPoseno se hayan actualizado correctamente. Se actualizará en la siguiente llamada deOnSpaceUpdatedelActivitySpace
Cambios rotundos y de comportamiento
PanelEntityyActivityPanelEntitytendrá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 deSphericalyHemisphericalpara 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.StereoSurfaceEntitytiene un miembroCanvasShapeque se puede configurar de forma dinámica.StereoSurfaceEntity.dimensionsahora es una propiedad de solo lectura; las aplicaciones deben establecerCanvasShapepara cambiar las dimensiones.StereoSurfaceEntityahora permite que se vuelva a configurarStereoModedespué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 permisoSCENE_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 deActivitySpace, ya que devuelve valores de traslación en metros ajustados en lugar de devolver siempre metros no ajustados. Ahora,transformPoseTotambién usa las unidades correctas para calcular los cambios de coordenadas cuando elActivitySpaceestá 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, 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 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_UNDERSTANDINGen 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 deapi, por lo que los clientes no necesitarán declararla de forma explícita. - SceneCore incluye erróneamente
com.google.guava:guava-31.1-androidycom.google.protobuf:protobuf-javalitecomo 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.