Crea app parcheggiate per il sistema operativo Android Automotive

Oltre a supportare le app create per essere usate durante la guida, Android Automotive OS supporta browser, giochi e app video per l'utilizzo quando il veicolo è parcheggiato. Puoi distribuire alle auto la stessa app che utilizzi per altri dispositivi con schermi di grandi dimensioni con poche modifiche.

Testa la tua app esistente su un emulatore di Android Automotive OS

Per iniziare a sviluppare la tua app per il sistema operativo Android Automotive, devi prima testare l'app esistente su un emulatore di sistema operativo Android Automotive. Per configurare un emulatore, segui i passaggi descritti in Eseguire test con l'emulatore del sistema operativo Android Automotive. Dopodiché potrai eseguire l'app seguendo le istruzioni riportate in Eseguire l'app sull'emulatore.

Quando esegui la tua app, controlla che non ci siano problemi di compatibilità, come i seguenti:

  • Gli schermi di infotainment hanno orientamenti fissi. Per rispettare le norme sulla qualità delle app per auto, le app devono supportare sia l'orientamento verticale che quello orizzontale.
  • Le API disponibili su altri dispositivi potrebbero non essere disponibili sul sistema operativo Android Automotive. Ad esempio, alcune API Google Play Services non sono disponibili sul sistema operativo Android Automotive. Per informazioni dettagliate su come gestire questi problemi, consulta la sezione Disattiva funzionalità.

Configurare i file manifest dell'app

Per avere come target Android Automotive OS, la tua app deve avere determinate voci manifest. Con questi, le app che hanno come target il sistema operativo Android Automotive vengono inviate al Play Store utilizzando un tipo di release separato per Automotive OS. Vengono sottoposti a un processo di revisione manuale per garantire che siano sicuri per l'uso in auto. Per ulteriori dettagli, vedi Distribuire app per Android per le auto.

Funzionalità richieste per Android Automotive OS

Per essere inserite nel Play Store in un'auto, le app sviluppate per Android Automotive OS devono includere il seguente elemento <uses-feature> nel file AndroidManifest.xml:

<manifest ...>
    ...
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />
    ...
</manifest>

Le app inviate a canali non automobilistici non possono dichiarare l'elemento <uses-feature> mostrato nell'esempio di codice precedente, perché non possono dipendere dall'hardware specifico dell'auto. Pertanto, per offrire la stessa app sia per i dispositivi automobilistici che non automobilistici, devi generare almeno due versioni della tua app: una per i dispositivi automobilistici e un'altra per i dispositivi mobili. Per ulteriori informazioni su come creare queste versioni separate, consulta la seguente documentazione:

Le due versioni dell'app possono condividere lo stesso nome di pacchetto, ma devono avere codici di versione diversi poiché vengono caricati separatamente sui canali del Play Store.

In alternativa, invece di utilizzare versioni distinte, puoi usare nomi di pacchetto distinti per gli APK o gli app bundle per dispositivi mobili e auto e motori. Per comprendere i compromessi di ciascun approccio, consulta la sezione Nomi dei pacchetti nella guida per gli sviluppatori di app multimediali.

Oltre all'elemento mostrato nell'esempio di codice precedente, le app sviluppate per Android Automotive OS devono includere i seguenti elementi <uses-feature> nell'elemento <manifest> principale:

<uses-feature
  android:name="android.hardware.wifi"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.portrait"
  android:required="false"/>
<uses-feature
  android:name="android.hardware.screen.landscape"
  android:required="false"/>

Impostando esplicitamente queste funzionalità su Non obbligatorie, puoi garantire che la tua app non sia in conflitto con le funzionalità hardware disponibili nei dispositivi con sistema operativo Android Automotive.

Assicurati che non ci siano attività ottimizzate per le distrazioni

Per assicurarti che l'app sia disponibile per l'uso solo quando è parcheggiata, non includere il seguente elemento <meta-data> in nessun elemento <activity> all'interno del file manifest:

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

Senza questi metadati, le attività dell'app vengono bloccate automaticamente dal sistema operativo quando l'auto passa alla modalità Auto, per ridurre le distrazioni per il conducente. Ciò si verifica come un callback del ciclo di vita di onPause, durante il quale devi mettere in pausa la riproduzione audio e video dalla tua app.

Voci manifest specifiche per categoria

Oltre ai requisiti precedenti, che si applicano a tutte le app parcheggiate, le categorie di video e giochi prevedono requisiti aggiuntivi:

Ottimizza la tua app per Android Automotive OS

Per offrire agli utenti la migliore esperienza possibile, tieni presente quanto segue durante la creazione dell'app per Android Automotive OS.

