Jetpack SceneCore

Crea e manipola il grafico della scena Android XR con contenuti 3D.
Ultimo aggiornamento Release stabile Candidato per la release Release beta Release alpha
19 novembre 2025 - - - 1.0.0-alpha09

Dichiara le dipendenze

Per aggiungere una dipendenza da XR SceneCore, devi aggiungere il repository Maven di Google al tuo progetto. Per saperne di più, consulta il repository Maven di Google.

Aggiungi le dipendenze per gli artefatti necessari nel file build.gradle per la tua app o il tuo modulo:

Groovy

dependencies {
    implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha09"

    // Optional dependencies for asynchronous conversions
    implementation "androidx.xr.scenecore:scenecore-guava:1.0.0-alpha09"

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

Kotlin

dependencies {
    implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha09")

    // Optional dependencies for asynchronous conversions
    implementation("androidx.xr.scenecore:scenecore-guava:1.0.0-alpha09")

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

Per saperne di più sulle dipendenze, consulta Aggiungi dipendenze di build.

Feedback

Il tuo feedback ci aiuta a migliorare Jetpack. Facci sapere se riscontri nuovi problemi o hai idee per migliorare questa libreria. Prima di segnalare un nuovo problema, dai un'occhiata ai problemi esistenti in questa raccolta. Puoi aggiungere il tuo voto a un problema esistente facendo clic sul pulsante a forma di stella.

Crea un nuovo problema

Per ulteriori informazioni, consulta la documentazione di Issue Tracker.

Versione 1.0

Versione 1.0.0-alpha09

19 novembre 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha09 è stato rilasciato. La versione 1.0.0-alpha09 contiene questi commit.

Nuove funzionalità

  • Aggiunge un'API per recuperare un ScenePose che rappresenta la composizione della posa di origine dello spazio di percezione e una posa rispetto all'origine dello spazio di percezione. (I5b50a)
  • Aggiunta la funzione getGravityAlignedPose. La posa allineata alla gravità ignora il beccheggio e il rollio della rotazione. (I5ae21)
  • I tipi di costanti AnchorEntity.State sono stati modificati da numeri interi a sottotipi di stato. (Ib0c49)
  • Aggiunta di getChildren() all'interfaccia Entità. Ciclo di vita MainPanelEntity aggiornato. (Ia69d6)

Modifiche alle API

  • I tipi di costanti PointerCaptureComponent.PointerCaptureState sono stati modificati da numeri interi a sottotipi PointerCaptureState. (Ic888a)
  • Scene.spatialCapabilities ora è di tipo Set<SpatialCapability> anziché un campo Int. Le costanti SpatialCapability sono state rinominate. (I9c109)
  • I tipi di costanti SurfaceEntity sono stati rinominati e modificati da numeri interi a sottotipi SurfaceEntity. (I419ed)
  • I tipi di costanti SpatializerConstant sono stati rinominati e modificati da numeri interi a sottotipi SpatializerConstant. (Ia0e18)
  • I tipi di costanti TextureSampler sono stati rinominati e modificati da numeri interi a sottotipi TextureSampler. (I44078)
  • I tipi di costanti SpatialVisibility sono stati modificati da numeri interi a sottotipi SpatialVisibility. (I70739)
  • I tipi di costanti ResizeEvent.ResizeState sono stati rinominati e modificati da numeri interi a sottotipi ResizeState. (I384d5)
  • I tipi di costanti InputEvent sono stati rinominati e modificati da numeri interi per ereditare dal rispettivo tipo di inclusione. (I82817)
  • I tipi di costanti GltfModelEntity.AnimationState sono stati modificati da numeri interi a sottotipi AnimationState. (I24f4e)
  • I tipi di costanti AlphaMode sono stati rinominati e modificati da numeri interi a sottotipi AlphaMode. (I27b56)
  • I tipi di costanti Space sono stati modificati da numeri interi a sottotipi di spazio. (I9255b)
  • ScenePose.hitTest e i metodi correlati ora restituiscono null se non è stata trovata alcuna intersezione, anziché un HitTestResult con un hitPosition null. HitTestResult.hitPosition non è più annullabile. (I1400a)
  • Modificate le referenze di ActivityPose in ScenePose. (I7fe43)

Versione 1.0.0-alpha08

22 ottobre 2025

androidx.xr.scenecore:scenecore-*:1.0.0-alpha08 è stato rilasciato. La versione 1.0.0-alpha08 contiene questi commit.

Modifiche alle API

  • ActivityPanelEntity.moveActivity rinominato in transferActivity (I273c5, b/430332856)

Correzioni di bug

  • :xr:scenecore:scenecore-spatial-rendering e :xr:scenecore:scenecore-spatial-core aggiunti come dipendenza di implementazione di :xr:scenecore:scenecore (I6ab65, b/447000520)
  • Viene generata un'eccezione se si accede a session.scene dopo la distruzione della sessione. (I77e6f)

Versione 1.0.0-alpha07

24 settembre 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07 sono stati rilasciati. La versione 1.0.0-alpha07 contiene questi commit.

Modifiche alle API

  • È stata rinominata la proprietà fixedAspectRatio in isFixedAspectRatioEnabled ed è stata resa booleana (I5c4e8, b/440588971)
  • Scenecore Fakes si trova ora nel modulo xr:scenecore:scenecore-testing. (Idd951)
  • shouldAutoHideContent è stato rinominato in isAutoHideContentWhileResizingEnabled e shouldAlwaysShowOverlay in isAlwaysShowOverlayEnabled (I97c36, b/432335421)
  • Costanti SceneCore TextureSampler aggiornate per una maggiore leggibilità, ad esempio TextureSampler.MinFilter.LINEAR ora è TextureSampler.MIN_FILTER_LINEAR (Ib159c)
  • L'impostazione setKeyEntity della scena è stata unita alla variabile keyEntity. L'impostazione di keyEntity su un'entità non spostabile come AnchorEntity genererà un IllegalArgumentException anziché restituire un valore booleano false. (I62080, b/428721695, b/422215745)
  • La variabile SpatialModeChangeListener della scena è stata sostituita con setSpatialModeChangedListener. Accetta un Consumer<SpatialModeChangeEvent> anziché un SpatialModeChangedListener. setSpatialModeChangedListener ora può facoltativamente accettare un Executor. (I62080, b/428721695, b/422215745)
  • Rimosso il parametro bundle da ActivityPanelEntity.startActivity (I64344, b/430332856, b/430333040)
  • SpatializerConstants.SOURCE_TYPE_BYPASS rinominato in SpatializerConstants.SOURCE_TYPE_DEFAULT. (Ifc7fe, b/422215565)
  • Aggiunta della costante SpatialSoundPool.PLAY_FAILED. (Ifc7fe, b/422215565)
  • Sono stati aggiunti argomenti predefiniti ai metodi SpatialSoundPool.play. (Ifc7fe, b/422215565)
  • Rimosso il valore restituito dei setter in SpatialAudioTrackBuilder. (Ifc7fe, b/422215565)
  • Modifiche a SurfaceEntity
    • SurfaceEntity.CanvasShape rinominato in Shape
    • SurfaceEntity.CanvasShape.Vr180Hemisphere rinominato in Hemisphere
    • SurfaceEntity.CanvasShape.Vr360Sphere rinominato in Sphere
    • SurfaceEntity.EdgeFeatheringParams.SmoothFeather rinominato in RectangleFeather
    • SurfaceEntity.EdgeFeathingParams.SolidEdge rinominato in NoFeathering
    • SurfaceEntity.ContentSecurityLevel rinominato in SurfaceProtection
    • SurfaceEntity.ContentSecurityLevel.{values} ha aggiunto un prefisso SURFACE_PROTECTION_.
    • SurfaceEntity.SuperSampling.{$values} ha aggiunto un prefisso SUPER_SAMPLING_
    • SurfaceEntity.StereoMode.{values} ha aggiunto un prefisso STEREO_MODE_
    • SurfaceEntity.ContentColorMetadata.maxCLL rinominato in maxContentLightLevel (I7eb5f, b/422216050, b/427529950)
  • launchActivity rinominato in startActivity (I7db90, b/430332856)
  • Scene.activitySpaceRoot rimosso. Utilizza invece Scene.activitySpace. (I05ee8, b/378706624, b/422215745)
  • configureBundleForFullSpaceModeLaunch e configureBundleForFullSpaceModeLaunchWithEnvironmentInherited sono stati rinominati rispettivamente createBundleForFullSpaceModeLaunch e createBundleForFullSpaceModeLaunchWithEnvironmentInherited e spostati nel file LaunchUtils.kt come metodi di primo livello e prendono Session come primo parametro (I64a2c, b/437186050)
  • La fabbrica GroupEntity ora restituisce il tipo GroupEntity anziché Entità. (I66042)

Correzioni di bug

Versione 1.0.0-alpha06

13 agosto 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06 sono stati rilasciati. La versione 1.0.0-alpha06 contiene questi commit.

Modifiche alle API

  • Rimuovi le restrizioni dalle API SceneCore, BaseEntity e BaseScenePose (88c0ff6)

Versione 1.0.0-alpha05

30 luglio 2025

androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 e androidx.xr.scenecore:scenecore:1.0.0-alpha05 sono stati rilasciati. La versione 1.0.0-alpha05 contiene questi commit.

Nuove funzionalità

  • API Perceived Resolution aggiunta a Entità pannello e SurfaceEntities. (I118f6)
  • PerceivedResolution Metodi di callback aggiunti a Scene.kt per monitorare la risoluzione percepita del pannello principale dell'attività in HSM. (I58084)
  • SurfaceEntity - Aggiunto il supporto per l'applicazione per richiedere il super campionamento al momento della creazione. Ciò consente alle applicazioni di utilizzare il filtro di sovracampionamento per l'anti-aliasing. (I06913)
  • Aggiunta della proprietà recommendedContentBoxInFullSpace a ActivitySpace. Restituisce una casella consigliata in cui inserire i contenuti in modalità Full Space. (I4cd6f)
  • È stato fornito un costruttore di overload per il modificatore mobile che consente l'ancoraggio. (Ic0c70)

Modifiche alle API

Per questa release sono state apportate modifiche significative all'API SceneCore. Diverse classi sono state rinominate e/o spostate in moduli diversi e la maggior parte dei metodi getter/setter sono stati sostituiti con proprietà Kotlin. Sebbene prevediamo future modifiche alle API che causano interruzioni fino alla prima release beta, queste non saranno così dirompenti o numerose.

  • Sono state rinominate e/o spostate le seguenti classi e interfacce: androidx.xr.scenecore.PixelDimensions in androidx.xr.runtime.math.IntSize2d; androidx.xr.scenecore.Dimensions in androidx.xr.runtime.math.FloatSize3d; androidx.xr.scenecore.ActivityPose in ScenePose, androidx.xr.scenecore.ContentlessEntity in GroupEntity, androidx.xr.scenecore.PlaneType in PlaneOrientation; androidx.xr.scenecore.PlaneSemantic in PlaneSemanticType. (Ifd405)(I3b622) (If534d)
  • Un certo numero di setter per le proprietà di Scene sono stati resi privati; non era previsto che venissero modificati dai client SceneCore: activitySpace, activitySpaceRoot, mainPanelEntity, perceptionSpace, spatialCapabilities, spatialEnvironment e spatialUser. (I2f506)
  • In Entità: sono state modificate le seguenti proprietà: get/setParent(), setContentDescription; è stata ritirata la proprietà Entity.is/setHidden(), utilizza Entity.is/setEnabled. (Ibc4c6)
  • È stata rimossa la classe androidx.xr.scenecore.BasePanelEntity; utilizza invece direttamente PanelEntity. Getter e setter per PanelEntity sostituiti con proprietà. La proprietà PanelEntity.size è stata modificata da Float3dSize a Float2dSize. È stato rimosso il metodo deprecato androidx.xr.scenecore.PanelEntity.getPixelDimensions. Utilizza getSizeInPixels. (Icc174)
  • androidx.xr.scenecore.OnSpaceUpdatedListener sostituito con Runnable. (I19308)
  • SpatialUser.getCameraViews() è stato sostituito con una proprietà. (Ib0cc5) Per ExrImage e GltfModel: I metodi create sono stati modificati in funzioni di sospensione; i parametri di creazione sono stati modificati per accettare un Uri o Path anziché un String. (Id8883) (I0d247), (I25706)
  • SpatialEnvironment.requestFullSpaceMode e SpatialEnvironment.requestHomeSpaceMode sono stati spostati in Scena. Ad esempio, utilizza session.scene.requestFullSpaceMode() anziché session.scene.spatialEnvironment.requestFullSpaceMode(). addOnPassthroughOpacityChangedListener e addOnSpatialEnvironmentChangedListener ora hanno override che accettano esecutori facoltativi. (I12fe0) (I6b21e)
  • Sono stati rimossi i seguenti metodi SpatialEnvironment ritirati: togglePassthrough, setPassthrough, setPassthroughOpacity, getPassthroughMode, getPassthroughOpacity, setSkybox e setGeometry. È stata rimossa anche la classe deprecata SpatialEnvironment.PassthroughMode (I927bd) (I927bd) (I927bd)
  • Sono stati sostituiti i seguenti getter e setter SpatialEnvironment con proprietà Kotlin: getCurrentPassthroughOpacity(), get/setPassthroughOpacityPreference(), get/setSpatialEnvironmentPreference(), isSpatialEnvironmentPreferenceActive() (I33a7b) (Ie06e2) (Ie06e2)
  • Il tipo di SpatialEnvironmentPreference.preferredPassthroughOpacity è cambiato da Float? a Float. Non accetta più valori nulli. Al suo posto, SpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCE viene utilizzato per indicare che non è presente alcuna preferenza di opacità. (I40107)
  • È stato aggiornato il parametro windowBoundsPx a pixelDimensions e il relativo tipo da Rect a IntSize2d nel metodo create. (I1926e)
  • Il costruttore SpatialEnvironment ora è interno (I75a51)
  • Sostituite le classi SpatialPointerIconNone e SpatialPointerIconCircle con gli oggetti complementari SpatialPointerIcon.NONE e SpatialPointerIcon.CIRCLE (I416d2)
  • SpatialPointerIcon in SpatialPointerComponent non è più annullabile. Utilizza SpatialPointerIcon.DEFAULT anziché null per indicare che deve essere utilizzata l'icona del puntatore predefinita del sistema. (I416d2)
  • androidx.xr.scenecore.AnchorEntity.getState() è stato sostituito con una proprietà di sola lettura. I parametri del metodo AnchorEntity.create() sono stati rinominati per maggiore chiarezza. Nei metodi di AnchorEntity per impostare e aggiungere listener, il listener è stato spostato nell'argomento finale per abilitare le espressioni lambda finali. androidx.xr.scenecore.OnStateChangedListener per AnchorEntity sostituito con Consumer<AnchorEntity.State>. (I472e0)
  • GltfModelEntity.getAnimationState() ora è una proprietà. (I10b29)
  • ActivitySpace.getBounds() è stato sostituito con una proprietà. ActivitySpace.addBoundsChangedListener rinominato in ActivitySpace.addOnBoundsChangedListener. Sostituito ActivitySpace.setOnSpaceUpdatedListener con i metodi di aggiunta/rimozione. (I4c956)
  • AnchorPlacement: planeTypeFilter è stato rinominato in anchorablePlaneOrientations, planeSemanticFilter è stato rinominato in anchorablePlaneSemanticTypes. L'aggiunta di un MovableComponent a un AnchorEntity o a un ActivitySpace restituirà false, MoveListener è stato rinominato in EntityMoveListener shouldDisposeParentAnchor, disposeParentOnReAnchor systemMovable è stato rimosso dalla funzione create a favore di creeateCustomMovable, createSystemMovable e createAnchorable (If11c4)
  • Rimosso SurfaceEntity.featherRadiusX/Y e aggiunto un concetto di classe EdgeFeatheringParams. (Ic78fc)
  • Il metodo PanelEntity.enablePanelDepthTest() è stato sostituito dalla proprietà panelClippingConfig. Imposta Scene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true) per attivare il test di profondità o impostalo su PanelClippingConfig(isDepthTestEnabled = false) per disattivarlo. (I0cbe0)
  • Scene.mainPanelEntity ora è di tipo MainPanelEntity invece di PanelEntity (I7125a)
  • Il metodo setFullSpaceMode di Scene è stato rinominato in configureBundleForFullSpaceModeLaunch e il metodo setFullSpaceModeWithEnvironmentInherited in configureBundleForFullSpaceModeLaunchWithEnvironmentInherited. (I0cbe0) (I0cbe0)
  • Rinominate le proprietà UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV e WITHIN_FOV di SpatialVisibility in SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW e SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW, rispettivamente (Ie7e8c)
  • La classe SpatialVisibility è stata sostituita con un oggetto pubblico con valori Int costanti. setSpatialVisibilityChangedListener ora accetta un Consumer<Int> invece di Consumer<SpatialVisibility> (Ie7e8c)
  • Costanti PointerCaptureComponent rinominate e spostate nell'oggetto PointerCaptureComponent.PointerCaptureState (I9c7ac)
  • PointerCaptureComponents' StateListener sostituito con Consumer<Int>. (I9c7ac)
  • InputEventListener sostituito con Consumer<InputEvent> (I9c7ac)
  • setPreferredAspectRatio è stato spostato dalla classe Scene all'oggetto SpatialWindow e accetta Session come primo parametro. (I7b717)
  • Entity.setHidden() sostituito da Entity.setEnabled() e Entity.isHidden() sostituito da Entity.isEnabled(). setHidden(false) è uguale a setEnabled(true) e isHidden() == !isEnabled(). (Icf0de)
  • Il tipo Entity.contentDescription è stato modificato da String a CharSequence. (Ie59be)
  • Session.create e Session.configure ora generano SecurityException quando non sono state concesse autorizzazioni sufficienti anziché restituire SessionCreatePermissionsNotGranted o SessionConfigurePermissionsNotGranted. (I7c488)
  • ResizableComponent.create ora richiede un Consumer<ResizeEvent> ResizeEventListener è stato sostituito con Consumer<ResizeEvent> ResizableComponent.size è stato rinominato in ResizableComponent.affordanceSize ResizableComponent.minimumSize è stato rinominato in ResizableComponent.minimumEntitySize ResizableComponent.maximumSize è stato rinominato in ResizableComponent.maximumEntitySize, ResizableComponent.autoHideContent è stato rinominato in ResizableComponent.shouldAutoHideContent ResizableComponent.forceShowResizeOverlay è stato rinominato in ResizableComponent.shouldAlwaysShowOverlay (I97a2d)
  • Riduzione di minSDK a 24 per androidx.xr.scenecore e androidx.xr.compose. I pacchetti XR richiedono comunque l'API 34 in fase di runtime. (I17224)
  • Rimossa la limitazione RequiresApi(34) su tutti i pacchetti Jetpack XR. Questa limitazione era ridondante in quanto Jetpack XR è attualmente disponibile solo su dispositivi con livello API 34 o superiore. (Iae0f8)
  • L'artefatto SceneCore principale (xr:scenecore:scenecore) conterrà solo API asincrone in stile Kotlin. Gli sviluppatori Java possono fare affidamento sulla libreria xr:scenecore:scenecore-guava per accedere alle API compatibili. (If221b)
  • I progetti rilasciati con Kotlin 2.0 richiedono l'utilizzo di KGP 2.0.0 o versioni successive (Idb6b5)
  • Questa libreria ora utilizza le annotazioni di nullabilità JSpecify, che sono di tipo use. Gli sviluppatori Kotlin devono utilizzare il seguente argomento del compilatore per garantire un utilizzo corretto: -Xjspecify-annotations=strict (questo è il valore predefinito a partire dalla versione 2.1.0 del compilatore Kotlin) (Ia8420)
  • Tutti i metodi asincroni che restituiscono ListenableFuture sono stati sostituiti con funzioni di sospensione Kotlin. Gli sviluppatori Java che vogliono utilizzare metodi asincroni basati su ListenableFuture anziché funzioni di sospensione Kotlin ora devono utilizzare le funzioni di estensione in :xr:scenecore-scenecore-guava. Ad esempio, GuavaExrImage contiene le funzioni asincrone ExrImage equivalenti a Guava, GuavaScenePose contiene le funzioni asincrone ScenePose equivalenti a Guava, GuavaGltfModel contiene le funzioni asincrone Guava-equivalent GltfModel e così via. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)

