Nachdem Sie Android Studio installiert und konfiguriert, ein Projekt erstellt und das Jetpack XR SDK eingerichtet haben, können Sie immersive Funktionen für Geräte wie XR-Headsets und kabelgebundene XR-Datenbrillen entwickeln.
Bevor Sie sich mit den verschiedenen Möglichkeiten zur Entwicklung von Apps beschäftigen, sollten Sie die Informationen in den folgenden Abschnitten lesen und die entsprechenden Aufgaben ausführen, um sicherzustellen, dass Ihre App für die Entwicklung immersiver XR-Inhalte konfiguriert ist.
Manifestdatei der App konfigurieren
Wie bei anderen Android-App-Projekten muss Ihre Android XR-App eine AndroidManifest.xml-Datei mit bestimmten Manifesteinstellungen enthalten. Die Manifestdatei enthält wichtige Informationen zu deiner App für die Android-Build-Tools, das Android-Betriebssystem und Google Play. Weitere Informationen finden Sie im Leitfaden zum App-Manifest.
Bei XR-differenzierten Apps muss die Manifestdatei die folgenden Elemente und Attribute enthalten:
PROPERTY_XR_ACTIVITY_START_MODE-Attribut
Mit dem Attribut android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" wird dem System mitgeteilt, dass eine Aktivität beim Start in einem bestimmten Modus gestartet werden soll.
Diese Property hat die folgenden Werte:
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_HOME_SPACE
Verwenden Sie diesen Startmodus, um Ihre App im Home Space zu 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, ebenso wie 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
Verwenden Sie diesen Startmodus, um Ihre App im Full Space zu starten. Im Full Space wird jeweils nur eine App ohne räumliche Begrenzungen 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>
PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED-Attribut
Das Attribut android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" gibt an, dass die Anwendung mit einem bestimmten Begrenzungstyp gestartet werden soll. In Ihrer App muss XR_BOUNDARY_TYPE_LARGE angegeben werden, wenn sie so konzipiert ist, dass sich Nutzer in ihrer physischen Umgebung bewegen können. Wenn Sie XR_BOUNDARY_TYPE_NO_RECOMMENDATION angeben, werden keine Empfehlungen für den Typ der Sicherheitsgrenze bereitgestellt. Das System verwendet dann den bereits verwendeten Typ.
<manifest ... >
<application ... >
<property
android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
android:value="XR_BOUNDARY_TYPE_LARGE" />
</application>
</manifest>
PackageManager-Funktionen für XR-Apps
Wenn Sie Apps über den Google Play Store vertreiben, können Sie im App-Manifest erforderliche Hardware- oder Softwarefunktionen angeben. Mit dem Element uses-feature kann der Google Play Store die den Nutzern angezeigten Apps entsprechend filtern.
Die folgenden Funktionen sind spezifisch für XR-differenzierte 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 ein vorhandenes mobiles APK einbindet und im mobilen Release-Track veröffentlicht wird, setzen Sie das Attribut android:required auf false:
<!-- 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, setzen Sie das Attribut android:required auf true:
<!-- 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.hardware.xr.input.controller
Diese Funktion gibt an, dass die App Eingaben von einem hochpräzisen Motion-Controller mit 6 DoF (Degrees of Freedom, Freiheitsgrade) benötigt, um richtig zu funktionieren. Wenn deine App Controller unterstützt und ohne sie nicht funktioniert, setze den Wert auf true.
Wenn deine App Controller unterstützt, aber auch ohne sie funktioniert, setze den Wert auf false.
<!-- 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
Dieses Flag gibt an, dass die App ein hochpräzises Handtracking benötigt, um richtig zu funktionieren, einschließlich Position, Ausrichtung und Geschwindigkeit der Gelenke in der Hand des Nutzers. Wenn Ihre App Handtracking unterstützt und ohne diese Funktion nicht funktioniert, legen Sie den Wert auf true fest. Wenn deine App Handtracking unterstützt, aber auch ohne funktioniert, lege 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, um richtig zu funktionieren. Wenn deine App Eye-Tracking für Eingaben unterstützt und ohne diese Funktion nicht funktioniert, setze den Wert auf true. Wenn Ihre App Eye-Tracking für die Eingabe unterstützt, aber auch ohne funktioniert, legen Sie den Wert auf false fest.
<!-- 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" />
android.hardware.xr.input.face_tracking
Dieses Flag gibt an, dass die App Hardware für die Mimik-Erkennung benötigt, um richtig zu funktionieren. Wenn Ihre App die Mimik-Erkennung unterstützt und ohne sie nicht funktioniert, setzen Sie den Wert auf true. Wenn Ihre App die Mimik-Erkennung unterstützt, aber auch ohne sie funktioniert, legen Sie false fest.
<!-- Sets android:required to true, indicating that your app can't function on devices without face tracking. -->
<uses-feature android:name="android.hardware.xr.input.face_tracking" android:required="true" />
Überlegungen zur Kompatibilität von App-Manifesten für Apps für Mobilgeräte und große Bildschirme
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.
Führen Sie adb
shell pm list features aus, um eine Liste der für ein Gerät aktivierten Funktionen abzurufen.
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
Verbindung
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 (Legacy)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Widgets
Nächste Schritte
Nachdem du das Manifest deiner App konfiguriert und wichtige Informationen gelesen hast, kannst du dich mit den Möglichkeiten vertraut machen, wie du immersive Erlebnisse schaffen kannst:
- Android-Apps mit XR in 3D darstellen
- Räumliche Benutzeroberfläche mit Jetpack Compose for XR entwickeln
- Material Design für die räumliche Benutzeroberfläche implementieren
- Räumliche Umgebungen zu Ihrer App hinzufügen
- Entitäten erstellen, steuern und verwalten