Ottimizza per schermi di grandi dimensioni

Gli schermi presenti nei veicoli con sistema operativo Android Automotive sono più simili per dimensioni, risoluzione e proporzioni a tablet e pieghevoli rispetto agli smartphone. Di conseguenza, ottimizzare l'app per schermi di grandi dimensioni è un vantaggio anche per gli utenti delle auto.

In particolare, consulta le guide Supporto di schermi di diverse dimensioni e Eseguire la migrazione dell'interfaccia utente ai layout adattabili per informazioni dettagliate su come sfruttare al meglio le grandi dimensioni dei display, nonché le gallerie relative a contenuti multimediali e giochi per trovare ispirazione e indicazioni per la progettazione.

Altre ottimizzazioni dello schermo di grandi dimensioni, come la compatibilità degli input, non sono molto utili per Android Automotive OS, ma possono comunque migliorare l'esperienza utente. Ad esempio, la navigazione da tastiera utilizza le stesse API della navigazione rotatoria, quindi eventuali ottimizzazioni apportate possono apportare vantaggi a entrambi i fattori di forma.

Utilizzare riquadri di finestre e ritagli del display

Come per altri fattori di forma, il sistema operativo Android Automotive include elementi dell'interfaccia utente di sistema, come le barre di stato e di navigazione, e il supporto di display non rettangolari.

Per impostazione predefinita, le app tracciano in un'area che non si sovrappone a barre di sistema o ritagli del display. Tuttavia, potresti volere che l'app nasconda le barre di sistema, traccia i contenuti dietro di esse o mostri i contenuti in un ritaglio display come descritto nella sezione Organizzare l'app all'interno di riquadri di finestre. Se la tua app esegue una di queste, consulta le seguenti sottosezioni per dettagli su come consentire il corretto funzionamento dell'app nell'ecosistema di dispositivi con sistema operativo Android Automotive.

Barre di sistema, modalità immersiva e rendering edge-to-edge

Le barre di sistema nelle auto possono avere dimensioni e posizioni diverse rispetto ad altri fattori di forma. Ad esempio, puoi posizionare le barre a sinistra, a destra o in fondo allo schermo. Anche nel caso in cui ci siano una barra di stato in alto e una barra di navigazione in basso (come nel caso della maggior parte dei telefoni e dei tablet), le dimensioni di questi elementi saranno probabilmente molto maggiori nelle auto.

Inoltre, il sistema operativo Android Automotive consente agli OEM di decidere se le app possono mostrare o nascondere le barre di sistema per attivare e uscire dalla modalità immersiva. Ad esempio, impedendo alle app di nascondere le barre dell'impianto, gli OEM possono garantire che i controlli del veicolo, come i controlli della climatizzazione, siano sempre accessibili sullo schermo. Se un OEM ha impedito alle app di controllare le barre di sistema, non succede nulla quando un'app chiama le API WindowInsetsController (o WindowInsetsControllerCompat) per mostrare o nascondere le barre di sistema. Consulta la documentazione di show e hide per scoprire di più su come rilevare se la tua app è riuscita a modificare i riquadri.

Allo stesso modo, gli OEM possono anche decidere se le app possono impostare o meno il colore e la traslucenza delle barre di sistema per garantire che le barre e gli elementi al loro interno siano chiaramente visibili in ogni momento. Se la tua app utilizza edge-to-edge, controlla che dietro le barre di sistema vengano tracciati solo i contenuti non critici. Questi contenuti potrebbero non essere visibili se l'OEM del dispositivo impedisce di impostare il colore o la traslucenza delle barre.

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

Se la tua app è edge-to-edge, non fare ipotesi riguardo alle dimensioni, al numero, al tipo o alla posizione delle barre di sistema. Utilizza invece le API integrate nella finestra per disporre i contenuti dell'app rispetto alle barre di sistema. Per ulteriori dettagli su come utilizzare queste API, consulta Visualizzare i contenuti edge-to-edge nell'app. Valori di spaziatura interna hardcoded che, ma mai consigliati, potrebbero mantenere i contenuti nell'area sicura su altri dispositivi che è probabile che non nelle auto.

Adattarsi a schermi di forma irregolare

Oltre agli schermi rettangolari, alcuni veicoli possono avere schermi di forma irregolare, come mostrato nella Figura 1:

Diagramma di un dispositivo con sistema operativo Android Automotive con un display
      curvo sul lato destro.
Figura 1: un dispositivo con sistema operativo Android Automotive con un display curvo sul lato destro. L'area verde è il rettangolo sicuro che non si sovrappone al riquadro di delimitazione del ritaglio display della curva.