Correzioni di bug

  • Regola Jetpack XR Scenecore ProGuard aggiornata per impedire AbstractMethodError per i client ridotti. (I91a01)
  • Correzioni aggiuntive per supportare la minimizzazione Proguard per Jetpack XR SceneCore (I4f47e)
  • È stato corretto un bug per cui un InteractableComponent può causare un arresto anomalo se hitPosition in HitInfo di InputEvent può causare un arresto anomalo se hitPosition restituito dal sistema era null (I7a695)
  • I valori della modalità di configurazione sono stati rinominati per riflettere il loro comportamento. (I6d247)
  • Sono stati risolti i problemi relativi al campo visivo e a HitTest in SceneCore TestApp. (I2c51e)
  • È stato corretto un bug in SpatialCapabilities.hasCapability() che restituiva true se una delle funzionalità trasmesse con un OR bit a bit era true, anziché restituire true solo se erano tutte true. (I2cd40)
  • SurfaceEntity.StereoMode.TOP_BOTTOM è stato aggiornato in modo che la mappa in alto sia visualizzata dall'occhio sinistro e quella in basso dall'occhio destro. (I4ae68)

Versione 1.0.0-alpha04

7 maggio 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha04 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 sono stati rilasciati. La versione 1.0.0-alpha04 contiene questi commit.

