Entwicklung für Android XR – Übersicht

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>

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.ar

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.flash

android.hardware.camera.level.full

Konnektivität

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Gerätekonfiguration

android.hardware.ram.low

Formfaktorkonfiguration

android.hardware.type.automotive

android.hardware.type.embedded

android.hardware.type.pc

android.hardware.type.television

android.hardware.type.watch

android.software.leanback

android.software.leanback_only

android.software.live_tv

Eingabe

android.hardware.consumerir

android.software.input_methods

Standort

android.hardware.location.gps

Nahfeldkommunikation

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Sicherheitskonfiguration und Hardware

android.hardware.se.omapi.ese

android.hardware.se.omapi.sd

android.hardware.se.omapi.uicc

android.hardware.biometrics.face

android.hardware.fingerprint

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.light

android.hardware.sensor.relative_humidity

android.hardware.sensor.stepcounter

android.hardware.sensor.stepdetector

Softwarekonfiguration

android.software.backup

android.software.connectionservice

android.software.expanded_picture_in_picture

android.software.live_wallpaper

android.software.picture_in_picture

android.software.telecom

android.software.wallet_location_based_suggestions

Telefonie

android.hardware.telephony

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

android.software.sip

android.software.sip.voip

Virtual Reality (alt)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_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.

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.

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.