Présentation de la compilation pour Android XR

Android XR est une extension de la plate-forme et de l'écosystème Android. Le SDK Android XR est conçu pour vous permettre de créer des applications XR à l'aide de frameworks et d'outils Android connus, ou à l'aide de normes ouvertes telles qu'OpenXR et WebXR. Toutes les applications mobiles ou pour grand écran compatibles pourront être installées sur les casques XR depuis le Play Store. Consultez les considérations relatives à la compatibilité pour savoir si votre application est compatible.

Ce guide aborde les points suivants :

  • Sélectionner vos outils et technologies de développement
  • Concevoir des applications pour Android XR
  • Configurer le fichier manifeste de votre application
  • Points à prendre en compte concernant la compatibilité du fichier manifeste de l'application
  • Comprendre les autorisations pour Android XR
  • Vérifier la qualité des applications Android XR
  • Mettre en package et distribuer votre application pour Android XR

Sélectionnez vos outils et technologies de développement

Lorsque vous créez une application pour Android XR, vous pouvez choisir parmi les plates-formes et technologies de développement suivantes :

SDK Jetpack XR

Le SDK Jetpack XR contient des bibliothèques Jetpack Android XR conçues pour exploiter les fonctionnalités uniques des appareils XR. Commencez par ce SDK si vous souhaitez effectuer l'une des opérations suivantes :

  • Optimiser ou améliorer une application mobile ou pour tablette Android existante
  • Créer une application Android XR à l'aide d'Android Studio et de Jetpack

Si vous êtes déjà à l'aise avec le développement Android Jetpack, le SDK Jetpack XR est fait pour vous. Il est conçu pour s'intégrer de manière fluide à ces frameworks et bibliothèques, et vous permet d'utiliser vos connaissances existantes pour créer des expériences XR immersives.

En savoir plus sur le développement avec le SDK Jetpack XR

Unity

Unity Engine est un moteur de développement 3D en temps réel qui permet aux artistes, aux concepteurs et aux développeurs de collaborer pour créer des expériences immersives et interactives. La compatibilité d'Unity avec Android XR vous offre un haut niveau de contrôle sur les expériences 3D que vous développez, tout en bénéficiant de la compatibilité établie d'Unity avec OpenXR et de son écosystème de développeurs.

Si vous avez déjà créé une expérience XR avec Unity ou si vous êtes familiarisé avec le développement Unity, commencez par cette option.

En savoir plus sur le développement avec Unity pour Android XR

OpenXR

OpenXR est une norme ouverte et sans redevance qui peut être utilisée pour créer des expériences XR multiplates-formes hautes performances. Android XR est compatible avec OpenXR 1.0 et 1.1, et nous étendons la spécification avec de nouvelles extensions pour Android XR. Étant donné qu'Android XR est basé sur des normes ouvertes, les outils de développement compatibles avec OpenXR et Android devraient l'être également avec Android XR.

En savoir plus sur la compatibilité OpenXR pour Android XR

WebXR

WebXR vous permet de créer des expériences immersives pour le Web. Il permet d'accéder aux appareils de VR et de RA dans les navigateurs Web compatibles, tels que Chrome sur Android XR.

Choisissez cette option si vous souhaitez créer une expérience XR pour le Web ou ajouter des fonctionnalités XR à une application Web. Les expériences WebXR existantes fonctionneront également sur Android XR.

En savoir plus sur la création d'applications Web avec WebXR

Concevoir pour la XR

La XR étend la surface de conception au-delà des écrans plats traditionnels. Vous pouvez concevoir des expériences immersives qui mélangent réalité physique et virtuelle. Que vous créiez une toute nouvelle expérience ou que vous ajoutiez des éléments immersifs à une application existante, le guide de conception pour Android XR peut vous aider à vous lancer.

Configurer le fichier manifeste de votre application

Comme pour les autres projets d'applications Android, votre application Android XR doit disposer d'un fichier AndroidManifest.xml avec des paramètres de fichier manifeste spécifiques. Le fichier manifeste fournit aux outils de compilation Android, au système d'exploitation Android et à Google Play des informations essentielles sur votre application. Pour en savoir plus, consultez le guide de présentation du fichier manifeste d'application.

Pour les applications différenciées XR, votre fichier manifeste doit contenir les éléments et attributs suivants :

Propriété PROPERTY_XR_ACTIVITY_START_MODE

La propriété android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" indique au système qu'une activité doit être lancée dans un mode spécifique lorsqu'elle démarre.

Trois valeurs sont possibles pour cette propriété :

  • XR_ACTIVITY_START_MODE_HOME_SPACE (SDK Jetpack XR uniquement)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_MANAGED (SDK Jetpack XR uniquement)
  • XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED (OpenXR uniquement)