Nuove funzionalità

  • La gestione del pulsante Indietro ora funzionerà sulle entità del riquadro senza attività incorporate. Affinché la gestione del pulsante Indietro funzioni, devi specificare android:enableOnBackInvokedCallback= "true" nel manifest Android.
  • StereoSurfaceEntity ora supporta la riproduzione MV-HEVC tramite due nuovi valori StereoMode: MULTIVIEW_LEFT_PRIMARY e MULTIVIEW_RIGHT_PRIMARY.
  • PanelEntity.setSize e PanelEntity.getSize ora restituiscono le dimensioni nello spazio genitore.
  • Entity.setPose, Entity.getPose, Entity.setScale, Entity.getScale, Entity.setAlpha e Entity.getAlpha ora accettano un nuovo parametro relativeTo, che consente di ottenere/impostare valori relativi a spazi diversi. I valori supportati sono Parent, Activity e Real World e il valore predefinito per questo parametro è Parent.
  • Metodi di estensione del callback di visibilità spaziale aggiunti a SessionExt.kt per monitorare quando i contenuti della scena si spostano all'interno o all'esterno del campo visivo dell'utente.
  • setPointSourceParams è stato aggiunto a SpatialAudioTrack, consentendo l'aggiornamento dei parametri dopo la creazione della traccia.
  • È stata aggiunta una nuova classe, Scena, con riferimenti alle API Scenecore. La scena sarà accessibile come proprietà di estensione della sessione. Le funzioni all'interno di SessionExt sono state spostate in Scena, quindi gli importazioni dovranno essere modificate. Ad esempio, SessionExt.getScene(session).addSpatialCapababilitiesChangedListener contro SessionExt.addSpatialCapabilitiesChangedListener.
  • È stato aggiunto ActivityPose.hitTestAsync, che consente di hitTest contro i contenuti virtuali.
  • È stato aggiunto il nuovo tipo di componente SpatialPointerComponent, che consente ai clienti di specificare l'icona visualizzata per il puntatore o di disattivarla. Questo componente può essere attualmente collegato solo a PanelEntity istanze.
  • Introduzione della nuova fabbrica PanelEntity, che accetta le dimensioni del pannello in metri o pixel. Rimozione della fabbrica PanelEntity precedente che accettava due parametri di tipo Dimension per il pannello.