Se la tua app non esegue il rendering edge-to-edge, non devi fare nulla per eseguire il rendering all'interno dell'area sicura.

Se l'app esegue il rendering edge-to-edge, puoi scegliere il comportamento desiderato riguardo ai ritagli del display. Puoi farlo utilizzando le risorse impostando l'attributo android:windowLayoutInDisplayCutoutMode per il tema della tua app o in fase di runtime modificando l'attributo layoutInDisplayCutoutMode della finestra.

Poiché i tipi di ritagli del display presenti sui dispositivi con sistema operativo Android Automotive sono diversi da quelli sui dispositivi mobili, non utilizzare LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT o LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES, che hanno un comportamento ottimizzato per i ritagli presenti sui dispositivi mobili. Utilizza invece LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER o LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS per evitare sempre o inserire sempre il ritaglio. Quando scegli la seconda opzione, consulta Supportare i ritagli display per ulteriori dettagli sulle API relative ai ritagli display.

Se la tua app viene visualizzata nell'area di ritaglio display e vuoi avere un comportamento diverso tra il sistema operativo Android Automotive e i dispositivi mobili, consulta Disattivare le funzionalità per indicazioni se la tua app imposta questo comportamento in fase di runtime e Usa risorse alternative se l'app imposta questo comportamento tramite file di risorse.

Disattiva funzionalità

Se vuoi rendere disponibile un'app mobile esistente sul sistema operativo Android Automotive, alcune caratteristiche e funzionalità potrebbero non essere pertinenti o disponibili. Ad esempio, le auto in genere non consentono l'accesso alle fotocamere. Inoltre, su Android Automotive OS è disponibile solo un sottoinsieme di Google Play Services. Per ulteriori dettagli, consulta Google Play Services per le auto.

Puoi utilizzare l'API PackageManager.hasSystemFeature per rilevare se l'app è in esecuzione sul sistema operativo Android Automotive controllando la funzionalità FEATURE_AUTOMOTIVE, come mostrato nell'esempio seguente:

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

In alternativa, se la tua app ha anche un componente Android Auto, puoi utilizzare l'API CarConnection della libreria di app Android for Cars per rilevare se l'app è in esecuzione sul sistema operativo Android Automotive o Android Auto oppure se non è connessa all'auto.

Per la funzionalità Picture in picture (PIP), segui le best practice consolidate per verificare se la funzionalità è disponibile e reagire in modo appropriato.

Gestire scenari offline

Nonostante le auto siano sempre più connesse a internet, si consiglia di utilizzare le app per gestire l'assenza di connessione a internet, ad esempio nei seguenti casi:

  • Gli utenti potrebbero disattivare i dati mobili offerti nel pacchetto di un abbonamento della casa automobilistica.
  • L'accesso ai dati mobili potrebbe essere limitato in determinate aree.
  • Le auto dotate di radio Wi-Fi potrebbero non rientrare nel raggio d'azione del Wi-Fi oppure un OEM potrebbe disattivare il Wi-Fi per favorire una rete mobile.

Preparati a gestire questi scenari nella tua app riducendo in modo graduale la funzionalità che dipende dall'accesso a internet, ad esempio offrendo contenuti offline. Per ulteriori informazioni, consulta le best practice per l'ottimizzazione del networking.

Utilizzare risorse alternative

Per adattare l'app per le auto, puoi utilizzare il qualificatore risorse car per fornire risorse alternative quando viene eseguita su un veicolo con sistema operativo Android Automotive. Ad esempio, se utilizzi le risorse dimensione per archiviare i valori di spaziatura interna, potresti utilizzare un valore più alto per il set di risorse car al fine di aumentare le dimensioni dei touch target.

Distribuire l'app

Dopo aver testato la tua app in base alle norme sulla qualità delle app per auto relative alla categoria e aver apportato una build del sistema operativo Android Automotive con le eventuali modifiche necessarie alla sua categoria, puoi pubblicarla nei canali dei fattori di forma del sistema operativo Automotive sul Play Store. Vedi Distribuire app per Android per le auto per ulteriori dettagli sulla procedura di pubblicazione.

Inviare feedback sulle app parcheggiate

Se riscontri un problema o hai una richiesta di funzionalità durante lo sviluppo della tua app parcheggiata per Android Automotive OS, puoi segnalarlo utilizzando Google Issue Tracker. Assicurati di compilare tutte le informazioni richieste nel modello di problema. Prima di presentare un nuovo problema, controlla se è già presente nell'elenco dei problemi. Puoi abbonarti e votare per i problemi facendo clic sulla stella relativa a un problema nel tracker. Per ulteriori informazioni, consulta la sezione Abbonarsi a un problema.

Crea un nuovo numero