XR_ACTIVITY_START_MODE_HOME_SPACE

(Applications créées avec le SDK Jetpack XR uniquement)

Utilisez ce mode de démarrage pour lancer votre application dans l'espace Home. Dans l'espace Maison, plusieurs applications peuvent s'exécuter côte à côte, ce qui permet aux utilisateurs d'effectuer plusieurs tâches à la fois. Toute application Android pour mobile ou grand écran peut fonctionner dans l'espace restreint, ainsi que les applications XR conçues à l'aide du SDK Jetpack XR.

<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

(Applications créées avec le SDK Jetpack XR uniquement)

Utilisez ce mode de démarrage pour lancer votre application en mode d'affichage complet. En mode Plein écran, une seule application s'exécute à la fois, sans limites spatiales, et toutes les autres applications sont masquées.


<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

(Applications créées avec OpenXR uniquement)

Les applications conçues avec OpenXR se lancent en mode d'affichage complet et doivent utiliser le mode de démarrage XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. L'espace complet non géré indique à Android XR que l'application utilise OpenXR.


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

La propriété android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" indique que l'application doit être lancée avec un type de limite spécifique. Votre application doit spécifier XR_BOUNDARY_TYPE_LARGE si elle est conçue pour permettre aux utilisateurs de se déplacer dans leur espace physique. Si vous spécifiez XR_BOUNDARY_TYPE_NO_RECOMMENDATION, aucune recommandation n'est fournie pour le type de limite de sécurité. Le système utilise donc le type déjà en place.

<manifest ... >

   <application ... >
       <property
           android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED"
           android:value="XR_BOUNDARY_TYPE_LARGE" />
   </application>
</manifest>

<uses-native-library> OpenXR

(Applications créées avec OpenXR uniquement)

Les applications OpenXR doivent déclarer l'utilisation de la bibliothèque OpenXR native pour charger correctement son environnement d'exécution. Sans cette déclaration, l'environnement d'exécution ne pourra pas se charger.

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

Fonctionnalités de PackageManager pour les applications XR

Lorsque vous distribuez des applications via le Google Play Store, vous pouvez spécifier les fonctionnalités matérielles ou logicielles requises dans le fichier manifeste de l'application. L'élément uses-feature permet au Play Store de filtrer de manière appropriée les applications affichées aux utilisateurs.

Les fonctionnalités suivantes sont spécifiques aux applications différenciées pour la XR.

android.software.xr.api.spatial

Les applications créées à l'aide du SDK Jetpack XR doivent inclure cette fonctionnalité dans le fichier manifeste de l'application. La valeur que vous définissez pour l'attribut android:required dépend de la piste de publication de votre application.

Si votre application regroupe des fonctionnalités ou du contenu XR différenciés dans un APK mobile existant et qu'elle est publiée sur le canal de publication mobile, définissez l'attribut android:required sur 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" />

Si votre application est conçue spécifiquement pour les appareils compatibles avec la XR et qu'elle est publiée dans le canal de publication dédié Android XR, définissez l'attribut android:required sur 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.software.xr.api.openxr

Les applications ciblant la plate-forme Android XR et conçues avec OpenXR ou Unity doivent inclure cette fonctionnalité dans le fichier manifeste de l'application, avec l'attribut android:required défini sur true.

Les applications qui utilisent le package d'extensions Android XR pour Unity version 1.0.0 ou ultérieure, ou le package Unity OpenXR : Android XR version 0.5.0-exp.1 ou ultérieure n'ont pas besoin d'ajouter manuellement cet élément au fichier manifeste de l'application. Ces deux packages injecteront cet élément dans le fichier manifeste de l'application pour vous.

Les appareils peuvent spécifier une version pour cette fonctionnalité, qui indique la version la plus récente d'OpenXR compatible avec l'appareil. Les 16 bits supérieurs représentent le nombre principal, et les 16 bits inférieurs représentent le nombre mineur. Par exemple, pour spécifier OpenXR version 1.1, la valeur doit être définie sur "0x00010001".

Les applications peuvent utiliser la version de la fonctionnalité pour indiquer la version minimale d'OpenXR requise par l'application. Par exemple, si votre application nécessite la compatibilité avec OpenXR version 1.1, déclarez la fonctionnalité suivante :

<uses-feature android:name="android.software.xr.api.openxr"
    android:version="0x00010001"
    android:required="true" />

android.hardware.xr.input.controller

Cette fonctionnalité indique que l'application nécessite une entrée d'un contrôleur de mouvement 6 DoF (degrés de liberté) de haute précision pour fonctionner correctement. Si votre application est compatible avec les manettes et ne peut pas fonctionner sans elles, définissez la valeur sur true. Si votre application est compatible avec les manettes, mais peut fonctionner sans, définissez-la sur 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

