Panoramica della compilazione per Android XR

Android XR è un'estensione della piattaforma e dell'ecosistema Android. L'SDK Android XR è progettato per consentirti di creare app XR utilizzando framework e strumenti Android familiari o utilizzando standard aperti come OpenXR e WebXR. Tutte le app per dispositivi mobili o per schermi di grandi dimensioni compatibili saranno disponibili per l'installazione sui visori XR dal Play Store. Esamina le considerazioni sulla compatibilità per verificare se la tua app è compatibile.

Questa guida illustra le seguenti aree:

  • Selezione di strumenti e tecnologie di sviluppo
  • Progettare app per Android XR
  • Configurare il file manifest dell'app
  • Considerazioni sulla compatibilità del file manifest dell'app
  • Informazioni sulle autorizzazioni per Android XR
  • Verifica della qualità delle app Android XR
  • Pacchettizzazione e distribuzione dell'app per Android XR

Selezionare gli strumenti e le tecnologie di sviluppo

Quando crei un'app per Android XR, puoi scegliere tra le seguenti piattaforme e tecnologie di sviluppo:

SDK Jetpack XR

L'SDK Jetpack XR contiene librerie Jetpack Android XR create per sfruttare le funzionalità uniche dei dispositivi XR. Inizia con questo SDK se vuoi fare una delle seguenti operazioni:

  • Ottimizzare o migliorare un'app mobile o per tablet Android esistente
  • Crea una nuova app Android XR utilizzando Android Studio e Jetpack

Se hai già familiarità con lo sviluppo con Android Jetpack, l'SDK Jetpack XR è la soluzione ideale per te. È progettato per integrarsi perfettamente con questi framework e librerie e ti consente di utilizzare le conoscenze esistenti per creare esperienze XR coinvolgenti.

Scopri di più sullo sviluppo con l'SDK Jetpack XR.

Unity

Unity Engine è un motore di sviluppo 3D in tempo reale che consente ad artisti, designer e sviluppatori di collaborare per creare esperienze coinvolgenti e interattive. Il supporto di Android XR di Unity ti offre un elevato livello di controllo sulle esperienze 3D che sviluppi, beneficiando al contempo del supporto OpenXR e dell'ecosistema di sviluppatori consolidati di Unity.

Se hai già creato un'esperienza XR con Unity o se hai familiarità con lo sviluppo Unity, inizia con questa opzione.

Scopri di più sullo sviluppo con Unity per Android XR.

OpenXR

OpenXR è uno standard aperto e privo di royalty che può essere utilizzato per creare esperienze XR multipiattaforma ad alte prestazioni. Android XR supporta OpenXR 1.0 e 1.1 e stiamo espandendo la specifica con nuove estensioni per Android XR. Poiché Android XR è basato su standard aperti, gli strumenti di sviluppo che supportano OpenXR e Android dovrebbero essere compatibili con Android XR.

Scopri di più sul supporto di OpenXR per Android XR.

WebXR

WebXR ti consente di creare esperienze immersive per il web. Fornisce l'accesso a dispositivi VR e AR in browser web compatibili come Chrome su Android XR.

Inizia con questa opzione se vuoi creare un'esperienza XR per il web o se vuoi aggiungere funzionalità XR a un'app web. Le esperienze WebXR esistenti funzioneranno anche su Android XR.

Scopri di più sulla creazione di app web con WebXR.

Design per XR

La XR espande la superficie di progettazione oltre i tradizionali schermi piatti. Puoi progettare esperienze immersive che combinano realtà fisica e virtuale. Che tu stia creando un'esperienza completamente nuova o aggiungendo elementi immersivi a un'app esistente, la guida alla progettazione per Android XR può aiutarti a iniziare.

Configurare il file manifest dell'app

Come per gli altri progetti di app per Android, la tua app Android XR deve avere un file AndroidManifest.xml con impostazioni manifest specifiche. Il file manifest descrive informazioni essenziali sulla tua app per gli strumenti di compilazione Android, il sistema operativo Android e Google Play. Per ulteriori informazioni, consulta la guida alla panoramica del file manifest dell'app.

Per le app differenziate per XR, il file manifest deve contenere i seguenti elementi e attributi:

Proprietà PROPERTY_XR_ACTIVITY_START_MODE

La proprietà android:name="android.window.PROPERTY_XR_ACTIVITY_START_MODE" comunica al sistema che un'attività deve essere avviata in una modalità specifica quando viene avviata.

Esistono tre valori possibili per questa proprietà:

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

