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 standard aperti come OpenXR e WebXR. Tutte le app compatibili per dispositivi mobili o con schermi di grandi dimensioni potranno essere installate sui visori XR dal Play Store. Esamina i 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
  • Configurazione del file manifest dell'app
  • Considerazioni sulla compatibilità del file manifest dell'app
  • Informazioni sulle autorizzazioni per Android XR
  • Garantire la qualità delle app per Android XR
  • Pacchettizzazione e distribuzione dell'app per Android XR

Seleziona 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 per Android XR progettate per sfruttare le funzionalità uniche dei dispositivi XR. Inizia con questo SDK se vuoi eseguire una delle seguenti operazioni:

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

Se hai già dimestichezza 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 immersive.

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

Unity

Unity Engine è un motore di sviluppo 3D in tempo reale che consente a artisti, designer e sviluppatori di collaborare per creare esperienze immersive e interattive. Il supporto di Android XR di Unity ti offre un elevato livello di controllo sulle esperienze 3D che sviluppi, sfruttando al contempo il supporto di OpenXR e l'ecosistema di sviluppatori di Unity.

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

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

OpenXR

OpenXR è uno standard aperto esente da royalty che può essere utilizzato per creare esperienze XR multipiattaforma ad alte prestazioni. Android XR supporta OpenXR 1.0 e 1.1 e stiamo ampliando 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 ai 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.

Progettare per XR

L'XR espande la superficie di progettazione oltre gli schermi piatti tradizionali; puoi progettare esperienze immersive che fondono la realtà fisica e quella virtuale. Che tu stia sviluppando un'esperienza completamente nuova o aggiungendo elementi immersivi a un'app esistente, la guida al design per Android XR può aiutarti a iniziare.

Configura il file manifest dell'app

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

Per le app differenziate per realtà virtuale e realtà aumentata, il file manifest deve contenere i seguenti elementi e attributi:

Proprietà PROPERTY_ACTIVITY_XR_START_MODE

La proprietà android:name="android.window.PROPERTY_ACTIVITY_XR_START_MODE" consente al sistema di sapere 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 per le app create con l'SDK Jetpack XR)

Usa questa modalità di avvio per avviare l'app nello spazio Home. In Home Space, più app possono essere eseguite affiancate, in modo che gli utenti possano svolgere più attività contemporaneamente. Qualsiasi app Android per dispositivi mobili o con schermi di grandi dimensioni può funzionare in Spazio Casa, 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 per le app create con l'SDK Jetpack XR)

Usa questa modalità di avvio per avviare l'app in Spazio intero. In Spazio intero viene eseguita una sola app alla volta, senza limiti di spazio e tutte le altre app vengono 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 Spazio intero e devono utilizzare la modalità di avvioXR_ACTIVITY_START_MODE_FULL_SPACE_UNMANAGED. Lo spazio completo non gestito 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>

Funzionalità di PackageManager per le app XR

Quando distribuisci le app tramite il Google Play Store, puoi specificare le funzionalità hardware o software richieste nel file 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 XR.

android.software.xr.immersive

Se la tua app ha come target la piattaforma Android XR e viene eseguita solo su piattaforme che supportano XR, imposta il valore su true. Se la tua app include alcune funzionalità ottimizzate per la realtà virtuale, ma può essere eseguita anche su dispositivi non XR, imposta il valore su false.

Per le app create con OpenXR o Unity è obbligatorio impostare questo valore su true.

<uses-feature android:name="android.software.xr.immersive" android:required="true" />

android.hardware.xr.input.controller

Questa funzionalità indica che l'app richiede l'input di un controller di movimento a 6 gradi di libertà (DoF) 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 anche senza, imposta il valore su false.

<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 monitoraggio delle mani ad alta fedeltà per funzionare correttamente, inclusa la posizione, l'orientamento e la velocità delle articolazioni della mano dell'utente. Se la tua app supporta il rilevamento delle mani e non può funzionare senza, imposta il valore su true. Se la tua app supporta il rilevamento delle mani, ma può funzionare anche senza, imposta il valore su false.