Cet indicateur indique que l'application nécessite un suivi des mains haute fidélité pour fonctionner correctement, y compris la position, l'orientation et la vitesse des articulations de la main de l'utilisateur. Si votre application est compatible avec le suivi des mains et ne peut pas fonctionner sans, définissez la valeur sur true. Si votre application est compatible avec le suivi des mains, mais peut fonctionner sans, définissez-le sur false.

<!-- 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

Cet indicateur indique que l'application nécessite un suivi oculaire haute fidélité pour que les entrées fonctionnent correctement. Si votre application est compatible avec le suivi du regard pour la saisie et ne peut pas fonctionner sans, définissez la valeur sur true. Si votre application est compatible avec le suivi du regard pour la saisie, mais peut fonctionner sans, définissez-le sur 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" />

Points à prendre en compte concernant la compatibilité du fichier manifeste de l'application pour les applications mobiles et pour grand écran

Comme décrit dans la section Fonctionnalités du gestionnaire de packages pour les applications XR, les applications déclarent qu'elles utilisent une fonctionnalité en la déclarant dans un élément <uses-feature> du fichier manifeste de l'application. Il est possible que certaines fonctionnalités, comme la téléphonie ou le GPS, ne soient pas compatibles avec tous les appareils.

Fonctionnalités non compatibles

Le Google Play Store filtre les applications disponibles pour l'installation sur un appareil à l'aide des déclarations de fonctionnalités Android suivantes.

Matériel de la caméra

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

Connectivité

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configuration de l'appareil

android.hardware.ram.low

Configuration du facteur de forme

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

Entrée

android.hardware.consumerir

android.software.input_methods

Position

android.hardware.location.gps

Technologie NFC (communication en champ proche)

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configuration de la sécurité et matériel

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

Capteurs

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

Configuration logicielle

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

Téléphonie

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

Réalité virtuelle (ancienne)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widgets

android.software.app_widgets

Comprendre les autorisations pour la XR

Comme pour les applications sur les appareils mobiles et d'autres facteurs de forme, certaines fonctionnalités proposées par les applications XR peuvent nécessiter que votre application déclare des autorisations dans le fichier AndroidManifest de votre application. Dans le cas d'autorisations dangereuses, votre application peut avoir besoin de demander des autorisations d'exécution. Pour en savoir plus, consultez Autorisations sur Android et les bonnes pratiques concernant les autorisations.

Les applications XR peuvent utiliser les autorisations suivantes. Toutes les autorisations de cette section sont considérées comme dangereuses. Vous devez donc les déclarer dans le fichier manifeste de votre application et les demander au moment de l'exécution.

android.permission.EYE_TRACKING_COARSE

Représente la pose, l'état et l'orientation des yeux de l'utilisateur, par exemple pour une utilisation avec des avatars. Utilisez cette autorisation lorsque des données de suivi oculaire de faible précision sont nécessaires.

SDK Jetpack XR

N/A

Extensions OpenXR

Fonctionnalités Unity

android.permission.EYE_TRACKING_FINE

Le regard pour la sélection, la saisie et les interactions.

SDK Jetpack XR

N/A

Extensions OpenXR

Fonctionnalités Unity

android.permission.FACE_TRACKING

Suivi et rendu des expressions faciales.

SDK Jetpack XR

N/A

Extensions OpenXR

Fonctionnalités Unity

android.permission.HAND_TRACKING

Suivi des poses des articulations de la main et des vitesses angulaires et linéaires ; utilisation d'une représentation en maillage des mains de l'utilisateur.

android.permission.SCENE_UNDERSTANDING_COARSE

Estimation de la luminosité, projection du mode Passthrough sur les surfaces maillées, exécution de raycasts sur les éléments à suivre dans l'environnement, suivi des plans, suivi des objets, ancres persistantes.

android.permission.SCENE_UNDERSTANDING_FINE

Texture de profondeur.

SDK Jetpack XR

N/A

Extensions OpenXR

Fonctionnalités Unity

Vérifier la qualité des applications Android XR

Pour vérifier que votre application offre une expérience utilisateur de qualité, consultez nos Consignes relatives à la qualité des applications Android XR.

Empaqueter et distribuer votre application pour Android XR

Android XR propose un large éventail d'applications et d'expériences pour les casques XR via Google Play. Le guide pour compresser et distribuer des applications pour Android XR vous explique comment commencer à utiliser le Play Store et la Play Console, comment publier des canaux, comment préparer des Android App Bundles et quelles sont les restrictions concernant la taille des applications.


OpenXR™ et le logo OpenXR sont des marques déposées appartenant à The Khronos Group Inc. et sont enregistrées en Chine, dans l'Union européenne, au Japon et au Royaume-Uni.