Jetpack Compose für XR
Letzte Aktualisierung | Stabile Version | Releasekandidat | Beta-Ausgabe | Alpharelease |
---|---|---|---|---|
30. Juli 2025 | - | – | - | 1.0.0-alpha05 |
Abhängigkeiten deklarieren
Wenn Sie eine Abhängigkeit von XR Compose 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:
Cool
dependencies { implementation "androidx.xr.compose:compose:1.0.0-alpha05" // Use to write unit tests testImplementation "androidx.xr.compose:compose-testing:1.0.0-alpha05" }
Kotlin
dependencies { implementation("androidx.xr.compose:compose:1.0.0-alpha05") // Use to write unit tests testImplementation("androidx.xr.compose:compose-testing:1.0.0-alpha05") }
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 abstimmen, indem Sie auf die Schaltfläche mit dem Stern klicken.
Weitere Informationen finden Sie in der Dokumentation zur Problemverfolgung.
Version 1.0
Version 1.0.0-alpha05
30. Juli 2025
androidx.xr.compose:compose:1.0.0-alpha05
und androidx.xr.compose:compose-testing:1.0.0-alpha05
werden veröffentlicht. Version 1.0.0-alpha05 enthält diese Commits.
Neue Funktionen
- Die Annotationsklasse
SubspaceComposable
wurde öffentlich gemacht. (Ic2a34, b/399432430) - Zwei neue
SpatialExternalSurface
-Composables, die 180- und 360-Grad-Kugeln darstellen. (I40ef2, b/391705799) SubspaceModifier.aspectRatio
hinzugefügt (Ide5ab, b/399729509, b/414762147)- Die
SceneCoreEntity
API wurde hinzugefügt, um die Interoperabilität zwischenSceneCore
und Compose für XR zu verbessern. (I50bb3, b/423020989) GravityAlignedsubspace
-API zur Unterstützung der nicht skalierten Funktion „Und“ bereitgestellt (I07359)GravityAligned
API-Änderungen
SpatialDialog()
folgt der Konfiguration fürSpatialDialogProperties.dismissOnBack
. (Ib453b, b/416797132)- Aktualisieren Sie
minimumPanelDimension
auf die neue StandarddimensionsgrößeDimensions(0.1f, 0.1f, 0.1f)
, da sie in Metern angegeben wird. (Ib852a) - Unterbereiche und Orbiters behalten jetzt ihren internen Status im Home-Bereich und wenn die App im Hintergrund ausgeführt wird. Im Home Space-Modus richtet Subspace die Szene weiterhin vor, um zum Full Space-Modus zu wechseln. (I40317, b/416037751)
SpatialDialogs
behalten jetzt ihren Status bei, wenn die App im Hintergrund ausgeführt wird. (I6aa56)ApplicationSubspace
übernimmt jetzt die empfohlene Skalierung und Position aus dem System. (I4565f, b/418834194)- Es wurde eine bessere Fehlermeldung hinzugefügt und der Fehler wird früher ausgelöst, wenn
SubspaceComposable
in einem Kontext verwendet wird, der nichtSubspaceComposable
ist. (Iee2ae, b/416484684) ExperimentalSubspaceVolumeApi
wird von „Warnung“ zu „Fehler“ aktualisiert, da Warnungen bei der missbräuchlichen Verwendung zusammensetzbarer APIs oft übersehen werden. (I427aa, b/424864286)- Der Unterraum und
ApplicationSubspace
werden jetzt durchrecommendedContentBoxInFullSpace
eingeschränkt. Bisher war sie durch das Sichtfeld vonSpatialUser
eingeschränkt. (I41015, b/423074142) SpatialElevation
aktualisieren, um die Mindestgröße zu verwenden und keine fest codierte Größe mehr zu nutzen (I2dbe6, b/427785338)- Aktualisieren Sie, wie wir die
SpatialAcitivityPanel
testen, um zu sehen, wann eine wichtige Variable geändert wird. (I0f64d, b/427999029) - Entfernen Sie
VolumeConstraints.Unbounded
und legen Sie stattdessen die Standardwerte für die Einschränkung fest. (Ie24ec, b/407938414) SpatialFeatheringSize
ist nicht mehr öffentlich (I1c15b, b/399432430)- Die XR-
Placeable
wurde inSubspacePlaceable
umbenannt, um sie von derPlaceable
von Compose zu unterscheiden. (I74874) - Entfernen der Orbiter-Einstellungen und Hinzufügen von
shouldRenderInNonSpatial
als neuer Parameter. Außerdem wird die KlasseEdgeOffset
entfernt undorbiterOffsetType
als neuer Parameter hinzugefügt, umOrbiter()
-Funktionen zusammenzuführen. Außerdem wurdeOrbiterEdge
inContentEdge
umbenannt. (Iebf3d) Measurable
wurde inSubspaceMeasurable
umbenannt, um den Typ vomMeasurable
-Typ von Compose zu unterscheiden. (I9726c)MeasureResult
inSubspaceMeasureResult
umbenennen (I9f34d)- Die
setSubspaceContent
API wurde entfernt. Stattdessen wirdsetContent
mit einemSubspace
-Composable verwendet. (Ifff4c, b/421427391, b/421427391) MeasurePolicy
wird inSubspaceMeasurePolicy
umbenannt. (I37a9b, b/422553904)- Machen Sie
SubspaceSemanticsInfo
zu einem versiegelten Interface, da wir ohne die Standardwerte keine Mitglieder hinzufügen können. (I372f9, b/423704068) - Die Dokumentation für
SpatialExternalSurface
wurde aktualisiert undContentSecurityLevel
wurde inSurfaceProtection
umbenannt (I3c460, b/420982808). - Es wurde ein überladener Konstruktor für den verschiebbaren Modifier bereitgestellt, der das Verankern ermöglicht. (Ic0c70)
- Es wurde ein weiterer Positionsanbieter für Tooltips hinzugefügt. Entwickler können jetzt festlegen, ob der Tooltip über, unter, links oder rechts vom Anker platziert wird. Fügen Sie eine API hinzu, die eine Form für Carets akzeptiert, damit mehr benutzerdefinierte Formen bereitgestellt werden können. (Ie513c, b/374766087, b/418854637)
CoreEntity
wurde alsPublishedApi
entfernt (Ifee05)
Fehlerkorrekturen
- Ein Problem wurde behoben, bei dem
SpatialDialog
beim Rendern blinkte. (Ife73c, b/401619909) - Ein Problem wurde behoben, durch das
SpatialDialog
das Aktivitätsfeld nicht abdunkeln konnte. (I8ca6c, b/367442109) - Fehler behoben: Im XR-Dialogfeld werden einige Inhalte nicht angezeigt (I17cd5, b/418062437)
- Das Problem, dass
SpatialPopup
geschlossen wurde, wenn innerhalb des Inhalts darauf geklickt wurde, wurde behoben. (If262c, b/417245722) - Das Problem wurde behoben, bei dem das SpatialPanel bei der Verkettung von
resizable().movable()
nicht richtig an die neue Größe angepasst wurde. (I02ee3, b/422264230) - Das
topBar
überlappt sich nicht mehr mit dem Menü inSpatialComposeVideoPlayer
(Id33bc, b/427168167). - Fester Eckenradius wird nicht gerendert (I975fe, b/428261830)
Version 1.0.0-alpha04
7. Mai 2025
androidx.xr.compose:compose:1.0.0-alpha04
und androidx.xr.compose:compose-testing:1.0.0-alpha04
werden veröffentlicht. Version 1.0.0-alpha04 enthält diese Commits.
Neue Funktionen
- Die
CompositionLocalConsumerSubspaceModifierNode
-Schnittstelle wurde hinzugefügt, damit benutzerdefinierteSubspaceModifier
-Typen auf lokale Werte der Komposition zugreifen können. - Es wurde eine neue
SpatialPanel
-API hinzugefügt, die dem Compose-ImplementierungsstilAndroidView
folgt und die vorherigeViewBased SpatialPanel
ersetzt. - Das
VolumeConstraints.Unbounded
-Begleitobjekt wurde hinzugefügt, das unbegrenzte Einschränkungen darstellt. SubspaceModifier.onPointSourceParams
wurde hinzugefügt, um eine räumliche Audioquelle zu ermöglichen.- Es wurde ein öffentliches
ApplicationSubspace
hinzugefügt, das optionalesVolumeConstraints
bietet, um einen 3D-Bereich zu definieren, in dem die App räumliche Inhalte rendern kann. Wenn keine Einschränkungen angegeben sind, wird der Unterraum standardmäßig durch das aktuelle Sichtfeld desSpatialUser
in Breite und Höhe begrenzt. Nutzer können Einschränkungen angeben, die verwendet werden sollen, wenn das Sichtfeld nicht ermittelt werden kann. Andernfalls werden die Standardwerte für die Breite und Höhe des Sichtfelds verwendet. SpatialExternalSurface
wurde hinzugefügt. Damit lassen sich stereoskopische Inhalte rendern.SpatialExternalSurface
kann mit Modifikatoren (außer Alpha) und einem Weichzeichnungseffekt für Kanten angepasst werden.- Es wurde ein neuer
pointerHoverIcon
-Unterraummodifikator hinzugefügt, mit dem Nutzer das Symbol für den räumlichen Zeiger festlegen können.
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)
- Die Rücktaste funktioniert jetzt auch bei räumlichen Bereichen ohne eingebettete Aktivitäten. Damit die Rücktaste funktioniert, müssen Sie
android:enableOnBackInvokedCallback="true"
im Android-Manifest angeben. - Die Rückgabe von Ergebnissen funktioniert jetzt auch bei räumlichen Dialogen. Damit die Rücktaste funktioniert, müssen Sie
android:enableOnBackInvokedCallback="true"
im Android-Manifest angeben. - Compose-basierte und View-basierte
SpatialPanel
s können jetzt ihre Größe basierend auf ihrem Inhalt anpassen. - Entwickler können jetzt eigene benutzerdefinierte
SpatialElevationLevel
-Werte festlegen und sind nicht mehr auf die vordefinierten Stufen beschränkt. - Die Höhe des Orbiters kann jetzt über den Parameter
elevation
angepasst werden. - Der Unterbereich kann jetzt standardmäßig durch das Sichtfeld des
SpatialUser
in Breite und Höhe begrenzt werden. Wenn das Sichtfeld nicht bestimmt werden kann, werden die Standardwerte für die Breite und Höhe des Sichtfelds verwendet. - Dem Modifikator
Movable
wurden die neuen CallbacksonMoveStart
undonMoveEnd
hinzugefügt. Die CallbacksonMoveStart
undonMoveEnd
werden aufgerufen, wenn der Nutzer beginnt und beendet, einen Subspace-Composable mit dem Modifier „movable“ zu verschieben. - Der Parameter
name
wurde aus räumlichen APIs wieSpatialRow
undSpatialPanel
entfernt. Verwenden Sie stattdessenSubspaceModifier.testTag
, um räumliche Compose-Bäume zu debuggen. - Eine nicht unterstützte Überladung von
SpatialPopup
wurde entfernt, die nurspatialElevationLevel
undcontent
enthält. Verwenden Sie die Oberfläche, dieonDimissRequest
unterstützt. - Der
onPoseChange
-Callback aus dem Movable-Modifier wurde entfernt. Verwenden Sie stattdessenonMove
. SubspaceModifiers
wendet seine Effekte nicht mehr an, wenn es getrennt wurde oder gerade getrennt wird.- Die vorhandene
SpatialRow
API wurde inSpatialRow
undSpatialCurvedRow
aufgeteilt. Wenn Sie zuvor den ParametercurveRadius
vonSpatialRow
verwendet haben, verwenden Sie jetzt stattdessenSpatialCurvedRow
. Das Verhalten ist dasselbe. MainPanel
undActivityPanel
haben keine Titelleisten mehr, wenn sie auf einem ähnlich aktuellen System-Image ausgeführt werden.- Alpha- und Skalierungsmodifikatoren sind jetzt stapelbar und ihre Werte werden für den endgültigen angewendeten Alpha- oder Skalierungswert multipliziert.
- Der
onPoseChange
-Rückruf des Movable-Modifikators wurde optimiert, um eine flüssigere Bewegung der Pose zu ermöglichen. - Die verschiebbaren und in der Größe anpassbaren Modifikatoren führen ihre Callbacks jetzt im Hauptthread aus, damit Zustandsänderungen eine Neuzusammensetzung auslösen.
- Der Layout- und Messphase wurde eine Statusbeobachtung hinzugefügt, damit Statusänderungen in
SubspaceLayout
ein neues Layout auslösen. - Die Kette der optimierten Modifikatoren wurde aktualisiert, um vorhandene Modifikatoren besser wiederzuverwenden.
Fehlerkorrekturen
- Das Scrimming wurde beendet, als ein
SpatialDialog
angezeigt wurde. (Ic4594) - Anfragen zum Neugestalten, die gestellt werden, während Modifikator-Knoten getrennt sind, werden jetzt ignoriert.
- Phasen für das Neugestalten des Layouts, die durch die Modifikatoren „Movable“ und „Resizable“ ausgelöst werden, wurden entfernt.
- Ein Absturz in der zusammensetzbaren Funktion
MainPanel()
wurde behoben, der aufgetreten ist, wenn eine der beiden Dimensionen direkt oder während einer Layoutberechnung, z.B. einerSpatialRow/SpatialColumn
-Berechnung, auf null gesetzt wurde. Das Feld wird jetzt stattdessen ausgeblendet. Diese Korrektur bezieht sich speziell auf Abstürze während der Layoutphase. Das Anpassen der Größe des Bereichs auf null durch Nutzerinteraktion wird separat behandelt. Das ausgeblendete Feld hat keine UI-Affordances. - Ein Problem mit
maintainAspectRatio
aus dem Modifier für die Größenanpassung wurde behoben. Das Seitenverhältnis sollte jetzt beibehalten werden. - Ein Problem mit verschachtelten Unterbereichen wurde behoben, bei dem sie für einen einzelnen Frame falsch positioniert wurden.
- Ein Problem wurde behoben, durch das abgerundete Ecken manchmal nicht angewendet wurden, obwohl sie hätten angewendet werden sollen.
NestedSubspaces
wird nicht mehr für ein Frame am falschen Ort angezeigt.
Version 1.0.0-alpha03
26. Februar 2025
androidx.xr.compose:compose:1.0.0-alpha03
und androidx.xr.compose:compose-testing:1.0.0-alpha03
werden ohne nennenswerte Änderungen seit der letzten Alphaversion veröffentlicht. Version 1.0.0-alpha03 enthält diese Commits.
Version 1.0.0-alpha02
12. Februar 2025
androidx.xr.compose:compose:1.0.0-alpha02
und androidx.xr.compose:compose-testing:1.0.0-alpha02
werden veröffentlicht. Version 1.0.0-alpha02 enthält diese Commits.
Neue Funktionen
- Der Inhalt des Aktivitätsbereichs kann jetzt abgedunkelt werden, wenn ein räumlicher Dialog aktiviert wird.
- Die
Orbiter
API kann jetzt inSubspaceComposable
-Kontexten verwendet werden. Orbiters werden an das nächstgelegeneSubspaceLayout
-basierte zusammensetzbare übergeordnete Element angehängt. LayoutCoordinatesAwareModifierNode
wurde eingeführt, um benutzerdefinierte positionierungsbasierte Modifikatoren zu ermöglichen.SubspaceModifier.Node
wurden Methoden für den Lebenszyklus zum Anhängen/Abtrennen hinzugefügt.scaleWithDistance
wurde dem beweglichen Modifikator hinzugefügt. WennscaleWithDistance
aktiviert ist, wird das verschobene Unterraum-Element vergrößert oder verkleinert. Außerdem wird die explizite Skalierung beibehalten, die vor der Bewegung festgelegt war.
API-Änderungen
SessionCallbackProvider
wurde zugunsten vonSpatialCapabilities
entfernt.
Sonstige Änderungen
minSDK
auf 24 reduziert. Für alle Jetpack XR-APIs ist weiterhin API 34 zur Laufzeit erforderlich.- Die Konstruktoren
Orbiter
EdgeOffset.inner
,EdgeOffset.outer
undEdgeOffset.overlap
sind keine@Composable
-Methoden mehr, sodass sie in nicht zusammensetzbaren Kontexten verwendet werden können. - Die räumlichen Erhebungsebenen wurden an die aktuelle UX-Spezifikation angepasst.
- Implementieren Sie die
SubspaceSemanticsInfo
-Schnittstelle inMeasurableLayout
. SubspaceModifierElement
wurde inSubspaceModifierNodeElement
umbenannt.
Fehlerkorrekturen
- Fehlerbehebungen zur Stabilisierung der
SubspaceModifier
-Bestellung.SubspaceModifier
sollte zuverlässiger funktionieren. Die Modifikatoren „Offset“, „Drehen“, „Skalieren“, „Verschiebbar“ und „Größe anpassbar“ sollten jetzt in beliebiger Reihenfolge verwendet werden können.
Version 1.0.0-alpha01
12. Dezember 2024
androidx.xr.compose:compose-*1.0.0-alpha01
wird veröffentlicht.
Funktionen der Erstversion
Erste Entwicklerversion von Jetpack Compose für XR. Verwenden Sie vertraute Compose-Konzepte wie Zeilen und Spalten, um räumliche UI-Layouts in XR zu erstellen. Das gilt sowohl, wenn Sie eine vorhandene 2D-App in XR portieren, als auch, wenn Sie eine neue XR-App von Grund auf neu erstellen. Diese Bibliothek bietet Unterraum- und räumliche Composables wie räumliche Panels und Orbiters, mit denen Sie Ihre vorhandene 2D-Benutzeroberfläche auf Basis von Compose oder Views in einem räumlichen Layout platzieren können. Es wird das zusammensetzbare Element „Volume“ eingeführt, mit dem Sie SceneCore-Entitäten wie 3D-Modelle relativ zur Benutzeroberfläche platzieren können. Weitere Informationen finden Sie in diesem Entwicklerleitfaden:
Subspace
: Diese Composable-Funktion kann an beliebiger Stelle in der UI-Hierarchie Ihrer App platziert werden. So können Sie Layouts für 2D- und räumliche UIs beibehalten, ohne den Kontext zwischen Dateien zu verlieren. So können Sie beispielsweise die vorhandene App-Architektur einfacher zwischen XR und anderen Formfaktoren teilen, ohne den Status durch den gesamten UI-Baum zu übertragen oder Ihre App neu zu entwerfen.SpatialPanel: Ein SpatialPanel ist eine untergeordnete Komponente, mit der Sie App-Inhalte anzeigen können, z. B. die Videowiedergabe, Standbilder oder andere Inhalte.
Orbiter: Ein Orbiter ist eine räumliche UI-Komponente. Sie ist für die Verknüpfung mit einem entsprechenden räumlichen Bereich konzipiert und enthält Navigations- und Kontextaktionen, die sich auf diesen räumlichen Bereich beziehen. Wenn Sie beispielsweise ein räumliches Panel zum Anzeigen von Videoinhalten erstellt haben, können Sie einem Orbiter Steuerelemente für die Videowiedergabe hinzufügen.
Volumen: SceneCore-Entitäten wie 3D-Modelle relativ zur Benutzeroberfläche platzieren.
Räumliches Layout: Sie können mehrere räumliche Bereiche erstellen und sie mit
SpatialRow
,SpatialColumn
,SpatialBox
undSpatialLayoutSpacer
in einem räumlichen Layout platzieren. MitSubspaceModifier
s können Sie das Layout anpassen.Räumliche UI-Komponenten: Diese Elemente können in Ihrer 2D-Benutzeroberfläche wiederverwendet werden. Ihre räumlichen Attribute sind nur sichtbar, wenn räumliche Funktionen aktiviert sind.
SpatialDialog
: Das Feld wird in der Z-Tiefe leicht nach hinten verschoben, um ein erhöhtes Dialogfeld anzuzeigen.SpatialPopUp
: Das Feld wird in der Z-Tiefe leicht nach hinten verschoben, um ein Popup anzuzeigen.SpatialElevation
:SpatialElevationLevel
kann festgelegt werden, um die Höhe hinzuzufügen.
SpatialCapabilities: Die räumlichen Funktionen können sich ändern, wenn Nutzer mit Ihrer App oder dem System interagieren oder sogar von Ihrer App selbst geändert werden, z. B. durch den Wechsel in den Home Space oder Full Space. Um Probleme zu vermeiden, muss Ihre App prüfen, ob
LocalSpatialCapabilities.current
vorhanden ist, um zu ermitteln, welche APIs in der aktuellen Umgebung unterstützt werden.isSpatialUiEnabled
: Räumliche UI-Elemente (z. B. SpatialPanel)isContent3dEnabled
: 3D-ObjekteisAppEnvironmentEnabled
: Die UmgebungisPassthroughControlEnabled
: Gibt an, ob die Anwendung den Passthrough-Status steuern kann.isSpatialAudioEnabled
: Spatial Audio
Bekannte Probleme
- Derzeit ist für die Verwendung von Jetpack Compose für XR ein minSDK von 30 erforderlich. Als Workaround können Sie den folgenden Manifesteintrag
<uses-sdk tools:overrideLibrary="androidx.xr.scenecore, androidx.xr.compose"/>
hinzufügen, um mit einem minSDK von 23 zu erstellen und auszuführen. - Für Jetpack XR-Apps muss derzeit die Berechtigung
android.permission.SCENE_UNDERSTANDING
im AndroidManifest angefordert werden. - Wenn eine App direkt im Full Space gestartet wird und dazu die Eigenschaft
PROPERTY_XR_ACTIVITY_START_MODE
in ihrem Manifest verwendet, werden Aktivitäten/Anwendungen zuerst im Home Space geöffnet, bevor sie in den Full Space übergehen. - glTFs in Volume-Composables flackern möglicherweise anfangs am falschen Ort.
- Wenn Sie einen SpatialDialog in einem Bereich verwenden, der erheblich verschoben wurde, werden die Inhalte in die falsche Richtung verschoben.