Aggiungi il supporto del sistema operativo Android Automotive alla tua app basata su modelli

Il sistema operativo Android Automotive consente agli utenti di installare app nell'auto. Per raggiungere gli utenti su questa piattaforma, devi distribuire un'app ottimizzata per il conducente compatibile con il sistema operativo Android Automotive. Puoi riutilizzare quasi tutto il codice e le risorse nell'app Android Auto, ma devi creare una build separata che soddisfi i requisiti descritti in questa pagina.

Per eseguire l'app per auto su Android Automotive OS, devi disporre dell'ultima versione di Templates Host, che viene fornita come app di sistema.

Panoramica dello sviluppo

L'aggiunta del supporto di Android Automotive OS richiede solo pochi passaggi, come descritto nelle sezioni di questa pagina:

  1. Creare un modulo per i veicoli
  2. Dichiarare il supporto per Android Automotive OS
  3. Dichiarare CarAppService e CarAppActivity
  4. Aggiornare le dipendenze Gradle

Utilizza Android Studio Bumblebee o versioni successive per assicurarti che tutte le funzionalità di Automotive OS siano attive.

Creare un modulo per auto e motori

Alcuni componenti del sistema operativo Android Automotive, come il file manifest, hanno requisiti specifici della piattaforma. Crea un modulo che possa mantenere il codice di questi componenti separato dall'altro codice del progetto, ad esempio il codice utilizzato per l'app per smartphone.

Per un progetto esistente, segui questi passaggi per aggiungere un modulo per auto e motori:

  1. In Android Studio, fai clic su File > Nuovo > Nuovo modulo.
  2. Seleziona Modulo Automotive e poi fai clic su Avanti.
  3. Fornisci un nome dell'applicazione/della raccolta. Questo è il nome che gli utenti vedono per la tua app sul sistema operativo Android Automotive.
  4. Inserisci un nome del modulo.
  5. Modifica il nome del pacchetto in modo che corrisponda a quello dell'app esistente.
  6. Seleziona API 29: Android 10 (Q) per l'SDK minimo, quindi fai clic su Avanti. Tutte le auto che supportano la raccolta di app per auto su Android Automotive OS funzionano su Android 10, livello API 29 o versioni successive, pertanto la selezione di questo valore ha come target tutte le auto compatibili.

  7. Seleziona Aggiungi nessuna attività e poi fai clic su Fine.

Se stai avviando un nuovo progetto:

  1. In Android Studio, fai clic su File > Nuovo > Nuovo progetto.
  2. Seleziona Automotive per Tipo di progetto.
  3. Seleziona Nessuna attività e poi fai clic su Avanti.
  4. Fornisci un nome per il progetto. Si tratta del nome che gli utenti vedono per la tua app sul sistema operativo Android Automotive.
  5. Inserisci un nome del pacchetto. Per ulteriori dettagli sulla selezione di un nome del pacchetto, consulta la sezione Nomi dei pacchetti.
  6. Seleziona API 29: Android 10 (Q) per l'SDK minimo, quindi fai clic su Avanti.

    Tutte le auto che supportano la raccolta di app per auto su Android Automotive OS funzionano su Android 10, livello API 29 o versioni successive, pertanto la selezione di questo valore ha come target tutte le auto compatibili.

Dopo aver creato il modulo in Android Studio, apri il file AndroidManifest.xml nel nuovo modulo per auto e motori:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

</manifest>

L'elemento application contiene alcune informazioni standard sull'app, nonché un elemento uses-feature che dichiara il supporto per Android Automotive OS. Tieni presente che nel file manifest non sono dichiarate attività.

Aggiungi poi i seguenti elementi uses-feature al manifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.car.app">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

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

    <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" />
    <uses-feature
        android:name="android.hardware.camera"
        android:required="false" />

</manifest>

Il primo elemento uses-feature dichiara che l'app utilizza l'host di modelli per l'esecuzione. L'impostazione esplicita dei quattro elementi uses-feature rimanenti su required="false" garantisce che la tua app non entri in conflitto con le funzionalità hardware disponibili nei dispositivi con sistema operativo Android Automotive.

Aggiorna le dipendenze Gradle

