{ } { }
Jetpack SceneCore
Letzte Aktualisierung | Stabile Version | Release-Kandidat | Beta-Ausgabe | Alphaversion |
---|---|---|---|---|
12. Februar 2025 | - | – | - | 1.0.0-alpha02 |
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 erforderlichen Artefakte hinzu:
Cool
dependencies { implementation "androidx.xr.scenecore:scenecore:1.0.0-alpha01" // Required for Java implementation "com.google.guava:listenableFuture:1.0" // Required for Kotlin implementation "org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0" // Use to write unit tests testImplementation "androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01" }
Kotlin
dependencies { implementation("androidx.xr.scenecore:scenecore:1.0.0-alpha01") // Required for Java implementation("com.google.guava:listenableFuture:1.0") // Required for Kotlin implementation("org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0") // Use to write unit tests testImplementation("androidx.xr.scenecore:scenecore-testing:1.0.0-alpha01") }
Weitere Informationen zu Abhängigkeiten finden Sie unter Build-Abhängigkeiten hinzufügen.
Feedback
Ihr Feedback hilft uns, Jetpack zu verbessern. Bitte teilen Sie uns mit, wenn Sie neue Probleme feststellen 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 einem vorhandenen Problem Ihre Stimme geben, 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-alpha02
12. Februar 2025
androidx.xr.scenecore:scenecore:1.0.0-alpha02
und androidx.xr.scenecore:scenecore-testing:1.0.0-alpha02
werden freigegeben. Version 1.0.0-alpha02 enthält diese Commits.
Anstehende gravierende Änderung für vor 1.0.0-alpha02 erstellte Apps
- Die Fabrikmethoden wurden aus der Klasse
Session
in eine zugehörige 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 es eine detailliertere Möglichkeit bietet, die Verfügbarkeit von geografischen 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. Entwicklerdateien müssen die neuen Importe für den Zugriff hinzufügen:import androidx.xr.scenecore.setFullSpaceMode
import androidx.xr.scenecore.setFullSpaceModeWithEnvironmentInherited
Session.setPreferredAspectRatio(Activity, Float)
wurde in eine Erweiterungsfunktion verschoben. Entwicklerdateien müssen den neuen Import für den Zugriff hinzufügen:import androidx.xr.scenecore.setPreferredAspectRatio
Session.getEntitiesOfType(Class<out T>)
undSession.getEntityForRtEntity(RtEntity)
wurden in Erweiterungsfunktionen verschoben. Entwicklerdateien müssen die neuen Importe für den Zugriff hinzufügen:import androidx.xr.scenecore.getEntitiesOfType
import 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 beim nächsten Verschieben des Steuerfelds wirksam. Sie können dies vermeiden, indem Sie das Steuerfeld an seine aktuelle Position verschieben.- Wenn
BoundsChanged
auf derActivitySpace
aufgerufen wird, wurden einigeActivityPose
s möglicherweise nicht richtig aktualisiert. Sie wird beim nächstenOnSpaceUpdated
-Anruf amActivitySpace
aktualisiert.
Nicht abwärtskompatible Änderungen und Verhaltensänderungen
PanelEntity
undActivityPanelEntity
haben standardmäßig einen Eckradius von 32 dp oder weniger, wenn der Bereich eine Breite oder Höhe von weniger als 32 dp hat.
Neue APIs und Funktionen
- Einführung von
StereoSurface.CanvasShape
, mit demSpherical
- undHemispherical
-Canvases zum Rendern von immersiven Medien erstellt werden können. - Für
StereoSurfaceEntity.create()
kann jetzt einCanvasShape
-Parameter verwendet werden. (Dieser Parameter wird derzeit ignoriert, aber in einer zukünftigen Version verwendet.) - Für
StereoSurfaceEntity.create()
ist keinDimensions
-Parameter mehr erforderlich. Die Größe des Canvas sollte in Anwendungen über die EinstellungCanvasShape
gesteuert werden. StereoSurfaceEntity
hat einCanvasShape
-Mitglied, das dynamisch festgelegt werden kann.StereoSurfaceEntity.dimensions
ist jetzt eine schreibgeschützte Property. In Anwendungen sollteCanvasShape
festgelegt werden, um Dimensionen zu ändern.- Mit
StereoSurfaceEntity
kannStereoMode
jetzt nach dem Erstellen zurückgesetzt werden.
Sonstige Änderungen
- Das Mindest-SDK für die Kompilierungszeit wurde auf 24 reduziert. Für alle Jetpack XR APIs ist weiterhin API 34 in der Laufzeit erforderlich.
- Die Sitzungs-Factory von
SceneCore
(Session.create
) startet nicht mehr den Intent zum Abrufen der BerechtigungSCENE_UNDERSTANDING
. Stattdessen muss die Clientanwendung die Berechtigungen vom Nutzer explizit anfordern, bevor versucht wird, die Anker zu erstellen. Die Erstellung des Ankers schlägt fehl, wenn der Nutzer die Berechtigung nicht gewährt.
Fehlerkorrekturen
getActivitySpacePose()
wurde korrigiert, um dieActivitySpace
-Skala zu berücksichtigen. Es werden jetzt Übersetzungswerte in skalierten Metern statt immer in nicht skalierten Metern zurückgegeben.transformPoseTo
verwendet jetzt auch die richtigen Einheiten, um Koordinatenänderungen zu berechnen, wenn dieActivitySpace
in der Quelle oder dem Ziel enthalten ist.- Die Skybox wird jetzt auf eine komplett schwarze Skybox gesetzt, wenn über
setSpatialEnvironmentPreference(new SpatialEnvironmentPreference(null, geom))
eine Einstellung für eine leere Skybox übergeben wird. Wenn Sie zum Standard-Skybox und zur Standardgeometrie 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
wird 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: Mit einem Skybox-Bild und/oder einer 3D-Modellgeometrie als Kulisse für Ihre XR-Szene Ihrer Umgebung können Sie ein vollständig immersives Erlebnis schaffen. Sie können auch die Funktion „Passthrough“ aktivieren, damit Ihre virtuelle Szene in die reale Umgebung des Nutzers eingebunden werden kann.
- PanelEntity: Fügen Sie Ihren 3D-Szenen 2D-Inhalte hinzu, indem Sie standardmäßige Android-Layouts und ‑Aktivitäten in räumliche Bereiche einbetten, die schweben oder an realen Oberflächen verankert werden können.
- GltfModelEntity: Hiermit können Sie 3D-Modelle in Ihrer Szene platzieren, animieren und mit ihnen interagieren. SceneCore unterstützt das glTF-Dateiformat, um die Einbindung in vorhandene Modelle zu vereinfachen.
- SpatialAudio: Fügen Sie Ihrer 3D-Szene Umgebungs- und Punktaudioquellen hinzu, um einen räumlichen, immersiven Klang zu erzielen.
- StereoSurfaceEntity: SceneCore unterstützt das Routing von Inhalten, die auf einer Android-Oberfläche gerendert werden, an das linke oder rechte Auge. So können Sie stereoskopische Inhalte im Side-by-Side- oder im Top-Bottom-Format rendern, z. B. Stereofotos, 3D-Videos oder andere dynamisch gerenderte Benutzeroberflächen. Für die Videodecodierung sollten Anwendungen MediaPlayer oder ExoPlayer verwenden.
- Komponentensystem: SceneCore bietet ein robustes und flexibles Komponentensystem, mit dem Sie Ihren XR-Inhalten Funktionen hinzufügen können. Dazu gehören Funktionen, mit denen Nutzer Modelle und Steuerfelder verschieben, ihre Größe ändern und mit ihnen interagieren können.
- Ankern: Wenn die Funktion „Durchlässiges AR“ aktiviert ist, können Sie Panels und Modelle an tatsächlichen Oberflächen anbringen. So können Nutzer virtuelle Inhalte nahtlos in ihre reale Umgebung einbinden.
- Nutzerpose: Sie können auf die Position des Nutzers in der virtuellen Szene zugreifen, um Ihre Inhalte an seiner Position auszurichten.
- SpatialCapabilities: Erstellen Sie vollständig adaptive Apps, die standortbezogene Funktionen nutzen, sofern verfügbar, 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 Nutzung entsprechend der Art und Weise anzupassen, wie der Nutzer sein Android XR-Gerät verwendet.
Bekannte Probleme
- Derzeit ist ein minSDK von 30 erforderlich, um Jetpack SceneCore zu verwenden. Als Problemumgehung fügen Sie den folgenden Manifesteintrag
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
hinzu, damit die App mit einer Mindest-SDK-Version von 23 erstellt und ausgeführt werden kann. - Die Sitzung kann 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 Sitzungsstornierung auftreten, können Sie als Problemumgehung das Hauptsteuerfeld größenfixieren, ein dynamisches Steuerfeld verwenden, die Aktivitätswiederherstellung für bestimmte Konfigurationsänderungen deaktivieren oder die Themenänderungen für den hellen/dunklen Modus deaktivieren.
- Bewegliche und veränderbare Komponenten werden von GltfEntity nicht unterstützt.
- Entity.getSize() wird von GltfEntity nicht unterstützt.
- Jetpack XR-Apps müssen die Berechtigung
android.permission.SCENE_UNDERSTANDING
in AndroidManifest anfordern. - Das Erstellen einer Sitzung wird nur auf einem Android XR-Gerät unterstützt. Wenn Sie derzeit eine Sitzung erstellen und versuchen, sie auf einem Gerät zu verwenden, das kein Android XR-Gerät ist, wird eine RuntimeException ausgegeben.
- Wenn Sie den Skybox über „SpatialEnvironment.setSpatialEnvironmentPreference()“ auf „null“ setzen, wird nicht wie beschrieben ein durchgehend schwarzer Skybox angezeigt. Dies kann dazu führen, dass die Standard-Skybox des Systems verwendet wird oder dass sich die aktuelle Skybox nicht ändert.
- SceneCore-Kunden 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 von Scenecore alsapi
-Abhängigkeit enthalten, sodass Clients sie nicht explizit deklarieren müssen. - SceneCore enthält fälschlicherweise
com.google.guava:guava-31.1-android
undcom.google.protobuf:protobuf-javalite
als transitive Abhängigkeiten. Wenn dies zu doppelten Klassenfehlern in Ihrem Build führt, können diese beiden Abhängigkeiten sicher ausgeschlossen werden. - Wenn Ihre App SceneCore verwendet und ProGuard aktiviert ist, stürzt sie beim Erstellen einer Sitzung ab. Deaktivieren Sie als Behelfslösung ProGuard. Weitere Informationen zum Aktivieren von ProGuard finden Sie in diesem Leitfaden.