Modifiche alle API

  • Rimossa la limitazione RequiresApi(34) su tutti i pacchetti Jetpack XR. Questa limitazione era ridondante in quanto Jetpack XR è attualmente disponibile solo su dispositivi con livello API 34 o superiore. (Iae0f8)
  • I progetti rilasciati con Kotlin 2.0 richiedono l'utilizzo di KGP 2.0.0 o versioni successive (Idb6b5)
  • Il corso PermissionHelper è stato rimosso.
  • PanelEntity.getPixelDensity è deprecato.
  • PanelEntity.setPixelDimensions e PanelEntity.getPixelDimension vengono rimossi e sostituiti da setSizeInPixels e getSizeInPixels.
  • Lingua Entity.getActivitySpaceAlpha rimossa. Può essere sostituito con Entity.getAlpha(Space.Activity).
  • Lingua Entity.getWorldSpaceScale rimossa. Può essere sostituito con Entity.getScale(Space.REAL\_WORLD).
  • La classe Session in SceneCore è stata eliminata a favore di Session in XR Runtime.
  • StereoSurfaceEntity è stato rinominato in SurfaceEntity.
  • Entity.setSize e Entity.getSize vengono rimossi e gli stessi metodi vengono aggiunti a PanelEntity.
  • PointSourceAttributes è stato rinominato in PointSourceParams.
  • SpatializerConstants.SOURCE\_TYPE\_BYPASS è stato rinominato in SpatializerConstants.SOURCE\_TYPE\_DEFAULT.
  • L'entità PointSourceParams è stata modificata da accesso pubblico ad accesso interno.
  • Ora AnchorEntity.create richiede la configurazione di PlaneTrackingMode in Session.configure().
  • Le API SpatialUser ora richiedono la configurazione di HeadTrackingMode in Session.configure().
  • Quando ResizableComponent non è allegato, viene fornito un log a livello INFO anziché a livello ERROR.
  • La classe Fov è ora una normale classe Kotlin.
  • Dividi Entity.kt per inserire ogni tipo di entità concreta nel proprio file.
  • Quando crei un nuovo PanelEntity, la maggior parte delle visualizzazioni viene riassegnata a un FrameLayout. Ciò facilita l'utilizzo di LayoutInspector con i riquadri spaziali.
  • L'istanza XrExtensions attualmente in uso è ora registrata sulla piattaforma, nel miglior modo possibile, per facilitare il debug dell'app.

