Jetpack SceneCore
| Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
|---|---|---|---|---|
| 22 octobre 2025 | - | - | - | 1.0.0-alpha08 |
Déclarer des dépendances
Pour ajouter une dépendance à XR SceneCore, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.
Ajoutez les dépendances correspondant aux artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou de votre module :
Groovy
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha08" // Optional dependencies for asynchronous conversions implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha08") // Optional dependencies for asynchronous conversions implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha08") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha08") }
Pour en savoir plus sur les dépendances, consultez Ajouter des dépendances de compilation.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. N'hésitez pas à nous contacter si vous découvrez de nouveaux problèmes ou si vous avez des idées pour améliorer cette bibliothèque. Veuillez consulter les problèmes existants de cette bibliothèque avant d'en signaler un nouveau. Vous pouvez ajouter votre vote à un problème existant en cliquant sur le bouton en forme d'étoile.
Pour en savoir plus, consultez la documentation sur l'outil Issue Tracker.
Version 1.0
Version 1.0.0-alpha08
22 octobre 2025
Publication d'androidx.xr.scenecore:scenecore-*:1.0.0-alpha08. La version 1.0.0-alpha08 contient ces commits.
Modifications apportées à l'API
- Changement de nom :
ActivityPanelEntity.moveActivitydevienttransferActivity. (I273c5, b/430332856)
Correction de bugs
- Ajout de
:xr:scenecore:scenecore-spatial-renderinget:xr:scenecore:scenecore-spatial-coreen tant que dépendance d'implémentation de:xr:scenecore:scenecore(I6ab65, b/447000520) - Une exception est générée si
session.sceneest consulté après la destruction de la session. (I77e6f)
Version 1.0.0-alpha07
24 septembre 2025
Publication d'androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 et androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07. La version 1.0.0-alpha07 contient ces commits.
Modifications apportées à l'API
- Changement de nom :
fixedAspectRatiodevientisFixedAspectRatioEnabled, et devient une propriété booléenne (I5c4e8, b/440588971) - Les faux
Scenecorese trouvent désormais dans le modulexr:scenecore:scenecore-testing. (Idd951) - Changement de nom :
shouldAutoHideContentdevientisAutoHideContentWhileResizingEnabledetshouldAlwaysShowOverlaydevientisAlwaysShowOverlayEnabled(I97c36, b/432335421) - Mise à jour des constantes
SceneCoreTextureSamplerpour une meilleure lisibilité. Par exemple,TextureSampler.MinFilter.LINEARest désormaisTextureSampler.MIN_FILTER_LINEAR(Ib159c). - Le setter
setKeyEntityde la scène a été fusionné dans la variablekeyEntity. Si vous définissezkeyEntitysur une entité non déplaçable telle queAnchorEntity, une erreurIllegalArgumentExceptionsera générée au lieu de renvoyer une valeur booléenne "false". (I62080, b/428721695, b/422215745) - La variable
SpatialModeChangeListenerde la scène a été remplacée parsetSpatialModeChangedListener. Il accepte unConsumer<SpatialModeChangeEvent>au lieu d'unSpatialModeChangedListener.setSpatialModeChangedListenerpeut désormais accepter un Executor (facultatif). (I62080, b/428721695, b/422215745) - Suppression du paramètre
bundledeActivityPanelEntity.startActivity(I64344, b/430332856, b/430333040) - Changement de nom :
SpatializerConstants.SOURCE_TYPE_BYPASSdevientSpatializerConstants.SOURCE_TYPE_DEFAULT. (Ifc7fe, b/422215565) - Ajout de la constante
SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565) - Ajout d'arguments par défaut aux méthodes
SpatialSoundPool.play. (Ifc7fe, b/422215565) - Suppression de la valeur renvoyée des setters dans
SpatialAudioTrackBuilder. (Ifc7fe, b/422215565) - Modifications apportées à SurfaceEntity
SurfaceEntity.CanvasShapea été renomméShape.SurfaceEntity.CanvasShape.Vr180Hemispherea été renomméHemisphere.SurfaceEntity.CanvasShape.Vr360Spherea été renomméSphere.SurfaceEntity.EdgeFeatheringParams.SmoothFeathera été renomméRectangleFeather.SurfaceEntity.EdgeFeathingParams.SolidEdgea été renomméNoFeathering.SurfaceEntity.ContentSecurityLevela été renomméSurfaceProtection.SurfaceEntity.ContentSecurityLevel.{values}a ajouté un préfixeSURFACE_PROTECTION_.SurfaceEntity.SuperSampling.{$values}a ajouté un préfixeSUPER_SAMPLING_SurfaceEntity.StereoMode.{values}a ajouté un préfixeSTEREO_MODE_SurfaceEntity.ContentColorMetadata.maxCLLrenommémaxContentLightLevel(I7eb5f, b/422216050, b/427529950)
- Changement de nom :
launchActivitydevientstartActivity. (I7db90, b/430332856) - Suppression de
Scene.activitySpaceRoot. UtilisezScene.activitySpaceà la place. (I05ee8, b/378706624, b/422215745) configureBundleForFullSpaceModeLaunchetconfigureBundleForFullSpaceModeLaunchWithEnvironmentInheritedrenommés respectivementcreateBundleForFullSpaceModeLaunchetcreateBundleForFullSpaceModeLaunchWithEnvironmentInherited, et déplacés vers le fichier LaunchUtils.kt en tant que méthodes de premier niveau, avec Session comme premier paramètre (I64a2c, b/437186050)- L'usine
GroupEntityrenvoie désormais le typeGroupEntityau lieu d'Entity. (I66042)
Correction de bugs
- Générez une
IllegalStateExceptionlorsqu'une instance d'entité est utilisée après la suppression. (I90990, b/427314036, b/432063442)
Version 1.0.0-alpha06
13 août 2025
Publication d'androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 et androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06. La version 1.0.0-alpha06 contient ces commits.
Modifications apportées à l'API
- Suppression des restrictions sur les API
BaseEntityetBaseScenePosedeSceneCore(88c0ff6)
Version 1.0.0-alpha05
30 juillet 2025
Publication d'androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 et androidx.xr.scenecore:scenecore:1.0.0-alpha05. La version 1.0.0-alpha05 contient ces commits.
Nouvelles fonctionnalités
- Ajout de l'API Perceived Resolution aux entités de panneau et à
SurfaceEntities. (I118f6) - Méthodes de rappel
PerceivedResolutionajoutées à Scene.kt pour surveiller la résolution perçue du panneau principal de l'activité dans HSM. (I58084) SurfaceEntity: ajout de la compatibilité pour que l'application demande le supersampling au moment de la création. Cela permet aux applications d'utiliser un filtre de suréchantillonnage pour l'anticrénelage. (I06913)- La propriété
recommendedContentBoxInFullSpacea été ajoutée àActivitySpace. Elle renvoie une boîte recommandée pour le contenu à placer en mode d'affichage complet. (I4cd6f) - Fourni un constructeur surchargé pour le modificateur déplaçable qui permet l'ancrage. (Ic0c70)
Modifications apportées à l'API
De nombreuses modifications ont été apportées à l'API SceneCore pour cette version. Plusieurs classes ont été renommées et/ou déplacées vers différents modules, et la plupart des méthodes getter/setter ont été remplacées par des propriétés Kotlin. Bien que nous prévoyions d'autres modifications destructives de l'API jusqu'à notre première version bêta, elles ne seront pas aussi perturbantes ni aussi nombreuses.
- Les classes et interfaces suivantes ont été renommées et/ou déplacées :
androidx.xr.scenecore.PixelDimensionsversandroidx.xr.runtime.math.IntSize2d;androidx.xr.scenecore.Dimensionsversandroidx.xr.runtime.math.FloatSize3d;androidx.xr.scenecore.ActivityPoseversScenePose,androidx.xr.scenecore.ContentlessEntityversGroupEntity,androidx.xr.scenecore.PlaneTypeversPlaneOrientation;androidx.xr.scenecore.PlaneSemanticversPlaneSemanticType. (Ifd405)(I3b622) (If534d) - Un certain nombre de setters pour les propriétés de
Sceneont été définis comme privés. Ils n'étaient pas destinés à être modifiés par les clientsSceneCore:activitySpace,activitySpaceRoot,mainPanelEntity,perceptionSpace,spatialCapabilities,spatialEnvironmentetspatialUser. (I2f506) - Dans l'entité : les éléments suivants sont devenus des propriétés :
get/setParent(),setContentDescription.Entity.is/setHidden()est obsolète, utilisezEntity.is/setEnabledà la place. (Ibc4c6) - La classe
androidx.xr.scenecore.BasePanelEntitya été supprimée. Utilisez directementPanelEntityà la place. Remplacement des getters et des setters pourPanelEntitypar des propriétés. La propriétéPanelEntity.sizeest passée deFloat3dSizeàFloat2dSize. Suppression de la méthode obsolèteandroidx.xr.scenecore.PanelEntity.getPixelDimensions. Utilisez plutôtgetSizeInPixels. (Icc174) androidx.xr.scenecore.OnSpaceUpdatedListenera été remplacé parRunnable. (I19308)- Remplacement de
SpatialUser.getCameraViews()par une propriété. (Ib0cc5) PourExrImageetGltfModel:, les méthodescreateont été modifiées pour devenir des fonctions de suspension. Les paramètres de création ont été modifiés pour accepter unUriou unPathau lieu d'unString. (Id8883) (I0d247), (I25706) SpatialEnvironment.requestFullSpaceModeetSpatialEnvironment.requestHomeSpaceModeont été déplacés vers "Scene". Par exemple, utilisezsession.scene.requestFullSpaceMode()au lieu desession.scene.spatialEnvironment.requestFullSpaceMode().addOnPassthroughOpacityChangedListeneretaddOnSpatialEnvironmentChangedListenerdisposent désormais de remplacements qui acceptent les exécuteurs facultatifs. (I12fe0) (I6b21e)- Suppression des méthodes
SpatialEnvironmentobsolètes suivantes :togglePassthrough,setPassthrough,setPassthroughOpacity,getPassthroughMode,getPassthroughOpacity,setSkyboxetsetGeometry. Suppression de la classe obsolèteSpatialEnvironment.PassthroughMode(I927bd) (I927bd) (I927bd) - Remplacement des getters et setters
SpatialEnvironmentsuivants par des propriétés Kotlin :getCurrentPassthroughOpacity(),get/setPassthroughOpacityPreference(),get/setSpatialEnvironmentPreference(),isSpatialEnvironmentPreferenceActive()(I33a7b) (Ie06e2) (Ie06e2) - Le type de
SpatialEnvironmentPreference.preferredPassthroughOpacityest passé deFloat?àFloat. Il n'accepte plus les valeurs nulles. À la place,SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCEest utilisé pour indiquer qu'il n'y a pas de préférence d'opacité. (I40107) - Mise à jour du paramètre
windowBoundsPxsurpixelDimensionset de son type de Rect àIntSize2ddans la méthode create. (I1926e) - Le constructeur
SpatialEnvironmentest désormais interne (I75a51). - Remplacement des classes
SpatialPointerIconNoneetSpatialPointerIconCirclepar les objets compagnonsSpatialPointerIcon.NONEetSpatialPointerIcon.CIRCLE(I416d2) SpatialPointerIcondansSpatialPointerComponentn'est plus nullable. UtilisezSpatialPointerIcon.DEFAULTau lieu de null pour indiquer que l'icône de pointeur système par défaut doit être utilisée. (I416d2)androidx.xr.scenecore.AnchorEntity.getState()a été remplacé par une propriété en lecture seule. Les paramètres de la méthodeAnchorEntity.create()ont été renommés pour plus de clarté. Dans les méthodes deAnchorEntitypour définir et ajouter des écouteurs, l'écouteur a été déplacé vers l'argument final pour activer les lambdas de fin.androidx.xr.scenecore.OnStateChangedListenera été remplacé parConsumer<AnchorEntity.State>pourAnchorEntity. (I472e0)GltfModelEntity.getAnimationState()est désormais une propriété. (I10b29)- Remplacement de
ActivitySpace.getBounds()par une propriété.ActivitySpace.addBoundsChangedListenera été renomméActivitySpace.addOnBoundsChangedListener. Remplacement deActivitySpace.setOnSpaceUpdatedListenerpar des méthodes d'ajout/de suppression. (I4c956) - Pour
AnchorPlacement: planeTypeFilter,anchorablePlaneOrientationsa été renomméplaneSemanticFilteretanchorablePlaneSemanticTypes. L'ajout d'unMovableComponentà unAnchorEntityou unActivitySpacerenverra la valeur "false".MoveListenera été renomméEntityMoveListener shouldDisposeParentAnchor, qui a lui-même été renommédisposeParentOnReAnchor systemMovableet supprimé de la fonctioncreateau profit decreeateCustomMovable,createSystemMovableetcreateAnchorable. (If11c4) - Suppression de
SurfaceEntity.featherRadiusX/Yet ajout d'un concept de classeEdgeFeatheringParams. (Ic78fc) - La méthode
PanelEntity.enablePanelDepthTest()a été remplacée par la propriétépanelClippingConfig. DéfinissezScene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)surPanelClippingConfig(isDepthTestEnabled = false)pour activer le test de profondeur ou surPanelClippingConfig(isDepthTestEnabled = false)pour le désactiver. (I0cbe0) Scene.mainPanelEntityest désormais de typeMainPanelEntityau lieu dePanelEntity(I7125a)- Les méthodes
setFullSpaceModeetsetFullSpaceModeWithEnvironmentInheritedde Scene ont été renomméesconfigureBundleForFullSpaceModeLaunchetconfigureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0) - Les valeurs UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV et WITHIN_FOV de
SpatialVisibilityont été renommées SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW et SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW, respectivement (Ie7e8c). - La classe
SpatialVisibilitya été remplacée par un objet public avec des valeurs int constantes.setSpatialVisibilityChangedListeneraccepte désormaisConsumer<Int>au lieu deConsumer<SpatialVisibility>(Ie7e8c). - Les constantes
PointerCaptureComponentont été renommées et déplacées vers l'objetPointerCaptureComponent.PointerCaptureState(I9c7ac). PointerCaptureComponents' StateListenera été remplacé parConsumer<Int>. (I9c7ac)- Remplacement de
InputEventListenerparConsumer<InputEvent>. (I9c7ac) setPreferredAspectRatioa été déplacé de la classe Scene vers l'objetSpatialWindowet prend Session comme premier paramètre. (I7b717)Entity.setHidden()remplacé parEntity.setEnabled()etEntity.isHidden()remplacé parEntity.isEnabled().setHidden(false)est égal àsetEnabled(true)etisHidden() == !isEnabled(). (Icf0de)- Le type de
Entity.contentDescriptionest passé de String àCharSequence. (Ie59be) Session.createetSession.configuregénèrent désormais uneSecurityExceptionlorsque les autorisations suffisantes n'ont pas été accordées, au lieu de renvoyerSessionCreatePermissionsNotGrantedouSessionConfigurePermissionsNotGranted. (I7c488)ResizableComponent.createnécessite désormais unConsumer<ResizeEvent> ResizeEventListener.Consumer<ResizeEvent> ResizableComponent.sizea été remplacé parResizableComponent.affordanceSize ResizableComponent.minimumSize, qui a été renomméResizableComponent.minimumEntitySize ResizableComponent.maximumSize, qui a été renomméResizableComponent.maximumEntitySize.ResizableComponent.autoHideContenta été renomméResizableComponent.shouldAutoHideContent.ResizableComponent.forceShowResizeOverlaya été renomméResizableComponent.shouldAlwaysShowOverlay. (I97a2d)- Réduction de
minSDKà 24 pourandroidx.xr.scenecoreetandroidx.xr.compose. Les packages XR nécessitent toujours l'API 34 lors de l'exécution. (I17224) - Suppression de la restriction
RequiresApi(34)sur tous les packages Jetpack XR. Cette restriction était redondante, car Jetpack XR n'est actuellement disponible que sur les appareils avec le niveau d'API 34 ou supérieur. (Iae0f8) - L'artefact
SceneCoreprincipal (xr:scenecore:scenecore) ne contiendra que des API asynchrones de style Kotlin. Les développeurs Java peuvent s'appuyer sur la bibliothèquexr:scenecore:scenecore-guavapour accéder aux API compatibles. (If221b) - Les projets publiés avec Kotlin 2.0 nécessitent KGP 2.0.0 ou version ultérieure pour être utilisés (Idb6b5).
- Cette bibliothèque utilise désormais les annotations de nullité JSpecify, qui sont de type "type-use". Les développeurs Kotlin doivent utiliser l'argument de compilateur suivant pour garantir une utilisation correcte :
-Xjspecify-annotations=strict(il s'agit de la valeur par défaut à partir de la version 2.1.0 du compilateur Kotlin) (Ia8420). - Toutes les méthodes asynchrones qui renvoient
ListenableFutureont été remplacées par des fonctions de suspension Kotlin. Les développeurs Java qui souhaitent utiliser des méthodes asynchrones basées surListenableFutureau lieu de fonctions de suspension Kotlin doivent désormais utiliser des fonctions d'extension dans:xr:scenecore-scenecore-guava. Par exemple,GuavaExrImagecontient les fonctions asynchrones ExrImage équivalentes à Guava,GuavaScenePosecontient les fonctions asynchronesScenePoseéquivalentes à Guava,GuavaGltfModelcontient les fonctions asynchronesGuava-equivalent GltfModel, etc. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
Correction de bugs
- Mise à jour de la règle Jetpack XR Scenecore
ProGuardpour empêcherAbstractMethodErrorpour les clients minimisés. (I91a01) - Corrections supplémentaires pour prendre en charge la minification Proguard pour Jetpack XR
SceneCore(I4f47e) - Correction d'un bug qui pouvait entraîner un plantage si le
hitPositionsur le HitInfo duInputEventpouvait planter si lehitPositionrenvoyé par le système était nul (I7a695).InteractableComponent - Les valeurs Config *Mode ont été renommées pour refléter leur comportement. (I6d247)
- Correction des problèmes liés au champ de vision et à
HitTestdans l'application de testSceneCore. (I2c51e) - Correction d'un bug dans
SpatialCapabilities.hasCapability()qui renvoyait "true" si l'une des fonctionnalités transmises avec un OR bit à bit était "true", au lieu de ne renvoyer "true" que si elles étaient toutes "true". (I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOMa été mis à jour pour que la carte du haut soit à gauche et celle du bas à droite. (I4ae68)
Version 1.0.0-alpha04
7 mai 2025
Publication d'androidx.xr.scenecore:scenecore:1.0.0-alpha04 et d'androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04. La version 1.0.0-alpha04 contient ces commits.
Nouvelles fonctionnalités
- La gestion du retour fonctionne désormais sur les entités de panneau sans activités intégrées. Pour que la gestion du retour fonctionne, vous devez spécifier
android:enableOnBackInvokedCallback= "true"dans le fichier manifeste Android. StereoSurfaceEntityest désormais compatible avec la lecture MV-HEVC grâce à deux nouvelles valeursStereoMode: MULTIVIEW_LEFT_PRIMARY et MULTIVIEW_RIGHT_PRIMARY.PanelEntity.setSizeetPanelEntity.getSizerenvoient désormais des tailles dans l'espace parent.Entity.setPose,Entity.getPose,Entity.setScale,Entity.getScale,Entity.setAlphaetEntity.getAlphaacceptent désormais un nouveau paramètrerelativeTo, qui permet d'obtenir/de définir des valeurs relatives à différents espaces. Les valeurs acceptées sont "Parent", "Activity" et "Real World". La valeur par défaut de ce paramètre est "Parent".- Des méthodes d'extension de rappel de visibilité spatiale ont été ajoutées à
SessionExt.ktpour surveiller le moment où le contenu de la scène se déplace à l'intérieur ou à l'extérieur du champ de vision de l'utilisateur. setPointSourceParamsa été ajouté àSpatialAudioTrack, ce qui permet de mettre à jour les paramètres une fois la piste créée.- Ajout d'une nouvelle classe, Scene, avec des références aux API
Scenecore. La scène sera accessible en tant que propriété d'extension de la session. Les fonctions à l'intérieur deSessionExtont été déplacées vers "Scene". Les importations devront donc être ajustées (par exemple,SessionExt.getScene(session)).addSpatialCapababilitiesChangedListenercontreSessionExt.addSpatialCapabilitiesChangedListener. ActivityPose.hitTestAsynca été ajouté, ce qui permet dehitTestle contenu virtuel.- Ajout du nouveau type de composant
SpatialPointerComponent, permettant aux clients de spécifier l'icône affichée pour le pointeur ou de la désactiver. Ce composant ne peut actuellement être associé qu'à des instancesPanelEntity. - Présentation de la nouvelle usine
PanelEntity, qui prend en compte les dimensions du panneau en mètres ou en pixels. L'ancienne usinePanelEntityqui acceptait deux paramètres de type Dimension pour le panneau a été supprimée.
Modifications apportées à l'API
- Suppression de la restriction
RequiresApi(34)sur tous les packages Jetpack XR. Cette restriction était redondante, car Jetpack XR n'est actuellement disponible que sur les appareils avec le niveau d'API 34 ou supérieur. (Iae0f8) - Les projets publiés avec Kotlin 2.0 nécessitent KGP 2.0.0 ou version ultérieure pour être utilisés (Idb6b5).
- La classe
PermissionHelpera été supprimée. - Abandon de
PanelEntity.getPixelDensity. PanelEntity.setPixelDimensionsetPanelEntity.getPixelDimensionsont supprimés et remplacés parsetSizeInPixelsetgetSizeInPixels.Entity.getActivitySpaceAlphasupprimé. Peut être remplacé parEntity.getAlpha(Space.Activity).Entity.getWorldSpaceScalesupprimé. Peut être remplacé parEntity.getScale(Space.REAL\_WORLD).- La classe Session dans
SceneCorea été supprimée au profit de la session dans XR Runtime. - Le compte de service (
StereoSurfaceEntity) a été renomméSurfaceEntity. Entity.setSizeetEntity.getSizeont été supprimés, et les mêmes méthodes ont été ajoutées àPanelEntity.- Le compte de service (
PointSourceAttributes) a été renomméPointSourceParams. - Le compte de service (
SpatializerConstants.SOURCE\_TYPE\_BYPASS) a été renomméSpatializerConstants.SOURCE\_TYPE\_DEFAULT. - L'accès à l'entité
PointSourceParamsest désormais interne au lieu d'être public. AnchorEntity.createnécessite désormais la configuration dePlaneTrackingModedansSession.configure().- Les API
SpatialUsernécessitent désormais la configuration deHeadTrackingModedansSession.configure(). - Lorsque
ResizableComponentn'est pas associé, un journal de niveau INFO est généré au lieu d'un journal de niveau ERREUR. - La classe Fov est désormais une classe Kotlin standard.
- Divisez
Entity.ktpour placer chaque type d'entité concrète dans son propre fichier. - Lorsque vous créez une
PanelEntity, la plupart des vues sont reparentées à unFrameLayout. Cela facilite l'utilisation deLayoutInspectoravec les panneaux spatiaux. - L'instance
XrExtensionsactuellement utilisée est désormais enregistrée auprès de la plate-forme, de la meilleure façon possible, pour faciliter le débogage de l'application.
Correction de bugs
- Une correction a été ajoutée pour éviter un plantage qui pouvait se produire lorsqu'un
PanelEntityavecMovableComponentetAnchorPlacementétait déplacé. - Correction d'un problème qui empêchait
ResizableComponentde fournir des tailles obsolètes dans le rappelonResizeStart. - Correction du plantage lorsque
dispose()deJxrPlatformAdapterAxrétait appelé plusieurs fois.
Version 1.0.0-alpha03
26 février 2025
Publication d'androidx.xr.scenecore:scenecore:1.0.0-alpha03 et d'androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03. La version 1.0.0-alpha03 contient ces commits.
Nouvelles fonctionnalités
- La minification Proguard est désormais compatible avec le code Jetpack XR
Correction de bugs
- Corrections supplémentaires pour prendre en charge la minification Proguard pour Jetpack XR SceneCore (I4f47e)
- Mise à jour de la règle Jetpack XR Scenecore
ProGuardpour empêcherAbstractMethodErrorpour les clients minimisés. (I91a01)
Version 1.0.0-alpha02
12 février 2025
Publication d'androidx.xr.scenecore:scenecore:1.0.0-alpha02 et d'androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02. La version 1.0.0-alpha02 contient ces commits.
Modification destructive à venir affectant les applications créées avant la version 1.0.0-alpha02
- Les méthodes de fabrique ont été déplacées de la classe
Sessionvers une méthode associée sur chaque type respectif :Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)a été supprimé et remplacé parActivityPanelEntity.create(Session, Dimensions, String, Pose)Session.createAnchorEntity(Anchor)a été supprimé et remplacé parAnchorEntity.create(Session, Anchor)Session.createAnchorEntity(Dimensions, Int, Int, Duration)a été supprimé et remplacé parAnchorEntity.create(Session, Dimensions, Int, Int, Duration)Session.createEntity(String, Pose)a été supprimé et remplacé parContentlessEntity.create(Session, String, Pose)Session.createExrImageResource(String)a été supprimé et remplacé parExrImage.create(Session, String)Session.createGltfEntity(GltfModel, Pose)a été supprimé et remplacé parGltfModelEntity.create(Session, GltfModel, Pose)Session.createGltfModelResource(String)a été supprimé et remplacé parGltfModel.create(Session, String)Session.createInteractableComponent(Executor, InputEventListener)a été supprimé et remplacé parInteractableComponent.create(Session, Executor, InputEventListener)Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)a été supprimé et remplacé parMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose)a été supprimé et remplacé parPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)Session.createResizableComponent(Dimensions, Dimensions)a été supprimé et remplacé parResizableComponent.create(Session, Dimensions, Dimensions)Session.createStereoSurfaceEntity(Int, Dimensions, Pose)a été supprimé et remplacé parStereoSurface.create(Session, Int, Dimensions, Pose)
- Les méthodes obsolètes suivantes ont été supprimées :
Session.canEmbedActivityPanel(Activity)a été supprimé. UtilisezgetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY)à la place.Session.hasSpatialCapability(Int)a été supprimé. Il a été remplacé pargetSpatialCapabilities().hasCapability(), qui permet de vérifier la présence de fonctionnalités spatiales de manière plus compartimentée, cargetSpatialCapabilities()renvoie un objetSpatialCapabilities.Session.requestFullSpaceMode()a été supprimé et remplacé parSpatialEnvironment.requestFullSpaceMode()Session.requestHomeSpaceMode()a été supprimé et remplacé parSpatialEnvironment.requestHomeSpaceMode()
Session.setFullSpaceMode(Bundle)etSession.setFullSpaceModeWithEnvironmentInherited(Bundle)ont été déplacés vers les fonctions d'extension. Les fichiers du développeur devront ajouter les nouvelles importations pour l'accès :import androidx.xr.scenecore.setFullSpaceModeimport androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)a été déplacé vers une fonction d'extension. Les fichiers du développeur devront ajouter la nouvelle importation pour l'accès :import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)etSession.getEntityForRtEntity(RtEntity)ont été déplacés vers les fonctions d'extension. Les fichiers du développeur devront ajouter les nouvelles importations pour l'accès :import androidx.xr.scenecore.getEntitiesOfTypeimport androidx.xr.scenecore.getEntityForRtEntity
Session.unpersistAnchor(Anchor)a été suppriméeSession.createPersistedAnchorEntity(UUID)a été supprimée
Problèmes connus
PanelEntity.setCornerRadius()etActivityPanelEntity.setCornerRadius()peuvent ne pas prendre effet tant que le panneau n'a pas été déplacé. Pour éviter cela, déplacez le panneau vers sa position actuelle.- Lorsque
BoundsChangedest appelé surActivitySpace, il est possible que certainsActivityPosen'aient pas été correctement mis à jour. Il sera mis à jour lors du prochain appelOnSpaceUpdatedleActivitySpace.
Modifications destructives et de comportement
PanelEntityetActivityPanelEntityauront un rayon d'angle par défaut de 32 dp ou moins si le panneau a une largeur ou une hauteur inférieure à 32 dp.
Nouvelles API et fonctionnalités
- Présentation de
StereoSurface.CanvasShape, qui permet de créer des canevasSphericaletHemisphericalpour le rendu de contenus multimédias immersifs. StereoSurfaceEntity.create()accepte désormais un paramètreCanvasShape. (Ce paramètre est actuellement ignoré, mais sera utilisé dans une prochaine version.)StereoSurfaceEntity.create()n'accepte plus le paramètreDimensions. Les applications doivent contrôler la taille du canevas en définissantCanvasShape.StereoSurfaceEntitycomporte un membreCanvasShapequi peut être défini de manière dynamique.StereoSurfaceEntity.dimensionsest désormais une propriété en lecture seule. Les applications doivent définirCanvasShapepour modifier les dimensions.StereoSurfaceEntitypermet désormais de réinitialiserStereoModeaprès la construction.
Autres modifications
- La valeur minSDK de compilation est désormais de 24. Toutes les API Jetpack XR continueront de nécessiter l'API 34 au moment de l'exécution.
- La fabrique de sessions de
SceneCore(Session.create) ne lance plus d'intent pour acquérir l'autorisationSCENE_UNDERSTANDING. Au lieu de cela, l'application cliente doit demander explicitement les autorisations à l'utilisateur avant de tenter de créer les ancres. La création d'ancres échouera si l'utilisateur n'accorde pas l'autorisation.
Corrections de bugs
getActivitySpacePose()a été corrigé pour tenir compte de l'échelleActivitySpaceen renvoyant des valeurs de traduction en mètres mis à l'échelle plutôt qu'en mètres non mis à l'échelle.transformPoseToutilise désormais également les bonnes unités pour calculer les changements de coordonnées lorsqueActivitySpaceest impliqué dans la source ou la destination.- La skybox sera désormais définie sur une skybox entièrement noire chaque fois qu'une préférence de skybox nulle est transmise à l'aide de
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)). Pour rétablir la skybox et la géométrie par défaut du système, utilisezsetSpatialEnvironmentPreference(null)..
Version 1.0.0-alpha01
12 décembre 2024
Publication d'androidx.xr.scenecore:scenecore-* 1.0.0-alpha01.
Fonctionnalités de la version initiale Version initiale pour les développeurs de Jetpack SceneCore, une bibliothèque de graphiques de scène 3D permettant de créer et de manipuler des scènes et des environnements immersifs. Cette bibliothèque vous permet de placer et d'organiser des modèles 3D et des panneaux de contenu les uns par rapport aux autres, ainsi que par rapport à vos environnements virtuels ou réels.
- SpatialEnvironment : créez des expériences entièrement immersives avec une image skybox et/ou une géométrie de modèle 3D comme toile de fond pour la scène XR de votre environnement. Vous pouvez également activer le mode Passthrough pour que votre scène virtuelle puisse s'intégrer à l'environnement réel de l'utilisateur.
- PanelEntity : ajoutez du contenu 2D à vos scènes 3D en intégrant des mises en page et des activités Android standards dans des panneaux spatialisés qui peuvent flotter ou être ancrés à des surfaces réelles.
- GltfModelEntity : placez des modèles 3D dans votre scène, animez-les et interagissez avec eux. SceneCore est compatible avec le format de fichier glTF pour faciliter l'intégration aux modèles existants.
- Son spatial : ajoutez des sources audio ambiantes et ponctuelles à votre scène 3D pour un son spatialisé totalement immersif.
- StereoSurfaceEntity : SceneCore est compatible avec le routage du contenu rendu sur une surface Android pour l'œil gauche et l'œil droit. Il peut être utilisé pour afficher du contenu stéréoscopique au format côte à côte ou haut/bas, comme des photos stéréoscopiques, des vidéos 3D ou d'autres interfaces utilisateur rendues de manière dynamique. Les applications doivent utiliser MediaPlayer ou ExoPlayer pour le décodage vidéo.
- Système de composants : SceneCore propose un système de composants robuste et flexible pour ajouter des fonctionnalités à votre contenu XR, y compris des affordances permettant aux utilisateurs de déplacer, redimensionner et interagir avec des modèles et des panneaux.
- Ancrage : lorsque le passthrough est activé, vous pouvez associer des panneaux et des modèles à des surfaces réelles, ce qui permet aux utilisateurs d'intégrer facilement du contenu virtuel dans leur environnement réel.
- Pose de l'utilisateur : accédez à la position de l'utilisateur dans la scène virtuelle pour orienter votre contenu en fonction de sa position.
- SpatialCapabilities : créez des applications entièrement adaptatives qui exploitent les capacités spatialisées lorsqu'elles sont disponibles, comme le positionnement 3D du contenu de l'UI. De plus, votre application peut surveiller les modifications apportées aux fonctionnalités pendant son exécution, afin de modifier l'expérience en fonction de la façon dont l'utilisateur utilise son appareil Android XR.
Problèmes connus
- Actuellement, un minSDK de 30 est requis pour utiliser Jetpack SceneCore. Pour contourner ce problème, ajoutez l'entrée de fichier manifeste suivante
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>afin de pouvoir compiler et exécuter avec un minSDK de 23. - Une session peut devenir non valide dans diverses situations qui recréent automatiquement l'activité, y compris le redimensionnement d'un panneau principal, la connexion de périphériques et le passage du mode clair au mode sombre. Si vous rencontrez des problèmes d'invalidation de session, vous pouvez, par exemple, rendre votre panneau principal non redimensionnable, utiliser une entité de panneau dynamique, désactiver la recréation d'activité pour des modifications de configuration spécifiques ou désactiver les changements de thème en mode clair/sombre.
- Les composants déplaçables et redimensionnables ne sont pas compatibles avec GltfEntity.
- Entity.getSize() n'est pas compatible avec GltfEntity.
- Les applications Jetpack XR doivent demander l'autorisation
android.permission.SCENE_UNDERSTANDINGdans AndroidManifest. - La création d'une session n'est possible que sur un appareil Android XR. Pour le moment, si vous créez une session et que vous essayez de l'utiliser sur un appareil autre qu'Android XR, vous obtiendrez une RuntimeException.
- Définir la skybox sur "null" via `SpatialEnvironment.setSpatialEnvironmentPreference()` ne produit pas une skybox noire unie comme indiqué dans la documentation. Il peut en résulter la skybox par défaut du système ou aucune modification de la skybox actuelle.
- Les clients SceneCore doivent ajouter
implementation(“com.google.guava:listenablefuture-1.0”)à la configuration Gradle pour les dépendances de leur application. Dans une prochaine version, scenecore inclura cette bibliothèque en tant que dépendanceapi. Les clients n'auront donc pas besoin de la déclarer explicitement. - SceneCore inclut à tort
com.google.guava:guava-31.1-androidetcom.google.protobuf:protobuf-javaliteen tant que dépendances transitives. Si cela entraîne des erreurs de classe en double dans votre build, ces deux dépendances peuvent être exclues sans risque. - Si votre application utilise SceneCore et active ProGuard, elle plantera lorsque vous créerez une session. Pour contourner ce problème, désactivez ProGuard. Pour savoir comment activer ProGuard, consultez ce guide.