Dopo aver installato e configurato Android Studio, creato un progetto e configurato l'SDK Jetpack XR, puoi iniziare a creare esperienze coinvolgenti.
Prima di iniziare a esplorare tutti i modi in cui puoi creare, rivedi le informazioni e completa le attività nelle sezioni seguenti per assicurarti che la tua app sia configurata per lo sviluppo di XR immersiva.
Configura 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 le informazioni essenziali sulla tua app agli strumenti di compilazione Android, al
sistema operativo Android e a 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"
indica al sistema che un'attività deve essere avviata in una modalità specifica quando
viene avviata.
Questa proprietà ha i seguenti valori:
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_HOME_SPACE
Usa questa modalità di avvio per lanciare l'app nello spazio Home. Nello spazio Home, 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 Spazio Home, 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
Utilizza questa modalità di avvio per lanciare l'app in Schermo intero. 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>
Proprietà PROPERTY_XR_BOUNDARY_TYPE_RECOMMENDED
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
consigli per il tipo di perimetro di sicurezza, quindi 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>
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 dal
canale 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 e viene pubblicata nel
canale di rilascio dedicato ad 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.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 rilevamento 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
questa funzionalità, 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.
Per visualizzare un elenco delle funzionalità abilitate per un dispositivo, esegui adb
shell pm list features.
Funzionalità non supportate
I filtri del Google Play Store disponibili per l'installazione su un dispositivo filtrano le applicazioni utilizzando le seguenti dichiarazioni di funzionalità di Android.
Hardware della videocamera
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
Connettività
android.hardware.ipsec_tunnel_migration
Configurazione del dispositivo
Configurazione del fattore di forma
android.hardware.type.automotive
android.hardware.type.embedded
android.hardware.type.television
android.software.leanback_only
Input
android.software.input_methods
Posizione
NFC (Near Field Communication)
Configurazione di sicurezza e 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
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.relative_humidity
android.hardware.sensor.stepcounter
android.hardware.sensor.stepdetector
Configurazione software
android.software.connectionservice
android.software.expanded_picture_in_picture
android.software.live_wallpaper
android.software.picture_in_picture
android.software.wallet_location_based_suggestions
Telefonia
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
Realtà virtuale (legacy)
android.hardware.vr.headtracking
android.hardware.vr.high_performance
Widget
Passaggi successivi
Ora che hai terminato la configurazione del manifest dell'app e la revisione delle informazioni importanti, scopri i modi in cui puoi creare esperienze coinvolgenti:
- Portare la tua app per Android in 3D con XR
- Sviluppare UI spaziali con Jetpack Compose per XR
- Implementare Material Design per la tua UI spaziale
- Aggiungere ambienti spaziali all'app
- Creare, controllare e gestire entità