Correzioni di bug

  • È stata aggiunta una correzione per evitare un arresto anomalo che poteva verificarsi quando veniva spostato un PanelEntity con MovableComponent e AnchorPlacement
  • È stato risolto un problema per cui ResizableComponent forniva dimensioni obsolete nel callback onResizeStart.
  • È stato risolto il problema di arresto anomalo quando dispose() di JxrPlatformAdapterAxr veniva chiamato più volte.

Versione 1.0.0-alpha03

26 febbraio 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha03 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 sono stati rilasciati. La versione 1.0.0-alpha03 contiene questi commit.

Nuove funzionalità

  • La riduzione Proguard è ora supportata per il codice Jetpack XR

Correzioni di bug

  • Correzioni aggiuntive per supportare la minimizzazione Proguard per Jetpack XR SceneCore (I4f47e)
  • Regola Jetpack XR Scenecore ProGuard aggiornata per impedire AbstractMethodError per i client ridotti. (I91a01)

Versione 1.0.0-alpha02

12 febbraio 2025

androidx.xr.scenecore:scenecore:1.0.0-alpha02 e androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 sono stati rilasciati. La versione 1.0.0-alpha02 contiene questi commit.

Modifica che causa interruzioni imminenti che interessano le app create prima della versione 1.0.0-alpha02

  • I metodi di fabbrica sono stati spostati dalla classe Session a un metodo complementare su ogni tipo rispettivamente:
    • Session.createActivityPanelEntity(Dimensions, String, Activity, Pose) è stato eliminato e sostituito con ActivityPanelEntity.create(Session, Dimensions, String, Pose)
    • Session.createAnchorEntity(Anchor) è stato eliminato e sostituito con AnchorEntity.create(Session, Anchor)
    • Session.createAnchorEntity(Dimensions, Int, Int, Duration) è stato eliminato e sostituito con AnchorEntity.create(Session, Dimensions, Int, Int, Duration)
    • Session.createEntity(String, Pose) è stato eliminato e sostituito con ContentlessEntity.create(Session, String, Pose)
    • Session.createExrImageResource(String) è stato eliminato e sostituito con ExrImage.create(Session, String)
    • Session.createGltfEntity(GltfModel, Pose) è stato eliminato e sostituito con GltfModelEntity.create(Session, GltfModel, Pose)
    • Session.createGltfModelResource(String) è stato eliminato e sostituito con GltfModel.create(Session, String)
    • Session.createInteractableComponent(Executor, InputEventListener) è stato eliminato e sostituito con InteractableComponent.create(Session, Executor, InputEventListener)
    • Session.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean) è stato eliminato e sostituito con MovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)
    • Session.createPanelEntity(View, Dimensions, Dimensions, String, Pose) è stato eliminato e sostituito con PanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)
    • Session.createResizableComponent(Dimensions, Dimensions) è stato eliminato e sostituito con ResizableComponent.create(Session, Dimensions, Dimensions)
    • Session.createStereoSurfaceEntity(Int, Dimensions, Pose) è stato eliminato e sostituito con StereoSurface.create(Session, Int, Dimensions, Pose)
  • Sono stati rimossi i seguenti metodi deprecati:
    • Session.canEmbedActivityPanel(Activity) è stato eliminato. Utilizza invece getSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).
    • Session.hasSpatialCapability(Int) è stato eliminato. È stato sostituito a favore dell'utilizzo di getSpatialCapabilities().hasCapability() come modo più compartimentato per verificare la presenza di funzionalità spaziali, poiché getSpatialCapabilities() restituisce un oggetto SpatialCapabilities.
    • Session.requestFullSpaceMode() è stato eliminato e sostituito con SpatialEnvironment.requestFullSpaceMode()
    • Session.requestHomeSpaceMode() è stato eliminato e sostituito con SpatialEnvironment.requestHomeSpaceMode()
  • Session.setFullSpaceMode(Bundle) e Session.setFullSpaceModeWithEnvironmentInherited(Bundle) sono stati spostati nelle funzioni di estensione. I file dello sviluppatore dovranno aggiungere i nuovi import per l'accesso:
    • import androidx.xr.scenecore.setFullSpaceMode
    • import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
  • Session.setPreferredAspectRatio(Activity, Float) è stato spostato in una funzione di estensione. I file dello sviluppatore dovranno aggiungere il nuovo import per l'accesso:
    • import androidx.xr.scenecore.setPreferredAspectRatio
  • Session.getEntitiesOfType(Class<out T>) e Session.getEntityForRtEntity(RtEntity) sono stati spostati nelle funzioni di estensione. I file dello sviluppatore dovranno aggiungere i nuovi import per l'accesso:
    • import androidx.xr.scenecore.getEntitiesOfType
    • import androidx.xr.scenecore.getEntityForRtEntity
  • Session.unpersistAnchor(Anchor) è stato eliminato
  • Session.createPersistedAnchorEntity(UUID) è stato eliminato

