Jetpack SceneCore
| Letzte Aktualisierung | Stabile Version | Releasekandidat | Betarelease | Alpha-Release |
|---|---|---|---|---|
| 22. Oktober 2025 | - | - | - | 1.0.0-alpha08 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von XR SceneCore hinzufügen möchten, müssen Sie Ihrem Projekt das Google Maven-Repository hinzufügen. Weitere Informationen finden Sie im Maven-Repository von Google.
Fügen Sie der Datei build.gradle für Ihre App oder Ihr Modul die Abhängigkeiten für die benötigten Artefakte hinzu:
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") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Lassen Sie es uns wissen, wenn Sie neue Probleme entdecken oder Ideen zur Verbesserung dieser Bibliothek haben. Sehen Sie sich die vorhandenen Probleme in dieser Bibliothek an, bevor Sie ein neues erstellen. Sie können für ein vorhandenes Problem stimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zum Issue Tracker.
Version 1.0
Version 1.0.0-alpha08
22. Oktober 2025
androidx.xr.scenecore:scenecore-*:1.0.0-alpha08 ist veröffentlicht. Version 1.0.0-alpha08 enthält diese Commits.
API-Änderungen
ActivityPanelEntity.moveActivityintransferActivityumbenannt (I273c5, b/430332856)
Fehlerkorrekturen
:xr:scenecore:scenecore-spatial-renderingund:xr:scenecore:scenecore-spatial-coreals Implementierungsabhängigkeit von:xr:scenecore:scenecorehinzugefügt (I6ab65, b/447000520)- Eine Ausnahme wird ausgelöst, wenn nach dem Beenden der Sitzung auf
session.scenezugegriffen wird. (I77e6f)
Version 1.0.0-alpha07
24. September 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha07, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha07 und androidx.xr.scenecore:scenecore-testing:1.0.0-alpha07 sind veröffentlicht. Version 1.0.0-alpha07 enthält diese Commits.
API-Änderungen
fixedAspectRatiowurde inisFixedAspectRatioEnabledumbenannt und ist jetzt eine boolesche Property (I5c4e8, b/440588971).Scenecore-Fälschungen befinden sich jetzt im Modulxr:scenecore:scenecore-testing. (Idd951)shouldAutoHideContentwurde inisAutoHideContentWhileResizingEnabledundshouldAlwaysShowOverlayinisAlwaysShowOverlayEnabledumbenannt (I97c36, b/432335421)- Die Konstanten
SceneCoreTextureSamplerwurden zur besseren Lesbarkeit aktualisiert. So istTextureSampler.MinFilter.LINEARjetztTextureSampler.MIN_FILTER_LINEAR(Ib159c). - Der Setter für
setKeyEntityder Szene wurde in die VariablekeyEntityzusammengeführt. Wenn SiekeyEntityauf eine nicht verschiebbare Entität wieAnchorEntityfestlegen, wird einIllegalArgumentExceptionausgegeben, anstatt einen booleschen Wert „false“ zurückzugeben. (I62080, b/428721695, b/422215745) - Die Variable
SpatialModeChangeListenerder Szene wurde durchsetSpatialModeChangedListenerersetzt. Es wird einConsumer<SpatialModeChangeEvent>anstelle einesSpatialModeChangedListenerverwendet.setSpatialModeChangedListenerkann jetzt optional einen Executor annehmen. (I62080, b/428721695, b/422215745) - Der Parameter
bundlewurde ausActivityPanelEntity.startActivityentfernt (I64344, b/430332856, b/430333040). SpatializerConstants.SOURCE_TYPE_BYPASSwurde inSpatializerConstants.SOURCE_TYPE_DEFAULTumbenannt. (Ifc7fe, b/422215565)- Die Konstante
SpatialSoundPool.PLAY_FAILEDwurde hinzugefügt. (Ifc7fe, b/422215565) SpatialSoundPool.play-Methoden wurden Standardargumente hinzugefügt. (Ifc7fe, b/422215565)- Rückgabewert von Settern in
SpatialAudioTrackBuilderentfernt (Ifc7fe, b/422215565) - Änderungen an SurfaceEntity
SurfaceEntity.CanvasShapewurde inShapeumbenanntSurfaceEntity.CanvasShape.Vr180Hemispherewurde inHemisphereumbenanntSurfaceEntity.CanvasShape.Vr360Spherewurde inSphereumbenanntSurfaceEntity.EdgeFeatheringParams.SmoothFeatherwurde inRectangleFeatherumbenanntSurfaceEntity.EdgeFeathingParams.SolidEdgewurde inNoFeatheringumbenanntSurfaceEntity.ContentSecurityLevelwurde inSurfaceProtectionumbenanntSurfaceEntity.ContentSecurityLevel.{values}hat einSURFACE_PROTECTION_-Präfix hinzugefügt.SurfaceEntity.SuperSampling.{$values}hat das PräfixSUPER_SAMPLING_hinzugefügtSurfaceEntity.StereoMode.{values}hat das PräfixSTEREO_MODE_hinzugefügtSurfaceEntity.ContentColorMetadata.maxCLLwurde inmaxContentLightLevelumbenannt (I7eb5f, b/422216050, b/427529950)
launchActivityinstartActivityumbenannt (I7db90, b/430332856)Scene.activitySpaceRootwurde entfernt. Verwenden Sie stattdessenScene.activitySpace. (I05ee8, b/378706624, b/422215745)configureBundleForFullSpaceModeLaunchundconfigureBundleForFullSpaceModeLaunchWithEnvironmentInheritedwurden increateBundleForFullSpaceModeLaunchundcreateBundleForFullSpaceModeLaunchWithEnvironmentInheritedumbenannt und als Methoden der obersten Ebene in die Datei LaunchUtils.kt verschoben. Außerdem wird „Session“ als erster Parameter verwendet (I64a2c, b/437186050).- Die
GroupEntity-Factory gibt jetzt den TypGroupEntityanstelle von „Entity“ zurück. (I66042)
Fehlerkorrekturen
- Löst eine
IllegalStateExceptionaus, wenn eine Entitätsinstanz nach dem Schließen verwendet wird. (I90990, b/427314036, b/432063442)
Version 1.0.0-alpha06
13. August 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha06, androidx.xr.scenecore:scenecore-guava:1.0.0-alpha06 und androidx.xr.scenecore:scenecore-testing:1.0.0-alpha06 sind veröffentlicht. Version 1.0.0-alpha06 enthält diese Commits.
API-Änderungen
- Einschränkung der APIs
BaseEntityundBaseScenePosevonSceneCoreaufheben (88c0ff6)
Version 1.0.0-alpha05
30. Juli 2025
androidx.xr.scenecore:scenecore-guava:1.0.0-alpha05, androidx.xr.scenecore:scenecore-testing:1.0.0-alpha05 und androidx.xr.scenecore:scenecore:1.0.0-alpha05 sind veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Neue Funktionen
- Die API für die wahrgenommene Auflösung wurde den Panel-Entitäten und
SurfaceEntitieshinzugefügt. (I118f6) PerceivedResolutionDer Datei „Scene.kt“ wurden Callback-Methoden hinzugefügt, um die wahrgenommene Auflösung des Hauptbereichs der Aktivität im HSM zu überwachen. (I58084)SurfaceEntity– Unterstützung für Anwendungen, die beim Erstellen von Super-Sampling anfordern. So können Anwendungen den Super-Sampling-Filter für das Anti-Aliasing verwenden. (I06913)- Das Attribut
recommendedContentBoxInFullSpacewurde zuActivitySpacehinzugefügt. Gibt ein empfohlenes Feld für Inhalte zurück, die im Vollbildmodus platziert werden sollen. (I4cd6f) - Es wurde ein überladener Konstruktor für den verschiebbaren Modifier bereitgestellt, der das Verankern ermöglicht. (Ic0c70)
API-Änderungen
Für diesen Release wurden umfangreiche API-Änderungen an SceneCore vorgenommen. Mehrere Klassen wurden umbenannt und/oder in andere Module verschoben. Die meisten Getter-/Setter-Methoden wurden durch Kotlin-Properties ersetzt. Bis zur ersten Beta-Version erwarten wir noch einige wichtige API-Änderungen, die jedoch nicht so störend oder zahlreich sein werden.
- Die folgenden Klassen und Schnittstellen wurden umbenannt und/oder verschoben:
androidx.xr.scenecore.PixelDimensionsnachandroidx.xr.runtime.math.IntSize2d;androidx.xr.scenecore.Dimensionsnachandroidx.xr.runtime.math.FloatSize3d;androidx.xr.scenecore.ActivityPosenachScenePose,androidx.xr.scenecore.ContentlessEntitynachGroupEntity,androidx.xr.scenecore.PlaneTypenachPlaneOrientation;androidx.xr.scenecore.PlaneSemanticnachPlaneSemanticType. (Ifd405)(I3b622) (If534d) - Eine Reihe von Settern für die Attribute von
Scenewurden als privat festgelegt. Sie sollten nicht vonSceneCore-Clients geändert werden:activitySpace,activitySpaceRoot,mainPanelEntity,perceptionSpace,spatialCapabilities,spatialEnvironmentundspatialUser. (I2f506) - In Entity: Die folgenden Elemente wurden in Properties geändert:
get/setParent(),setContentDescription;Entity.is/setHidden()wurde verworfen, verwenden Sie stattdessenEntity.is/setEnabled. (Ibc4c6) - Die Klasse
androidx.xr.scenecore.BasePanelEntitywurde entfernt. Verwenden Sie stattdessen direktPanelEntity. Getter und Setter fürPanelEntitywurden durch Eigenschaften ersetzt. Die EigenschaftPanelEntity.sizewurde vonFloat3dSizeinFloat2dSizegeändert. Die verworfene Methodeandroidx.xr.scenecore.PanelEntity.getPixelDimensionswurde entfernt. Verwenden Sie stattdessengetSizeInPixels. (Icc174) androidx.xr.scenecore.OnSpaceUpdatedListenerwurde durchRunnableersetzt. (I19308)SpatialUser.getCameraViews()wurde durch ein Attribut ersetzt. (Ib0cc5) FürExrImageundGltfModel:: Diecreate-Methoden wurden in suspend-Funktionen geändert. Die Erstellungsparameter wurden so geändert, dass sie anstelle vonStringeinUrioderPathakzeptieren. (Id8883) (I0d247), (I25706)SpatialEnvironment.requestFullSpaceModeundSpatialEnvironment.requestHomeSpaceModewurden in „Szene“ verschoben. Verwenden Sie beispielsweisesession.scene.requestFullSpaceMode()stattsession.scene.spatialEnvironment.requestFullSpaceMode().addOnPassthroughOpacityChangedListenerundaddOnSpatialEnvironmentChangedListenerhaben jetzt Überschreibungen, die optionale Executors akzeptieren. (I12fe0) (I6b21e)- Die folgenden verworfenen
SpatialEnvironment-Methoden wurden entfernt:togglePassthrough,setPassthrough,setPassthroughOpacity,getPassthroughMode,getPassthroughOpacity,setSkyboxundsetGeometry. Die verworfene KlasseSpatialEnvironment.PassthroughMode(I927bd) (I927bd) (I927bd) wurde ebenfalls entfernt. - Die folgenden
SpatialEnvironment-Getter und ‑Setter wurden durch Kotlin-Properties ersetzt:getCurrentPassthroughOpacity(),get/setPassthroughOpacityPreference(),get/setSpatialEnvironmentPreference(),isSpatialEnvironmentPreferenceActive()(I33a7b) (Ie06e2) (Ie06e2) - Der Typ von
SpatialEnvironmentPreference.preferredPassthroughOpacitywurde vonFloat?inFloatgeändert. Nullwerte werden nicht mehr akzeptiert. Stattdessen wirdSpatialEnvironment.NO_PASSTHROUGH_OPACITY_PREFERENCEverwendet, um anzugeben, dass keine Deckkraft bevorzugt wird. (I40107) - Der Parameter
windowBoundsPxwurde in der Methode „create“ inpixelDimensionsund sein Typ von „Rect“ inIntSize2dgeändert. (I1926e) - Der
SpatialEnvironment-Konstruktor ist jetzt intern (I75a51) - Die Klassen
SpatialPointerIconNoneundSpatialPointerIconCirclewurden durch die Companion-ObjekteSpatialPointerIcon.NONEundSpatialPointerIcon.CIRCLEersetzt (I416d2). SpatialPointerIconinSpatialPointerComponentist nicht mehr nullable. Verwenden SieSpatialPointerIcon.DEFAULTanstelle von „null“, um anzugeben, dass das Standardzeigersymbol des Systems verwendet werden soll. (I416d2)androidx.xr.scenecore.AnchorEntity.getState()wurde durch ein schreibgeschütztes Attribut ersetzt. Die Parameter der MethodeAnchorEntity.create()wurden zur besseren Übersichtlichkeit umbenannt. In den Methoden vonAnchorEntityzum Festlegen und Hinzufügen von Listenern wurde der Listener zum letzten Argument verschoben, um nachgestellte Lambdas zu ermöglichen.androidx.xr.scenecore.OnStateChangedListenerfürAnchorEntitywurde durchConsumer<AnchorEntity.State>ersetzt. (I472e0)GltfModelEntity.getAnimationState()ist jetzt eine Property. (I10b29)ActivitySpace.getBounds()wurde durch ein Attribut ersetzt.ActivitySpace.addBoundsChangedListenerwurde inActivitySpace.addOnBoundsChangedListenerumbenannt.ActivitySpace.setOnSpaceUpdatedListenerdurch Methoden zum Hinzufügen/Entfernen ersetzt. (I4c956)AnchorPlacement: planeTypeFilterwurde inanchorablePlaneOrientationsumbenannt undplaneSemanticFilterwurde inanchorablePlaneSemanticTypesumbenannt. Wenn Sie einerAnchorEntityoderActivitySpaceeineMovableComponenthinzufügen, wird „false“ zurückgegeben.MoveListenerwurde inEntityMoveListener shouldDisposeParentAnchorumbenannt,EntityMoveListener shouldDisposeParentAnchorwurde indisposeParentOnReAnchor systemMovableumbenannt unddisposeParentOnReAnchor systemMovablewurde aus der Funktioncreateentfernt und durchcreeateCustomMovable,createSystemMovableundcreateAnchorableersetzt (If11c4).SurfaceEntity.featherRadiusX/Ywurde entfernt und einEdgeFeatheringParams-Klassenkonzept wurde hinzugefügt. (Ic78fc)- Die Methode
PanelEntity.enablePanelDepthTest()wurde durch das AttributpanelClippingConfigersetzt. Legen SieScene.panelClippingConfig = PanelClippingConfig(isDepthTestEnabled = true)fest, um den Tiefentest zu aktivieren, oder legen SiePanelClippingConfig(isDepthTestEnabled = false)fest, um ihn zu deaktivieren. (I0cbe0) Scene.mainPanelEntityist jetzt vom TypMainPanelEntitystattPanelEntity(I7125a)- Die Methode
setFullSpaceModeder Klasse „Scene“ wurde inconfigureBundleForFullSpaceModeLaunchund die MethodesetFullSpaceModeWithEnvironmentInheritedinconfigureBundleForFullSpaceModeLaunchWithEnvironmentInheritedumbenannt. (I0cbe0) (I0cbe0) - Die Werte UNKNOWN, OUTSIDE_FOV, PARTIALLY_WITHIN_FOV und WITHIN_FOV von
SpatialVisibilitywurden in SPATIAL_VISIBILITY_UNKNOWN, SPATIAL_VISIBILITY_OUTSIDE_FIELD_OF_VIEW, SPATIAL_VISIBILITY_PARTIALLY_WITHIN_FIELD_OF_VIEW bzw. SPATIAL_VISIBILITY_WITHIN_FIELD_OF_VIEW umbenannt (Ie7e8c). - Die Klasse
SpatialVisibilitywurde durch ein öffentliches Objekt mit konstanten Int-Werten ersetzt.setSpatialVisibilityChangedListenerakzeptiert jetztConsumer<Int>anstelle vonConsumer<SpatialVisibility>(Ie7e8c) PointerCaptureComponent-Konstanten umbenannt und in dasPointerCaptureComponent.PointerCaptureState-Objekt verschoben (I9c7ac)PointerCaptureComponents' StateListenerwurde durchConsumer<Int>ersetzt. (I9c7ac)InputEventListenerwurde durchConsumer<InputEvent>ersetzt (I9c7ac)setPreferredAspectRatiowurde von der Scene-Klasse in dasSpatialWindow-Objekt verschoben und verwendet die Sitzung als ersten Parameter. (I7b717)Entity.setHidden()wurde durchEntity.setEnabled()ersetzt undEntity.isHidden()durchEntity.isEnabled().setHidden(false)ist gleichsetEnabled(true)undisHidden() == !isEnabled(). (Icf0de)- Der Typ von
Entity.contentDescriptionwurde von „String“ in „CharSequence“ geändert. (Ie59be) - Bei
Session.createundSession.configurewird jetztSecurityExceptionausgegeben, wenn nicht genügend Berechtigungen erteilt wurden, anstattSessionCreatePermissionsNotGrantedoderSessionConfigurePermissionsNotGrantedzurückzugeben. (I7c488) - Für
ResizableComponent.createist jetzt einConsumer<ResizeEvent> ResizeEventListenererforderlich.Consumer<ResizeEvent> ResizableComponent.sizewurde durchResizableComponent.affordanceSize ResizableComponent.minimumSizeersetzt.ResizableComponent.minimumEntitySize ResizableComponent.maximumSizewurde inResizableComponent.maximumEntitySizeumbenannt.ResizableComponent.autoHideContentwurde inResizableComponent.shouldAutoHideContentumbenannt.ResizableComponent.forceShowResizeOverlaywurde inResizableComponent.shouldAlwaysShowOverlayumbenannt. (I97a2d) minSDKwurde fürandroidx.xr.scenecoreundandroidx.xr.composeauf 24 reduziert. Für XR-Pakete ist zur Laufzeit weiterhin API 34 erforderlich. (I17224)- Die Einschränkung
RequiresApi(34)wurde für alle Jetpack XR-Pakete entfernt. Diese Einschränkung war überflüssig, da Jetpack XR derzeit nur auf Geräten mit API-Level 34 oder höher verfügbar ist. (Iae0f8) - Das Hauptartefakt
SceneCore(xr:scenecore:scenecore) enthält nur asynchrone APIs im Kotlin-Stil. Java-Entwickler können diexr:scenecore:scenecore-guava-Bibliothek verwenden, um auf kompatible APIs zuzugreifen. (If221b) - Für Projekte, die mit Kotlin 2.0 veröffentlicht wurden, ist KGP 2.0.0 oder höher erforderlich (Idb6b5).
- In dieser Bibliothek werden jetzt JSpecify-Annotationen für Nullsicherheit verwendet, die typbezogen sind. Kotlin-Entwickler sollten das folgende Compiler-Argument verwenden, um die korrekte Verwendung zu erzwingen:
-Xjspecify-annotations=strict(dies ist die Standardeinstellung ab Version 2.1.0 des Kotlin-Compilers) (Ia8420) - Alle asynchronen Methoden, die
ListenableFuturezurückgeben, wurden durch Kotlin-Suspend-Funktionen ersetzt. Java-Entwickler, dieListenableFuture-basierte asynchrone Methoden anstelle von Kotlin-Suspend-Funktionen verwenden möchten, müssen jetzt Erweiterungsfunktionen in:xr:scenecore-scenecore-guavaverwenden.GuavaExrImageenthält beispielsweise die asynchronen Funktionen von ExrImage, die Guava-Äquivalente sind,GuavaScenePoseenthält die asynchronen Funktionen vonScenePose, die Guava-Äquivalente sind,GuavaGltfModelenthält die asynchronen Funktionen vonGuava-equivalent GltfModelusw. (If7283) (I0af60) (If7283) (Ia8515) (I4efdf) (I54bbf) (I3467a) (I82a33)
Fehlerkorrekturen
- Die Jetpack XR-Scenecore-Regel
ProGuardwurde aktualisiert, umAbstractMethodErrorfür minimierte Clients zu verhindern. (I91a01) - Zusätzliche Korrekturen zur Unterstützung der Proguard-Minimierung für Jetpack XR
SceneCore(I4f47e) - Ein Fehler wurde behoben, bei dem ein
InteractableComponentzu einem Absturz führen konnte, wenn diehitPositionin den HitInfo desInputEventabstürzen konnte, wenn die vom System zurückgegebenehitPositionnull war (I7a695). - Die Konfigurationswerte für den Modus wurden umbenannt, um ihr Verhalten besser widerzuspiegeln. (I6d247)
- Probleme mit dem Sichtfeld und
HitTestin derSceneCore-Test-App wurden behoben. (I2c51e) - Ein Fehler in
SpatialCapabilities.hasCapability()wurde behoben. Die Funktion gab „true“ zurück, wenn eine der mit einer bitweisen ODER-Operation übergebenen Funktionen „true“ war, anstatt nur dann „true“ zurückzugeben, wenn alle Funktionen „true“ waren. (I2cd40) SurfaceEntity.StereoMode.TOP_BOTTOMwurde aktualisiert. Die obere Karte wird nun für das linke Auge und die untere Karte für das rechte Auge angezeigt. (I4ae68)
Version 1.0.0-alpha04
7. Mai 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha04 und androidx.xr.scenecore:scenecore-testing:1.0.0-alpha04 sind veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Neue Funktionen
- Die Rückabwicklung funktioniert jetzt auch für Panel-Entitäten ohne eingebettete Aktivitäten. Damit die Rücktaste funktioniert, müssen Sie
android:enableOnBackInvokedCallback= "true"im Android-Manifest angeben. StereoSurfaceEntityunterstützt jetzt die MV-HEVC-Wiedergabe über zwei neueStereoMode-Werte: MULTIVIEW_LEFT_PRIMARY und MULTIVIEW_RIGHT_PRIMARY.PanelEntity.setSizeundPanelEntity.getSizegeben jetzt Größen im übergeordneten Bereich zurück.Entity.setPose,Entity.getPose,Entity.setScale,Entity.getScale,Entity.setAlphaundEntity.getAlphaverwenden jetzt den neuen ParameterrelativeTo, mit dem Werte relativ zu verschiedenen Bereichen abgerufen und festgelegt werden können. Die unterstützten Werte sind „Parent“, „Activity“ und „Real World“. Der Standardwert für diesen Parameter ist „Parent“.- Der Klasse
SessionExt.ktwurden Erweiterungsmethoden für den Rückruf zur räumlichen Sichtbarkeit hinzugefügt, um zu überwachen, wann sich der Inhalt der Szene innerhalb oder außerhalb des Sichtfelds des Nutzers befindet. setPointSourceParamswurdeSpatialAudioTrackhinzugefügt. Dadurch können die Parameter aktualisiert werden, nachdem der Track erstellt wurde.- Es wurde eine neue Klasse „Scene“ mit Verweisen auf
Scenecore-APIs hinzugefügt. Die Szene ist als Erweiterungseigenschaft der Sitzung verfügbar. Funktionen inSessionExtwurden in „Scene“ verschoben. Daher müssen Importe angepasst werden, z. B.SessionExt.getScene(session).addSpatialCapababilitiesChangedListenerim Vergleich zuSessionExt.addSpatialCapabilitiesChangedListener. ActivityPose.hitTestAsyncwurde hinzugefügt, wodurch einhitTestfür virtuelle Inhalte möglich ist.- Der neue Komponententyp
SpatialPointerComponentwurde hinzugefügt. Damit können Kunden das Symbol für den Zeiger angeben oder das Symbol deaktivieren. Diese Komponente kann derzeit nur anPanelEntity-Instanzen angehängt werden. - Wir führen die neue
PanelEntity-Factory ein, die die Abmessungen des Panels in Metern oder Pixeln akzeptiert. Die altePanelEntity-Factory, die zwei Parameter vom Typ „Dimension“ für das Feld verwendet, wurde entfernt.
API-Änderungen
- Die Einschränkung
RequiresApi(34)wurde für alle Jetpack XR-Pakete entfernt. Diese Einschränkung war überflüssig, da Jetpack XR derzeit nur auf Geräten mit API-Level 34 oder höher verfügbar ist. (Iae0f8) - Für Projekte, die mit Kotlin 2.0 veröffentlicht wurden, ist KGP 2.0.0 oder höher erforderlich (Idb6b5).
- Der Kurs „
PermissionHelper“ wurde entfernt. PanelEntity.getPixelDensityist veraltet.PanelEntity.setPixelDimensionsundPanelEntity.getPixelDimensionwurden entfernt und durchsetSizeInPixelsundgetSizeInPixelsersetzt.Entity.getActivitySpaceAlphaentfernt. Kann durchEntity.getAlpha(Space.Activity)ersetzt werden.Entity.getWorldSpaceScaleentfernt. Kann durchEntity.getScale(Space.REAL\_WORLD)ersetzt werden.- Die Session-Klasse in
SceneCorewurde zugunsten der Session in XR Runtime gelöscht. StereoSurfaceEntitywurde inSurfaceEntityumbenannt.Entity.setSizeundEntity.getSizewurden entfernt und dieselben Methoden wurdenPanelEntityhinzugefügt.PointSourceAttributeswurde inPointSourceParamsumbenannt.SpatializerConstants.SOURCE\_TYPE\_BYPASSwurde inSpatializerConstants.SOURCE\_TYPE\_DEFAULTumbenannt.- Die
PointSourceParams-Entität wurde von öffentlichem zu internem Zugriff geändert. - Für
AnchorEntity.createmuss jetztPlaneTrackingModeinSession.configure()konfiguriert werden. - Für
SpatialUser-APIs muss jetztHeadTrackingModeinSession.configure()konfiguriert werden. - Wenn
ResizableComponentnicht angehängt ist, wird ein Log auf INFO-Ebene anstelle eines Logs auf ERROR-Ebene ausgegeben. - Die Fov-Klasse ist jetzt eine reguläre Kotlin-Klasse.
- Teilen Sie
Entity.ktauf, um jeden konkreten Entitätstyp in einer eigenen Datei zu platzieren. - Wenn Sie ein neues
PanelEntityerstellen, werden die meisten Ansichten einemFrameLayoutuntergeordnet. Dadurch wird die Verwendung vonLayoutInspectormit räumlichen Steuerfeldern erleichtert. - Die derzeit verwendete
XrExtensions-Instanz wird jetzt nach bestem Wissen und Gewissen bei der Plattform registriert, um das Debuggen von Apps zu erleichtern.
Fehlerkorrekturen
- Es wurde eine Korrektur hinzugefügt, um einen Absturz zu verhindern, der auftreten konnte, wenn ein
PanelEntitymitMovableComponentundAnchorPlacementverschoben wurde. - Ein Problem wurde behoben, bei dem
ResizableComponentveraltete Größen imonResizeStart-Callback bereitgestellt hat. - Ein Absturz wurde behoben, der auftrat, wenn
JxrPlatformAdapterAxr'sdispose()mehrmals aufgerufen wurde.
Version 1.0.0-alpha03
26. Februar 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha03 und androidx.xr.scenecore:scenecore-testing:1.0.0-alpha03 sind veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
Neue Funktionen
- Proguard-Minifizierung wird jetzt für Jetpack XR-Code unterstützt
Fehlerkorrekturen
- Zusätzliche Korrekturen zur Unterstützung der Proguard-Minimierung für Jetpack XR SceneCore (I4f47e)
- Die Jetpack XR-Scenecore-Regel
ProGuardwurde aktualisiert, umAbstractMethodErrorfür minimierte Clients zu verhindern. (I91a01)
Version 1.0.0-alpha02
12. Februar 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha02 und androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02 sind veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
Anstehende schwerwiegende Änderung für Apps, die vor Version 1.0.0-alpha02 erstellt wurden
- Factory-Methoden wurden aus der Klasse
Sessionin eine Companion-Methode für jeden jeweiligen Typ verschoben:Session.createActivityPanelEntity(Dimensions, String, Activity, Pose)wurde gelöscht und durchActivityPanelEntity.create(Session, Dimensions, String, Pose)ersetztSession.createAnchorEntity(Anchor)wurde gelöscht und durchAnchorEntity.create(Session, Anchor)ersetztSession.createAnchorEntity(Dimensions, Int, Int, Duration)wurde gelöscht und durchAnchorEntity.create(Session, Dimensions, Int, Int, Duration)ersetztSession.createEntity(String, Pose)wurde gelöscht und durchContentlessEntity.create(Session, String, Pose)ersetztSession.createExrImageResource(String)wurde gelöscht und durchExrImage.create(Session, String)ersetztSession.createGltfEntity(GltfModel, Pose)wurde gelöscht und durchGltfModelEntity.create(Session, GltfModel, Pose)ersetztSession.createGltfModelResource(String)wurde gelöscht und durchGltfModel.create(Session, String)ersetztSession.createInteractableComponent(Executor, InputEventListener)wurde gelöscht und durchInteractableComponent.create(Session, Executor, InputEventListener)ersetztSession.createMovableComponent(Boolean, Boolean, Set<AnchorPlacement>, Boolean)wurde gelöscht und durchMovableComponent.create(Session, Boolean, Boolean, Set<AnchorPlacement>, Boolean)ersetztSession.createPanelEntity(View, Dimensions, Dimensions, String, Pose)wurde gelöscht und durchPanelEntity.create(Session, View, Dimensions, Dimensions, String, Pose)ersetztSession.createResizableComponent(Dimensions, Dimensions)wurde gelöscht und durchResizableComponent.create(Session, Dimensions, Dimensions)ersetztSession.createStereoSurfaceEntity(Int, Dimensions, Pose)wurde gelöscht und durchStereoSurface.create(Session, Int, Dimensions, Pose)ersetzt
- Die folgenden veralteten Methoden wurden entfernt:
Session.canEmbedActivityPanel(Activity)wurde gelöscht. Verwenden Sie stattdessengetSpatialCapabilities.hasCapabilility(SPATIAL_CAPABILITY_EMBED_ACTIVITY).Session.hasSpatialCapability(Int)wurde gelöscht. Es wurde durchgetSpatialCapabilities().hasCapability()ersetzt, da dies eine besser abgegrenzte Möglichkeit ist, das Vorhandensein von räumlichen Funktionen zu prüfen, dagetSpatialCapabilities()einSpatialCapabilities-Objekt zurückgibt.Session.requestFullSpaceMode()wurde gelöscht und durchSpatialEnvironment.requestFullSpaceMode()ersetztSession.requestHomeSpaceMode()wurde gelöscht und durchSpatialEnvironment.requestHomeSpaceMode()ersetzt
Session.setFullSpaceMode(Bundle)undSession.setFullSpaceModeWithEnvironmentInherited(Bundle)wurden in Erweiterungsfunktionen verschoben. In Entwicklerdateien müssen die neuen Importe für den Zugriff hinzugefügt werden:import androidx.xr.scenecore.setFullSpaceModeimport androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)wurde in eine Erweiterungsfunktion verschoben. In Entwicklerdateien muss der neue Import für den Zugriff hinzugefügt werden:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)undSession.getEntityForRtEntity(RtEntity)wurden in Erweiterungsfunktionen verschoben. In Entwicklerdateien müssen die neuen Importe für den Zugriff hinzugefügt werden:import androidx.xr.scenecore.getEntitiesOfTypeimport androidx.xr.scenecore.getEntityForRtEntity
Session.unpersistAnchor(Anchor)wurde gelöschtSession.createPersistedAnchorEntity(UUID)wurde gelöscht
Bekannte Probleme
PanelEntity.setCornerRadius()undActivityPanelEntity.setCornerRadius()werden möglicherweise erst wirksam, wenn das Panel das nächste Mal verschoben wird. Das lässt sich vermeiden, indem Sie das Panel an seine aktuelle Position verschieben.- Wenn
BoundsChangedfür dieActivitySpaceaufgerufen wird, wurden einigeActivityPoses möglicherweise nicht richtig aktualisiert. Sie wird beim nächstenOnSpaceUpdated-Anruf amActivitySpaceaktualisiert.
Nicht abwärtskompatible Änderungen und Verhaltensänderungen
PanelEntityundActivityPanelEntityhaben einen Standard-Eckenradius von 32 dp oder weniger, wenn der Bereich eine Breite oder Höhe von weniger als 32 dp hat.
Neue APIs und Funktionen
- Mit
StereoSurface.CanvasShapekönnenSpherical- undHemispherical-Arbeitsbereiche zum Rendern immersiver Medien erstellt werden. StereoSurfaceEntity.create()akzeptiert jetzt einenCanvasShape-Parameter. Dieser Parameter wird derzeit ignoriert, wird aber in einer zukünftigen Version verwendet.StereoSurfaceEntity.create()akzeptiert keinenDimensions-Parameter mehr. Anwendungen sollten die Größe des Canvas durch Festlegen vonCanvasShapesteuern.StereoSurfaceEntityhat einCanvasShape-Element, das dynamisch festgelegt werden kann.StereoSurfaceEntity.dimensionsist jetzt eine schreibgeschützte Eigenschaft. Anwendungen solltenCanvasShapefestlegen, um die Abmessungen zu ändern.- Mit
StereoSurfaceEntitykannStereoModejetzt nach der Konstruktion zurückgesetzt werden.
Sonstige Änderungen
- Die minSDK-Version für die Kompilierung wurde auf 24 reduziert. Für alle Jetpack XR-APIs ist weiterhin API 34 zur Laufzeit erforderlich.
- Die Sitzungsfactory (
Session.create) vonSceneCorestartet keinen Intent mehr, um die BerechtigungSCENE_UNDERSTANDINGzu erhalten. Stattdessen muss die Clientanwendung die Berechtigungen explizit vom Nutzer anfordern, bevor sie versucht, die Anker zu erstellen. Die Ankererstellung schlägt fehl, wenn der Nutzer die Berechtigung nicht erteilt.
Fehlerkorrekturen
getActivitySpacePose()wurde korrigiert, um dieActivitySpace-Skalierung zu berücksichtigen. Es werden jetzt Übersetzungs-Werte in skalierten Metern zurückgegeben, anstatt immer nicht skalierte Meter.transformPoseToverwendet jetzt auch die richtigen Einheiten, um Koordinatenänderungen zu berechnen, wennActivitySpacein der Quelle oder im Ziel enthalten ist.- Die Skybox wird jetzt auf eine komplett schwarze Skybox festgelegt, wenn mit
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))eine Null-Skybox-Einstellung übergeben wird. Wenn Sie zur Standard-Skybox und ‑Geometrie des Systems zurückkehren möchten, verwenden SiesetSpatialEnvironmentPreference(null)..
Version 1.0.0-alpha01
12. Dezember 2024
androidx.xr.scenecore:scenecore-* 1.0.0-alpha01 ist veröffentlicht.
Funktionen der ersten Version Erste Entwicklerversion von Jetpack SceneCore, einer 3D-Szenengraph-Bibliothek zum Erstellen und Bearbeiten von immersiven Szenen und Umgebungen. Mit dieser Bibliothek können Sie 3D-Modelle und Inhaltsbereiche relativ zueinander und zu Ihren virtuellen oder realen Umgebungen platzieren und anordnen.
- SpatialEnvironment: Erstellen Sie vollständig immersive Erlebnisse mit einem Skybox-Bild und/oder einer 3D-Modellgeometrie als Kulisse für Ihre XR-Szene Ihrer Umgebung. Oder Sie aktivieren den Passthrough-Modus, damit sich die virtuelle Szene in die reale Umgebung des Nutzers einfügen kann.
- PanelEntity: Sie können 2D-Inhalte in Ihre 3D-Szenen einfügen, indem Sie Standard-Android-Layouts und -Aktivitäten in räumlich dargestellte Bereiche einbetten, die frei schweben oder an realen Oberflächen verankert werden können.
- GltfModelEntity: Mit dieser Klasse können Sie 3D-Modelle in Ihrer Szene platzieren, animieren und mit ihnen interagieren. SceneCore unterstützt das glTF-Dateiformat, um die Integration mit vorhandenen Modellen zu vereinfachen.
- SpatialAudio: Fügen Sie Ihrer 3D-Szene Umgebungs- und Punkt-Audioquellen hinzu, um einen vollständig immersiven, räumlichen Sound zu erzeugen.
- StereoSurfaceEntity: SceneCore unterstützt das Routing von Inhalten, die auf einer Android-Oberfläche gerendert werden, zum linken und rechten Auge. Damit können stereoskopische Inhalte im Side-by-Side- oder Top-Bottom-Format gerendert werden, z. B. Stereofotos, 3D-Videos oder andere dynamisch gerenderte Benutzeroberflächen. Anwendungen sollten MediaPlayer oder ExoPlayer für die Videodecodierung verwenden.
- Komponentensystem: SceneCore bietet ein robustes und flexibles Komponentensystem zum Hinzufügen von Funktionen zu Ihren XR-Inhalten, einschließlich Affordanzen für Nutzer, um Modelle und Bereiche zu verschieben, ihre Größe zu ändern und mit ihnen zu interagieren.
- Anker: Wenn Passthrough aktiviert ist, können Sie Panels und Modelle an realen Oberflächen anbringen. So können Nutzer virtuelle Inhalte nahtlos in ihre reale Umgebung einfügen.
- Nutzer-Pose: Ermöglicht den Zugriff auf den Standort des Nutzers in der virtuellen Szene, um Inhalte an der Position des Nutzers auszurichten.
- SpatialCapabilities: Entwickeln Sie vollständig adaptive Apps, die räumliche Funktionen nutzen, wenn sie verfügbar sind, z. B. die 3D-Positionierung von UI-Inhalten. Außerdem kann Ihre App während der Ausführung auf Änderungen an den Funktionen achten, um die Nutzererfahrung basierend darauf anzupassen, wie der Nutzer sein Android XR-Gerät verwendet.
Bekannte Probleme
- Derzeit ist ein minSDK von 30 erforderlich, um Jetpack SceneCore zu verwenden. Fügen Sie als Workaround den folgenden Manifesteintrag
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>hinzu, damit Sie mit einem minSDK von 23 erstellen und ausführen können. - Sitzungen können in verschiedenen Situationen ungültig werden, in denen die Aktivität automatisch neu erstellt wird. Dazu gehören das Ändern der Größe eines Hauptbereichs, das Anschließen von Peripheriegeräten und das Wechseln zwischen dem hellen und dem dunklen Modus. Wenn Probleme mit der Sitzungsungültigkeit auftreten, können Sie das Hauptfeld nicht in der Größe ändern, eine dynamische Feldentität verwenden, die Neuerstellung von Aktivitäten für bestimmte Konfigurationsänderungen deaktivieren oder Änderungen am hellen/dunklen Modus deaktivieren.
- Verschiebbare und in der Größe anpassbare Komponenten werden in GltfEntity nicht unterstützt.
- Entity.getSize() wird für GltfEntity nicht unterstützt.
- Jetpack XR-Apps müssen die Berechtigung
android.permission.SCENE_UNDERSTANDINGin AndroidManifest anfordern. - Das Erstellen einer Sitzung wird nur auf Android XR-Geräten unterstützt. Wenn Sie derzeit eine Sitzung erstellen und versuchen, sie auf einem Nicht-Android-XR-Gerät zu verwenden, erhalten Sie eine RuntimeException.
- Wenn die Skybox über `SpatialEnvironment.setSpatialEnvironmentPreference()` auf „null“ gesetzt wird, wird nicht wie dokumentiert eine einfarbig schwarze Skybox angezeigt. Möglicherweise wird die Standard-Skybox des Systems verwendet oder die aktuelle Skybox bleibt unverändert.
- SceneCore-Clients sollten
implementation(“com.google.guava:listenablefuture-1.0”)in ihrer Gradle-Konfiguration für die Abhängigkeiten ihrer App hinzufügen. In einer zukünftigen Version wird diese Bibliothek alsapi-Abhängigkeit in „scenecore“ enthalten sein, sodass Clients sie nicht explizit deklarieren müssen. - SceneCore enthält fälschlicherweise
com.google.guava:guava-31.1-androidundcom.google.protobuf:protobuf-javaliteals transitive Abhängigkeiten. Wenn dies zu Fehlern aufgrund doppelter Klassen in Ihrem Build führt, können diese beiden Abhängigkeiten problemlos ausgeschlossen werden. - Wenn Ihre App SceneCore verwendet und ProGuard aktiviert ist, stürzt sie beim Erstellen einer Sitzung ab. Deaktivieren Sie ProGuard als Behelfslösung. Weitere Informationen zum Aktivieren von ProGuard finden Sie in diesem Leitfaden.