Android XR ist eine Erweiterung der Android-Plattform und des Android-Ökosystems. Mit dem Android XR SDK können Sie XR-Apps mit vertrauten Android-Frameworks und ‑Tools oder mit offenen Standards wie OpenXR und WebXR entwickeln. Alle kompatiblen Apps für Mobilgeräte oder große Displays können über den Play Store auf XR-Headsets installiert werden. Sehen Sie sich die Überlegungen zur Kompatibilität an, um festzustellen, ob Ihre App kompatibel ist.
In diesem Leitfaden werden die folgenden Bereiche erläutert:
- Entwicklungstools und ‑technologien auswählen
- Apps für Android XR entwickeln
- Manifestdatei Ihrer App konfigurieren
- Aspekte zur Kompatibilität von App-Manifesten
- Berechtigungen für Android XR
- Qualität von Android XR-Apps prüfen
- App-Paket erstellen und App für Android XR bereitstellen
Entwicklungstools und ‑technologien auswählen
Wenn Sie eine App für Android XR entwickeln, können Sie zwischen den folgenden Entwicklungsplattformen und ‑technologien wählen:
Jetpack XR SDK
Das Jetpack XR SDK enthält Android XR-Jetpack-Bibliotheken, die für die Nutzung der besonderen Funktionen von XR-Geräten entwickelt wurden. Verwenden Sie dieses SDK, wenn Sie eines der folgenden Ziele verfolgen:
- Eine bestehende Android-App für Smartphones oder Tablets optimieren oder verbessern
- Neue Android XR-App mit Android Studio und Jetpack erstellen
Wenn Sie bereits mit Android Jetpack vertraut sind, ist das Jetpack XR SDK genau das Richtige für Sie. Sie ist für die nahtlose Integration in diese Frameworks und Bibliotheken konzipiert und ermöglicht es Ihnen, Ihr vorhandenes Wissen zum Erstellen immersiver XR-Erlebnisse zu nutzen.
Weitere Informationen zur Entwicklung mit dem Jetpack XR-SDK
Unity
Die Unity Engine ist eine 3D-Entwicklungs-Engine in Echtzeit, mit der Künstler, Designer und Entwickler zusammenarbeiten können, um immersive und interaktive Erlebnisse zu schaffen. Die Android XR-Unterstützung von Unity bietet Ihnen ein hohes Maß an Kontrolle über die von Ihnen entwickelten 3D-Erlebnisse. Gleichzeitig profitieren Sie von der etablierten OpenXR-Unterstützung und dem Entwickler-Ökosystem von Unity.
Wenn Sie bereits eine XR-Anwendung mit Unity erstellt haben oder sich mit der Unity-Entwicklung auskennen, sollten Sie mit dieser Option beginnen.
Weitere Informationen zur Entwicklung mit Unity für Android XR
OpenXR
OpenXR ist ein gebührenfreier, offener Standard, der für die Entwicklung leistungsstarker, plattformübergreifender XR-Anwendungen verwendet werden kann. Android XR unterstützt OpenXR 1.0 und 1.1. Wir erweitern die Spezifikation mit neuen Erweiterungen für Android XR. Da Android XR auf offenen Standards basiert, sollten Entwicklungstools, die OpenXR und Android unterstützen, mit Android XR kompatibel sein.
Weitere Informationen zur OpenXR-Unterstützung für Android XR
WebXR
Mit WebXR können Sie immersive Erlebnisse für das Web entwickeln. Es bietet Zugriff auf VR- und AR-Geräte in kompatiblen Webbrowsern wie Chrome auf Android XR.
Beginnen Sie mit dieser Option, wenn Sie eine XR-Anwendung für das Web entwickeln oder einer Web-App XR-Funktionen hinzufügen möchten. Bestehende WebXR-Anwendungen funktionieren auch auf Android XR.
Weitere Informationen zum Erstellen von Web-Apps mit WebXR
Für XR entwickeln
XR erweitert die Designoberfläche über herkömmliche Flachbildschirme hinaus. Sie können immersive Erlebnisse gestalten, die physische und virtuelle Realität miteinander verbinden. Ganz gleich, ob Sie eine völlig neue App entwickeln oder einer vorhandenen App immersive Elemente hinzufügen möchten – der Leitfaden zum Design für Android XR kann Ihnen den Einstieg erleichtern.
Manifestdatei Ihrer App konfigurieren
Wie bei anderen Android-App-Projekten muss Ihre Android XR-App eine AndroidManifest.xml-Datei mit bestimmten Manifesteinstellungen haben. Die Manifestdatei enthält wichtige Informationen zu Ihrer App für die Android-Build-Tools, das Android-Betriebssystem und Google Play. Weitere Informationen finden Sie in der Übersicht über App-Manifeste.
Bei XR-Apps mit unterschiedlichen Funktionen muss Ihre Manifestdatei die folgenden Elemente und Attribute enthalten:
PROPERTY_XR_ACTIVITY_START_MODE-Attribut
Mit der Eigenschaft android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
wird dem System mitgeteilt, dass eine Aktivität in einem bestimmten Modus gestartet werden soll.
Für diese Property sind drei Werte möglich:
XR_ACTIVITY_START_MODE_HOME_SPACE
(nur Jetpack XR SDK)XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(nur Jetpack XR SDK)XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(nur OpenXR)
XR_ACTIVITY_START_MODE_HOME_SPACE
(Nur Apps, die mit dem Jetpack XR SDK erstellt wurden)
Mit diesem Startmodus können Sie Ihre App im Home Space starten. Im Home Space können mehrere Apps nebeneinander ausgeführt werden, sodass Nutzer Multitasking betreiben können. Alle Android-Apps für Mobilgeräte oder große Bildschirme können im Home Space ausgeführt werden. Das gilt auch für XR-Apps, die mit dem Jetpack XR SDK erstellt wurden.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_HOME_SPACE" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED
(Nur Apps, die mit dem Jetpack XR SDK erstellt wurden)
Mit diesem Startmodus wird Ihre App im Vollbildmodus gestartet. Im Vollbildmodus wird jeweils nur eine App ohne Bereichsgrenzen ausgeführt und alle anderen Apps werden ausgeblendet.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
(Nur für Apps, die mit OpenXR erstellt wurden)
Apps, die mit OpenXR erstellt wurden, werden im Full Space gestartet und müssen den Startmodus XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED
verwenden. „Unmanaged Full Space“ signalisiert Android XR, dass die App OpenXR verwendet.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE"
android:value="XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED-Property
Die android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
-Eigenschaft gibt an, dass die Anwendung mit einem bestimmten Grenztyp gestartet werden soll. Ihre App muss XR_BOUNDARY_TYPE_LARGE
angeben, wenn sie dafür konzipiert ist, dass Nutzer sich in ihrem physischen Raum bewegen. Wenn Sie XR_BOUNDARY_TYPE_NO_RECOMMENDATION
angeben, werden keine Empfehlungen für den Typ der Sicherheitsgrenze gegeben. Das System verwendet dann den Typ, der bereits verwendet wird.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
<uses-native-library> OpenXR
(Nur für Apps, die mit OpenXR erstellt wurden)
OpenXR-Anwendungen müssen die Verwendung der nativen OpenXR-Bibliothek deklarieren, damit die Laufzeit erfolgreich geladen werden kann. Ohne diese Deklaration kann die Laufzeit nicht geladen werden.
<manifest ... >
<application ... >
<uses-native-library andro id:name="libopenxr.google.so" android:required="false" />
<activity
android:name="com.example.myapp.MainActivity" ... >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
PackageManager-Funktionen für XR-Apps
Wenn Sie Apps über den Google Play Store anbieten, können Sie im App-Manifest erforderliche Hardware- oder Softwarefunktionen angeben. Mit dem Element uses-feature
kann der Play Store Apps, die Nutzern angezeigt werden, richtig filtern.
Die folgenden Funktionen sind spezifisch für XR-Apps.
android.software.xr.api.spatial
Apps, die mit dem Jetpack XR SDK erstellt wurden, müssen diese Funktion im App-Manifest enthalten. Der Wert, den Sie für das Attribut android:required
festlegen, hängt vom Release-Track Ihrer App ab.
Wenn Ihre App XR-spezifische Funktionen oder Inhalte in einem vorhandenen mobilen APK bündelt und im mobilen Release-Track veröffentlicht wird, legen Sie das Attribut android:required
auf false
fest:
<!-- If you are publishing an existing mobile APK using the mobile release track, set android:required to false.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="false" />
Wenn Ihre App speziell für XR-fähige Geräte entwickelt wurde und im speziellen Release-Track für Android XR veröffentlicht wird, legen Sie das Attribut android:required
auf true
fest:
<!-- If you are publishing a separate APK for XR using the dedicated Android XR release track, set android:required to true.-->
<uses-feature android:name="android.software.xr.api.spatial" android:required="true" />
android.software.xr.api.openxr
Apps, die auf die Android XR-Plattform ausgerichtet sind und mit OpenXR oder Unity erstellt wurden, müssen diese Funktion im App-Manifest mit dem Attribut android:required
auf true
festlegen.
Bei Apps, die das Android XR Extensions Package for Unity Version 1.0.0 oder höher oder das Unity OpenXR: Android XR Package Version 0.5.0-exp.1 oder höher verwenden, muss dieses Element nicht manuell zum App-Manifest hinzugefügt werden. Diese beiden Pakete fügen dieses Element für Sie in das App-Manifest ein.
Geräte können eine Version für diese Funktion angeben, die die höchste vom Gerät unterstützte OpenXR-Version angibt. Die oberen 16 Bits stehen für die Hauptversionsnummer und die unteren 16 Bits für die Nebenversionsnummer. Wenn Sie beispielsweise OpenXR-Version 1.1 angeben möchten, legen Sie den Wert auf "0x00010001"
fest.
Apps können die Funktionsversion verwenden, um eine Mindestversion von OpenXR anzugeben, die für die App erforderlich ist. Wenn Ihre App beispielsweise OpenXR-Version 1.1 unterstützt, deklarieren Sie das folgende Feature:
<uses-feature android:name="android.software.xr.api.openxr"
android:version="0x00010001"
android:required="true" />
android.hardware.xr.input.controller
Diese Funktion weist darauf hin, dass die App Eingaben von einem hochpräzisen 6DoF-Bewegungscontroller (6 Freiheitsgrade) benötigt, um richtig zu funktionieren. Wenn Ihre App Controller unterstützt und ohne sie nicht funktioniert, legen Sie den Wert auf true
fest.
Wenn Ihre App Controller unterstützt, aber auch ohne sie funktioniert, legen Sie sie auf false
fest.
<!-- Sets android:required to true, indicating that your app can't function on devices without controllers. -->
<uses-feature android:name="android.hardware.xr.input.controller" android:required="true" />
android.hardware.xr.input.hand_tracking
Diese Markierung gibt an, dass die App eine hochgenaue Handverfolgung benötigt, um richtig zu funktionieren. Dazu gehören die Position, Ausrichtung und Geschwindigkeit der Gelenke in der Hand des Nutzers. Wenn Ihre App die Hand-Tracking-Funktion unterstützt und ohne sie nicht funktioniert, legen Sie den Wert auf true
fest. Wenn Ihre App Hand-Tracking unterstützt, aber auch ohne diese Funktion verwendet werden kann, legen Sie den Wert auf false
fest.
<!-- Sets android:required to true, indicating that your app can't function on devices without hand tracking. -->
<uses-feature android:name="android.hardware.xr.input.hand_tracking" android:required="true" />
android.hardware.xr.input.eye_tracking
Dieses Flag gibt an, dass die App für die Eingabe ein hochpräzises Eye-Tracking benötigt, damit sie richtig funktioniert. Wenn Ihre App die Blicksteuerung für die Eingabe unterstützt und ohne sie nicht funktioniert, legen Sie den Wert auf true
fest. Wenn Ihre App Eye-Tracking für die Eingabe unterstützt, aber auch ohne diese Funktion verwendet werden kann, setzen Sie den Wert auf false
.
<!-- Sets android:required to true, indicating that your app can't function on devices without eye tracking. -->
<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />
App-Manifest-Kompatibilität für Apps für Mobilgeräte und große Displays
Wie im Abschnitt PackageManager-Funktionen für XR-Apps beschrieben, deklarieren Apps, dass sie eine Funktion verwenden, indem sie sie in einem <uses-feature>
-Element im App-Manifest deklarieren. Einige Funktionen wie Telefonie oder GPS sind möglicherweise nicht mit allen Geräten kompatibel.
Nicht unterstützte Funktionen
Der Google Play Store filtert Apps, die auf einem Gerät installiert werden können, anhand der folgenden Android-Funktionsdeklarationen.
Kamerahardware
android.hardware.camera.autofocus
android.hardware.camera.capability.manual_post_processing
android.hardware.camera.capability.manual_sensor
android.hardware.camera.capability.raw
android.hardware.camera.concurrent
android.hardware.camera.external
android.hardware.camera.level.full
Konnektivität
android.hardware.ipsec_tunnel_migration
Gerätekonfiguration
Formfaktorkonfiguration
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
Eingabe
android.software.input_methods
Standort
Nahfeldkommunikation
Sicherheitskonfiguration und Hardware
android.hardware.se.omapi.uicc
android.hardware.biometrics.face
android.hardware.identity_credential
android.hardware.identity_credential_direct_access
android.hardware.keystore.limited_use_key
android.hardware.keystore.single_use_key
android.hardware.strongbox_keystore
Sensoren
android.hardware.sensor.accelerometer_limited_axes
android.hardware.sensor.accelerometer_limited_axes_uncalibrated
android.hardware.sensor.ambient_temperature
android.hardware.sensor.barometer
android.hardware.sensor.gyroscope_limited_axes
android.hardware.sensor.gyroscope_limited_axes_uncalibrated
android.hardware.sensor.heading
android.hardware.sensor.heartrate
android.hardware.sensor.heartrate.ecg
android.hardware.sensor.hinge_angle
android.hardware.sensor.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
Softwarekonfiguration
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
Telefonie
android.hardware.telephony.calling
android.hardware.telephony.cdma
android.hardware.telephony.data
android.hardware.telephony.euicc
android.hardware.telephony.euicc.mep
android.hardware.telephony.gsm
android.hardware.telephony.ims
android.hardware.telephony.mbms
android.hardware.telephony.messaging
android.hardware.telephony.radio.access
android.hardware.telephony.subscription
Virtual Reality (alt)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Widgets
Berechtigungen für XR
Genau wie bei Apps auf Mobilgeräten und anderen Formfaktoren müssen für einige Funktionen von XR-Apps Berechtigungen in der AndroidManifest-Datei Ihrer App deklariert werden. Bei gefährlichen Berechtigungen muss Ihre App möglicherweise Laufzeitberechtigungen anfordern. Weitere Informationen finden Sie unter Berechtigungen unter Android und Best Practices für Berechtigungen.
Die folgenden Berechtigungen können von XR-Apps verwendet werden. Alle Berechtigungen in diesem Abschnitt gelten als riskante Berechtigungen. Sie müssen sie also in Ihrem App-Manifest deklarieren und zur Laufzeit anfordern.
android.permission.EYE_TRACKING_COARSE
Stellt die Augenposition, den Status und die Ausrichtung des Nutzers dar, z. B. zur Verwendung mit Avataren. Verwenden Sie diese Berechtigung, wenn Eye-Tracking-Daten mit geringer Präzision erforderlich sind.
Jetpack XR SDK
–
OpenXR-Erweiterungen
Unity-Funktionen
android.permission.EYE_TRACKING_FINE
Blicksteuerung für Auswahl, Eingabe und Interaktionen.
Jetpack XR SDK
–
OpenXR-Erweiterungen
Unity-Funktionen
android.permission.FACE_TRACKING
Tracking und Rendern von Gesichtsausdrücken.
Jetpack XR SDK
–
OpenXR-Erweiterungen
Unity-Funktionen
android.permission.HAND_TRACKING
Verfolgung von Handgelenksposen sowie Winkel- und Linear-Geschwindigkeiten; Verwendung einer Mesh-Darstellung der Hände des Nutzers.
Jetpack XR SDK
OpenXR-Erweiterungen
Unity-Funktionen
android.permission.SCENE_UNDERSTANDING_COARSE
Lichtschätzung, Durchreichen auf Mesh-Oberflächen projizieren, Raycasts für Trackables in der Umgebung ausführen, Ebenen-Tracking, Objekt-Tracking, persistente Anker.
Jetpack XR SDK
OpenXR-Erweiterungen
Unity-Funktionen
android.permission.SCENE_UNDERSTANDING_FINE
Tiefentextur
Jetpack XR SDK
–
OpenXR-Erweiterungen
Unity-Funktionen
Qualität von Android XR-Apps prüfen
Um zu prüfen, ob Ihre App eine gute Nutzererfahrung bietet, sollten Sie sich unsere Qualitätsrichtlinien für Android XR-Apps ansehen.
App für Android XR verpacken und bereitstellen
Android XR bietet über Google Play eine Vielzahl von Apps und Erlebnissen für XR-Headsets. Im Leitfaden zum Verpacken und Verteilen von Apps für Android XR finden Sie Informationen zum Einstieg in den Play Store und die Play Console, zu Veröffentlichungstracks, zum Vorbereiten von Android App Bundles und zu Einschränkungen bei der App-Größe.
OpenXR™ und das OpenXR-Logo sind Marken von The Khronos Group Inc. und sind in China, der Europäischen Union, Japan und dem Vereinigten Königreich als Marke eingetragen.