Problemi noti

  • PanelEntity.setCornerRadius() e ActivityPanelEntity.setCornerRadius() potrebbero non essere applicati fino al successivo spostamento del pannello. Questo problema può essere risolto spostando il pannello nella sua posizione attuale.
  • Quando viene chiamato BoundsChanged su ActivitySpace, alcuni ActivityPose potrebbero non essere stati aggiornati correttamente. Verrà aggiornato nella seguente chiamata OnSpaceUpdated del giorno ActivitySpace

Modifiche che provocano un errore e comportamentali

  • PanelEntity e ActivityPanelEntity avranno un raggio d'angolo predefinito di 32 dp o inferiore se il pannello ha una larghezza o un'altezza inferiore a 32 dp

Nuove API e funzionalità

  • Introduce StereoSurface.CanvasShape, che consente la creazione di canvas Spherical e Hemispherical per il rendering di contenuti multimediali immersivi.
  • StereoSurfaceEntity.create() ora accetta un parametro CanvasShape. (Questo parametro viene attualmente ignorato, ma verrà utilizzato in una release futura)
  • StereoSurfaceEntity.create() non accetta più un parametro Dimensions. Le applicazioni devono controllare le dimensioni del canvas impostando CanvasShape
  • StereoSurfaceEntity ha un membro CanvasShape che può essere impostato in modo dinamico.
  • StereoSurfaceEntity.dimensions è ora una proprietà di sola lettura; le applicazioni devono impostare CanvasShape per modificare le dimensioni.
  • StereoSurfaceEntity ora consente di reimpostare StereoMode dopo la costruzione.