<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 il monitoraggio oculare ad alta fedeltà per il corretto funzionamento dell'input. Se la tua app supporta il monitoraggio 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 anche senza, imposta il valore su false.

<uses-feature android:name="android.hardware.xr.input.eye_tracking" android:required="true" />

Considerazioni sulla compatibilità del file manifest dell'app per le app per dispositivi mobili e con display 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 delle 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 XR

Come per le app su dispositivi mobili e altri fattori di forma, alcune funzionalità offerte dalle app XR potrebbero richiedere che la tua app dichiarante 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 l'articolo Autorizzazioni su Android e le best practice per le autorizzazioni.

Autorizzazioni per le funzionalità XR

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

android.permission.EYE_TRACKING

Casi d'uso che richiedono questa autorizzazione

Rappresentazione della posizione e dell'orientamento degli occhi dell'utente, ai fini degli avatar

Funzionalità dell'SDK Jetpack XR che richiedono questa autorizzazione

n/a

Estensioni OpenXR che richiedono questa autorizzazione

XR_ANDROID_avatar_eyes

Funzionalità di Unity che richiedono questa autorizzazione

Android XR: AR Face

android.permission.EYE_TRACKING_FINE

Casi d'uso che richiedono questa autorizzazione

Input e interazioni con il puntatore oculare

Funzionalità dell'SDK Jetpack XR che richiedono questa autorizzazione

n/a

Estensioni OpenXR che richiedono questa autorizzazione

XR_EXT_eye_gaze_interaction

Funzionalità di Unity che richiedono questa autorizzazione

Eye Gaze Interaction

android.permission.FACE_TRACKING

Casi d'uso che richiedono questa autorizzazione

Monitoraggio e rendering delle espressioni facciali

Funzionalità dell'SDK Jetpack XR che richiedono questa autorizzazione

n/a

Estensioni OpenXR che richiedono questa autorizzazione

XR_ANDROID_face_tracking

Funzionalità di Unity che richiedono questa autorizzazione

XRFaceTrackingFeature

android.permission.HAND_TRACKING

Casi d'uso che richiedono questa autorizzazione

Monitoraggio delle posizioni delle articolazioni delle mani e delle velocità angolari e lineari; utilizzo di una rappresentazione mesh delle mani dell'utente

Funzionalità dell'SDK Jetpack XR che richiedono questa autorizzazione

n/a

Estensioni OpenXR che richiedono questa autorizzazione

XR_ANDROID_hand_mesh

XR_EXT_hand_tracking

Funzionalità di Unity che richiedono questa autorizzazione

XR Hands

XRHandMeshFeature

android.permission.SCENE_UNDERSTANDING

Casi d'uso che richiedono questa autorizzazione

Stima della luce; proiezione del passthrough sulle superfici del mesh; esecuzione di raycast contro gli elementi tracciabili nell'ambiente; monitoraggio del piano; monitoraggio degli oggetti; lavoro con la profondità per l'occlusione e il test di hit; ancore permanenti.

Funzionalità dell'SDK Jetpack XR che richiedono questa autorizzazione

Rilevamento aerei

Test di corrispondenza

Persistenza dell'ancora

Estensioni OpenXR che richiedono questa autorizzazione

XR_ANDROID_anchor_persistence

XR_ANDROID_depth_texture

XR_ANDROID_light_estimation

XR_ANDROID_composition_layer_passthrough_mesh

XR_ANDROID_raycast

XR_ANDROID_trackables

XR_ANDROID_trackables_object

Funzionalità di Unity che richiedono questa autorizzazione

XRAnchorFeature

XRDepthTextureFeature

XRLightEstimationFeature

XRPassthroughFeature

XRTrackableFeature

XRObjectTrackingFeature

Garantire la qualità delle app per Android XR

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

Pacchettizzare e distribuire l'app per Android XR

Android XR offre un'ampia gamma di app ed esperienze per le cuffie 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, sui canali di pubblicazione, sulla preparazione di app bundle per Android e sulle limitazioni delle dimensioni delle app.