XR_ACTIVITY_START_MODE_HOME_SPACE

(Solo app create con l'SDK Jetpack XR)

Usa questa modalità di avvio per lanciare l'app in Home Space. In Home Space, più app possono essere eseguite una accanto all'altra, in modo che gli utenti possano svolgere più attività contemporaneamente. Qualsiasi app per Android per dispositivi mobili o schermi di grandi dimensioni può funzionare in Home Space, così come le app XR create utilizzando l'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

(Solo app create con l'SDK Jetpack XR)

Utilizza questa modalità di avvio per lanciare l'app in Full Space. In Spazio completo, viene eseguita un'app alla volta, senza limiti di spazio, e tutte le altre app sono nascoste.


<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

(Solo app create con OpenXR)

Le app create con OpenXR vengono avviate in Full Space e devono utilizzare la modalità di avvio XR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. Unmanaged Full Space indica ad Android XR che l'app utilizza 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 proprietà android:name="android.window.PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED" indica che l'applicazione deve essere avviata con un tipo specifico di confine. La tua app deve specificare XR_BOUNDARY_TYPE_LARGE se è progettata per consentire agli utenti di muoversi nel loro spazio fisico. La specifica di XR_BOUNDARY_TYPE_NO_RECOMMENDATION non fornisce suggerimenti per il tipo di perimetro di sicurezza, pertanto il sistema utilizza il tipo già in uso.

<manifest ... >

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

<uses-native-library> OpenXR

(Solo app create con OpenXR)

Le applicazioni OpenXR devono dichiarare l'utilizzo della libreria OpenXR nativa per caricare correttamente il runtime. Senza questa dichiarazione, il runtime non verrà caricato.

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

Funzionalità di PackageManager per le app XR

Quando distribuisci app tramite il Google Play Store, puoi specificare le funzionalità hardware o software richieste nel manifest dell'app. L'elemento uses-feature consente al Play Store di filtrare in modo appropriato le app mostrate agli utenti.

Le seguenti funzionalità sono specifiche per le app differenziate per XR.

android.software.xr.api.spatial

Le app create utilizzando l'SDK Jetpack XR devono includere questa funzionalità nel manifest dell'app. Il valore che imposti per l'attributo android:required dipende dalla traccia di rilascio della tua app.

Se i tuoi app bundle includono funzionalità o contenuti differenziati per XR in un APK mobile esistente e vengono pubblicati nel canale di rilascio mobile, imposta l'attributo android:required su 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" />

Se la tua app è creata appositamente per i dispositivi compatibili con XR ed è pubblicata nel canale di rilascio dedicato Android XR, imposta l'attributo android:required su 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

Le app che hanno come target la piattaforma Android XR e sono create con OpenXR o Unity devono includere questa funzionalità nel manifest dell'app con l'attributo android:required impostato su true.

Le app che utilizzano il pacchetto di estensioni Android XR per Unity versione 1.0.0 o successive o il pacchetto Unity OpenXR: Android XR versione 0.5.0-exp.1 o successive non devono aggiungere manualmente questo elemento al manifest dell'app. Questi due pacchetti inseriranno questo elemento nel manifest dell'app per te.

I dispositivi possono specificare una versione per questa funzionalità, che indica la versione più recente di OpenXR supportata dal dispositivo. I 16 bit più significativi rappresentano il numero principale, mentre i 16 bit meno significativi rappresentano il numero secondario. Ad esempio, per specificare la versione 1.1 di OpenXR, il valore deve essere impostato su "0x00010001".

Le app possono utilizzare la versione della funzionalità per indicare una versione minima di OpenXR richiesta dall'app. Ad esempio, se la tua app richiede il supporto di OpenXR versione 1.1, dichiara la seguente funzionalità:

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

android.hardware.xr.input.controller

Questa funzionalità indica che l'app richiede l'input di un controller di movimento a 6DoF (gradi di libertà) di alta precisione per funzionare correttamente. Se la tua app supporta i controller e non può funzionare senza, imposta il valore su true. Se la tua app supporta i controller ma può funzionare senza, impostala su 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

Questo flag indica che l'app richiede il tracciamento della mano ad alta fedeltà per funzionare correttamente, inclusi posizione, orientamento e velocità delle articolazioni della mano dell'utente. Se la tua app supporta il monitoraggio della mano e non può funzionare senza di esso, imposta il valore su true. Se la tua app supporta il monitoraggio della mano, ma può funzionare senza, impostalo su 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

Questo flag indica che l'app richiede un eye tracking ad alta fedeltà per l'input per funzionare correttamente. Se la tua app supporta il tracciamento oculare per l'input e non può funzionare senza, imposta il valore su true. Se la tua app supporta il monitoraggio oculare per l'input, ma può funzionare senza, impostalo su 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" />

Considerazioni sulla compatibilità del file manifest dell'app per app mobile e per schermi di grandi dimensioni

Come descritto nella sezione Funzionalità di PackageManager per le app XR, le app dichiarano di utilizzare una funzionalità dichiarandola in un elemento <uses-feature> nel file manifest dell'app. Alcune funzionalità, come la telefonia o il GPS, potrebbero non essere compatibili con tutti i dispositivi.

Funzionalità non supportate

Il Google Play Store filtra le applicazioni disponibili per l'installazione su un dispositivo utilizzando le seguenti dichiarazioni di funzionalità Android.

Hardware della videocamera

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

Connettività

android.hardware.ethernet

android.hardware.uwb

android.hardware.ipsec_tunnel_migration

Configurazione del dispositivo

android.hardware.ram.low

Configurazione del fattore di forma

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

Input

android.hardware.consumerir

android.software.input_methods

Posizione

android.hardware.location.gps

NFC (Near Field Communication)

android.hardware.nfc

android.hardware.nfc.ese

android.hardware.nfc.hce

android.hardware.nfc.hcef

android.hardware.nfc.uicc

android.hardware.nfc.beam

Configurazione di sicurezza e 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

Sensori

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

Configurazione software

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

Telefonia

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

Realtà virtuale (legacy)

android.hardware.vr.headtracking

android.hardware.vr.high_performance

android.software.vr.mode

Widget

android.software.app_widgets

Informazioni sulle autorizzazioni per la realtà virtuale e aumentata

Come le app su dispositivi mobili e altri fattori di forma, alcune funzionalità offerte dalle app XR potrebbero richiedere alla tua app di dichiarare le autorizzazioni nel file AndroidManifest dell'app. Nel caso di autorizzazioni pericolose, la tua app potrebbe dover richiedere autorizzazioni di runtime. Per informazioni più dettagliate, leggi Autorizzazioni su Android e best practice per le autorizzazioni.

Le seguenti autorizzazioni possono essere utilizzate dalle app XR. Tutte le autorizzazioni in questa sezione sono considerate pericolose, pertanto devi dichiararle nel manifest dell'app e richiederle in fase di runtime.

android.permission.EYE_TRACKING_COARSE

Rappresentano la posa, lo stato e l'orientamento degli occhi dell'utente, ad esempio per l'utilizzo con gli avatar. Utilizza questa autorizzazione quando sono necessari dati di eye tracking a bassa precisione.

SDK Jetpack XR

n/a

Estensioni OpenXR

Funzionalità di Unity

android.permission.EYE_TRACKING_FINE

Controllo oculare per selezione, input e interazioni.

SDK Jetpack XR

n/a

Estensioni OpenXR

Funzionalità di Unity

android.permission.FACE_TRACKING

Tracciamento e rendering delle espressioni facciali.

SDK Jetpack XR

n/a

Estensioni OpenXR

Funzionalità di Unity

android.permission.HAND_TRACKING

Monitoraggio delle pose delle articolazioni della mano e delle velocità angolari e lineari; utilizzo di una rappresentazione a mesh delle mani dell'utente.

android.permission.SCENE_UNDERSTANDING_COARSE

Stima della luce; proiezione di passthrough su superfici mesh; esecuzione di raycast rispetto agli elementi tracciabili nell'ambiente; tracciamento dei piani; tracciamento degli oggetti; ancore persistenti.

android.permission.SCENE_UNDERSTANDING_FINE

Texture di profondità.

SDK Jetpack XR

n/a

Estensioni OpenXR

Funzionalità di Unity

Verificare la qualità delle app Android XR

Per verificare che la tua app offra un'esperienza utente ottimale, consulta le nostre norme sulla qualità delle app per Android XR.

Pacchettizzare e distribuire la tua app per Android XR

Android XR porta una vasta gamma di app ed esperienze sui visori XR tramite Google Play. Nella guida per il packaging e la distribuzione di app per Android XR, troverai informazioni su come iniziare a utilizzare il Play Store e Play Console, pubblicare tracce, preparare gli Android App Bundle e le limitazioni relative alle dimensioni delle app.


OpenXR™ e il logo OpenXR sono marchi di proprietà di The Khronos Group Inc. e sono registrati come marchi in Cina, nell'Unione Europea, in Giappone e nel Regno Unito.