Altre modifiche

  • Riduzione di minSDK in fase di compilazione a 24. Tutte le API Jetpack XR continuano a richiedere l'API 34 in fase di runtime.
  • La Session factory di SceneCore (Session.create) non avvia più un intent per acquisire l'autorizzazione SCENE_UNDERSTANDING. L'applicazione client deve invece richiedere esplicitamente le autorizzazioni all'utente prima di tentare di creare gli ancoraggi. La creazione di ancore non riuscirà se l'autorizzazione non viene concessa dall'utente.

Correzioni di bug

  • getActivitySpacePose() è stato corretto per tenere conto della scala ActivitySpace restituendo i valori di conversione in metri scalati anziché restituire sempre metri non scalati. transformPoseTo ora utilizza anche le unità corrette per calcolare le modifiche alle coordinate quando ActivitySpace è coinvolto nell'origine o nella destinazione.
  • La skybox verrà ora impostata su una skybox completamente nera ogni volta che viene passata una preferenza di skybox nulla utilizzando setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom)). Per ripristinare la skybox e la geometria predefinite del sistema, utilizza setSpatialEnvironmentPreference(null).

Versione 1.0.0-alpha01

12 dicembre 2024

androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 è stato rilasciato.

Funzionalità della versione iniziale Versione iniziale per sviluppatori di Jetpack SceneCore, una libreria di grafici di scene 3D per creare e manipolare scene e ambienti immersivi. Questa libreria ti consente di posizionare e disporre modelli 3D e pannelli di contenuti l'uno rispetto all'altro e ai tuoi ambienti virtuali o reali.

  • SpatialEnvironment: crea esperienze completamente immersive con un'immagine skybox e/o una geometria del modello 3D come sfondo della scena XR del tuo ambiente. In alternativa, attiva il passthrough, in modo che la scena virtuale possa integrarsi con l'ambiente reale dell'utente.
  • PanelEntity: aggiungi contenuti 2D alle tue scene 3D incorporando layout e attività Android standard in pannelli spazializzati che possono fluttuare o essere ancorati a superfici del mondo reale.
  • GltfModelEntity: posiziona, anima e interagisci con i modelli 3D nella tua scena. SceneCore supporta il formato di file glTF per facilitare l'integrazione con i modelli esistenti.
  • Audio spaziale: aggiungi sorgenti audio ambientali e puntiformi alla tua scena 3D per un suono spazializzato e completamente immersivo.
  • StereoSurfaceEntity: SceneCore supporta il routing dei contenuti renderizzati su una superficie Android per l'occhio sinistro/destro. Può essere utilizzato per il rendering di contenuti stereoscopici in formato side-by-side o top-bottom, ad esempio foto stereoscopiche, video 3D o altre UI sottoposte a rendering dinamico. Le applicazioni devono utilizzare MediaPlayer o ExoPlayer per la decodifica video.
  • Sistema di componenti: SceneCore offre un sistema di componenti solido e flessibile per aggiungere funzionalità ai tuoi contenuti XR, tra cui la possibilità per gli utenti di spostare, ridimensionare e interagire con modelli e pannelli.
  • Ancoraggio: con il passthrough attivato, puoi collegare pannelli e modelli a superfici reali, consentendo agli utenti di integrare perfettamente i contenuti virtuali nel loro ambiente reale.
  • Posizione dell'utente: accedi alla posizione dell'utente nella scena virtuale per orientare i contenuti in base alla sua posizione.
  • SpatialCapabilities: crea app completamente adattive che sfruttano le funzionalità spazializzate quando disponibili, ad esempio il posizionamento 3D dei contenuti dell'interfaccia utente. Inoltre, la tua app può monitorare le modifiche alle funzionalità durante l'esecuzione, per modificare l'esperienza in base a come l'utente utilizza il proprio dispositivo Android XR.