All'interno del modulo per i veicoli, devi aggiungere una dipendenza dall'elemento androidx.car.app:app-automotive, che include l'implementazione di CarAppActivity necessaria per l'esecuzione dell'app su Android Automotive OS.

Se stai sviluppando la tua app per supportare sia Android Auto sia Android Automotive OS, ti consigliamo di mantenere CarAppService in un modulo distinto da condividere tra i moduli mobile e automotive. Se utilizzi questo approccio, devi aggiornare il modulo per l'automotive in modo da includere il modulo condiviso utilizzando le dipendenze del progetto di Gradle, come mostrato nel seguente snippet:

Groovy

buildscript {
    ...
    dependencies {
        ...
        implementation "androidx.car.app:app-automotive:car_app_library_version"
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation("androidx.car.app:app-automotive:car_app_library_version")
        implementation(project(":shared_module_name"))
    }
}

Dichiarare il supporto per Android Automotive OS

Utilizza la seguente voce manifest per dichiarare che la tua app supporta Android Automotive OS:

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

Questa voce del file manifest fa riferimento a un file XML che dichiara le funzionalità per auto e motori supportate dalla tua app.

Per indicare che hai un'app della raccolta di app per auto, aggiungi un file XML denominato automotive_app_desc.xml alla directory res/xml/ nel modulo del sistema operativo Android Automotive. Questo file deve includere i seguenti contenuti:

<automotiveApp>
    <uses name="template"/>
</automotiveApp>

Dichiara CarAppService e CarAppActivity

Come per Android Auto, Android Automotive OS utilizza l'implementazione di CarAppService per eseguire l'app. Consulta Creare CarAppService e Sessione e Dichiarare CarAppService per istruzioni su come implementare e dichiarare CarAppService.

A differenza di Android Auto, devi includere un componente aggiuntivo dell'applicazione, CarAppActivity, che fungerà da punto di ingresso per l'app per il sistema operativo Android Automotive. L'implementazione di questa attività è inclusa nell'elemento androidx.car.app:app-automotive ed è responsabile della comunicazione con l'applicazione host del modello per eseguire il rendering dell'interfaccia utente dell'app. Devi avere solo un'istanza di questa attività nel file manifest e deve essere dichiarata come segue:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

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

</activity>
  • android:name è impostato sul nome di classe completo della classe CarAppActivity dell'elemento app-automotive.
  • android:exported è impostato su true perché l'attività deve essere avviabile da un'app diversa da se stessa (ovvero dal programma di avvio).
  • android:launchMode è impostato su singleTask in modo che l'utente possa tornare alla stessa istanza dell'attività dall'avvio app se esce.
  • android:theme è impostato su @android:style/Theme.DeviceDefault.NoActionBar in modo che l'app occupi tutto lo spazio a schermo intero a sua disposizione.
  • Il filtro per intent indica che si tratta dell'attività di Avvio app.
  • Esiste un elemento <meta-data> che indica al sistema operativo che l'app può essere utilizzata quando sono in vigore limitazioni dell'esperienza utente, ad esempio quando il veicolo è in movimento.

Per le app di navigazione, sono necessarie alcune altre voci manifest per CarAppActivity, come mostrato nel seguente snippet:

<activity
    android:exported="true"
    android:theme="@android:style/Theme.DeviceDefault.NoActionBar"
    android:name="androidx.car.app.activity.CarAppActivity"
    android:launchMode="singleTask"
    android:label="Your app name">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
        <!-- Include the category below ONLY for navigation apps -->
        <category android:name="android.intent.category.APP_MAPS" />
    </intent-filter>

    <!-- Include the intent-filter below ONLY for navigation apps -->
    <intent-filter>
        <action android:name="androidx.car.app.action.NAVIGATE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="geo" />
    </intent-filter>

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

</activity>
  • La categoria aggiuntiva android.intent.category.APP_MAPS informa il sistema che la tua app è in grado di mostrare la posizione dell'utente.
  • Il filtro intent androidx.car.app.action.NAVIGATE garantisce agli utenti la possibilità di utilizzare la tua app quando gestiscono un'intent di navigazione implicita da un'altra app per auto.

Altre considerazioni

Tieni presenti queste altre considerazioni durante lo sviluppo della tua app per il sistema operativo Android Automotive:

Nomi dei pacchetti

Poiché distribuisci un kit Android Application Package (APK) separato per il sistema operativo Android Automotive, puoi riutilizzare il nome del pacchetto della tua app mobile o crearne uno nuovo. Se utilizzi un nome di pacchetto diverso, la tua app avrà due schede del Play Store distinte. Se riutilizzi il nome del pacchetto attuale, la tua app avrà una singola scheda su entrambe le piattaforme.

Si tratta principalmente di una decisione commerciale. Ad esempio, se hai un team che lavora sull'app mobile e un altro team che lavora sull'app per il sistema operativo Android Automotive, potrebbe avere senso avere nomi di pacchetti separati e consentire a ciascun team di gestire la propria scheda del Play Store. Non esiste una grande differenza nell'impegno tecnico richiesto per utilizzare uno o l'altro approccio.

La seguente tabella riassume alcune altre differenze chiave tra il mantenimento del nome del pacchetto attuale o l'utilizzo di un nuovo nome del pacchetto:

Funzionalità Stesso nome del pacchetto Nuovo nome pacchetto
Scheda dello Store Singolo Più di uno
Installazione speculare Sì: reinstallazione rapida delle app durante la configurazione guidata No
Procedura di revisione del Play Store Blocco delle revisioni: se la revisione non va a buon fine per un APK, gli altri APK inviati nella stessa release vengono bloccati Recensioni individuali
Statistiche, metriche e indicatori Combinato: puoi filtrare per nome del dispositivo per i dati specifici per auto e motori. Separa
Indicizzazione e ranking nei risultati di ricerca Basarsi sulla situazione attuale Nessun trasferimento
Integrazione con altre app Molto probabilmente non sono necessarie modifiche, supponendo che il codice multimediale sia condiviso tra entrambi gli APK Potrebbe essere necessario aggiornare l'app corrispondente, ad esempio per la riproduzione di URI con l'Assistente Google

Contenuti offline

Se applicabile, implementa il supporto offline nella tua app. Le auto con sistema operativo Android Automotive dovrebbero avere una propria connettività dati, il che significa che un piano di dati è incluso nel costo del veicolo o pagato dall'utente. Tuttavia, si prevede che le auto avranno anche una connettività più variabile rispetto ai dispositivi mobili.

Ecco alcuni aspetti da tenere presente quando valuti la tua strategia di assistenza offline:

  • Il momento migliore per scaricare i contenuti è quando l'app è in uso.
  • Non dare per scontato che il Wi-Fi sia disponibile. Un'auto potrebbe non entrare mai nel raggio d'azione del Wi-Fi oppure il produttore di apparecchiature originali (OEM) potrebbe aver disattivato il Wi-Fi a favore di una rete mobile.
  • Anche se è consentito memorizzare in cache in modo intelligente i contenuti che prevedi che gli utenti useranno, ti consigliamo di consentire all'utente di modificare questo comportamento.
  • Lo spazio su disco delle auto varia, quindi offri agli utenti un modo per eliminare i contenuti offline.

Domande frequenti

Consulta le seguenti sezioni per trovare le risposte ad alcune domande frequenti sul sistema operativo Android Automotive.

Esistono limitazioni o consigli per l'utilizzo di SDK e librerie di terze parti?

Non sono disponibili linee guida specifiche per l'utilizzo di SDK e librerie di terze parti. Se scegli di utilizzare SDK e librerie di terze parti, sei comunque responsabile della conformità a tutti i requisiti di qualità delle app per auto.

Come faccio a pubblicare la mia app per il sistema operativo Android Automotive utilizzando Google Play Console?

Per informazioni dettagliate su come pubblicare la tua app per Android Automotive OS utilizzando Google Play Console, consulta Distribuire su auto.

Risoluzione dei problemi

Di seguito puoi trovare indicazioni su alcuni scenari comuni di risoluzione dei problemi su Android Automotive OS.

  • Anche dopo aver disinstallato un'app Raccolta di app per auto dalle impostazioni di sistema, viene visualizzato un errore quando provo a installare una nuova versione.

    Per assicurarti che l'app sia stata disinstallata, utilizza il comando adb uninstall app.package.name.