Problemi noti

  • Al momento è necessario un minSDK di 30 per utilizzare Jetpack SceneCore. Come soluzione alternativa, aggiungi la seguente voce del manifest <uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/> per poter eseguire la build ed eseguire l'app con un minSDK di 23.
  • La sessione può diventare non valida in varie situazioni che ricreano automaticamente l'attività, tra cui il ridimensionamento di un pannello principale, il collegamento di periferiche e il passaggio dalla modalità Chiaro alla modalità Buio. Se riscontri problemi di invalidazione della sessione, le soluzioni alternative includono la creazione di un pannello principale non ridimensionabile, l'utilizzo di un'entità pannello dinamico, la disattivazione della ricreazione dell'attività per modifiche di configurazione specifiche o la disattivazione delle modifiche al tema della modalità Chiaro/Scuro.
  • I componenti Movable e Resizable non sono supportati su GltfEntity.
  • Entity.getSize() non è supportato su GltfEntity.
  • Le app Jetpack XR devono richiedere l'autorizzazione android.permission.SCENE_UNDERSTANDING in AndroidManifest.
  • La creazione di una sessione è supportata solo su un dispositivo Android XR. Al momento, se crei una sessione e provi a utilizzarla su un dispositivo XR non Android, riceverai un'eccezione RuntimeException.
  • L'impostazione della skybox su null tramite `SpatialEnvironment.setSpatialEnvironmentPreference()` non comporta una skybox nera solida come documentato. Potrebbe essere visualizzata la skybox predefinita del sistema o non essere apportata alcuna modifica alla skybox corrente.
  • I client SceneCore devono aggiungere implementation(“com.google.guava:listenablefuture-1.0”) alla configurazione Gradle per le dipendenze dell'app. In una release futura, scenecore includerà questa libreria come dipendenza api, quindi i client non dovranno dichiararla esplicitamente.
  • SceneCore include erroneamente com.google.guava:guava-31.1-android e com.google.protobuf:protobuf-javalite come dipendenze transitive. Se ciò comporta errori di classe duplicati nella build, queste due dipendenze possono essere escluse in modo sicuro.
  • Se la tua app utilizza SceneCore e attiva ProGuard, si arresterà in modo anomalo quando crei una sessione. Come soluzione alternativa, disattiva ProGuard. Per ulteriori informazioni su come attivare ProGuard, consulta questa guida.