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 dell'app Android Auto, ma devi creare una build separata che soddisfi i requisiti descritti in questa pagina.

Per eseguire l'app della tua auto sul sistema operativo Android Automotive, devi disporre della versione più recente di Templates Host, disponibile come app di sistema.

Panoramica dello sviluppo

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

  1. Crea un modulo per il settore auto e motori
  2. Dichiara il supporto del sistema operativo Android Automotive
  3. Dichiara i CarAppService e i CarAppActivity
  4. Aggiornare le dipendenze Gradle

Utilizza Android Studio Bumblebee o versioni successive per assicurarti che tutte le funzionalità del sistema operativo Automotive siano abilitate.

Crea un modulo per il settore auto e motori

Alcuni componenti del sistema operativo Android Automotive, ad esempio il file manifest, hanno requisiti specifici della piattaforma. Crea un modulo in grado di mantenere il codice per questi componenti separato da altri codici nel tuo progetto, ad esempio il codice utilizzato per l'app per telefono.

Per un progetto esistente, segui questi passaggi per aggiungere un modulo per Automotive al tuo progetto:

  1. In Android Studio, fai clic su File > Nuovo > Nuovo modulo.
  2. Seleziona Modulo Automotive, quindi fai clic su Avanti.
  3. Specifica un Nome applicazione/libreria. Si tratta del nome della tua app visualizzato dagli utenti sul sistema operativo Android Automotive.
  4. Inserisci un Nome del modulo.
  5. Modifica il Nome pacchetto in modo che corrisponda a quello dell'app esistente.
  6. Seleziona API 29: Android 10 (Q) per SDK minimo, quindi fai clic su Avanti. Tutte le auto che supportano la libreria app dell'auto nel sistema operativo Android Automotive vengono eseguite con livello API Android 10 29 o successivo, quindi la selezione di questo valore ha come target tutte le auto compatibili.

  7. Seleziona Aggiungi nessuna attività, quindi fai clic su Fine.

Se stai iniziando un nuovo progetto:

  1. In Android Studio, fai clic su File > Nuovo > Nuovo progetto.
  2. Seleziona Auto e motori come Tipo di progetto.
  3. Seleziona Nessuna attività e fai clic su Avanti.
  4. Specifica un nome per il progetto. Si tratta del nome della tua app visualizzato dagli utenti sul sistema operativo Android Automotive.
  5. Inserisci un Nome del pacchetto. Consulta la sezione Nomi dei pacchetti per ulteriori dettagli sulla selezione di un nome di pacchetto.
  6. Seleziona API 29: Android 10 (Q) per SDK minimo, quindi fai clic su Avanti.

    Tutte le auto che supportano la libreria app dell'auto nel sistema operativo Android Automotive vengono eseguite con livello API Android 10 29 o successivo, quindi 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 Automotive:

<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 e un elemento uses-feature che dichiara il supporto del sistema operativo Android Automotive. Tieni presente che non sono state dichiarate attività nel manifest.

A questo punto, aggiungi i seguenti elementi uses-feature al file 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 la tua 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 sia in conflitto con le funzionalità hardware disponibili nei dispositivi con sistema operativo Android Automotive.

Aggiorna le dipendenze Gradle

All'interno del modulo Automotive, devi aggiungere una dipendenza all'elemento androidx.car.app:app-automotive, che include l'implementazione CarAppActivity richiesta per l'esecuzione dell'app sul sistema operativo Android Automotive.

Se stai sviluppando la tua app per supportare sia Android Auto sia il sistema operativo Android Automotive, ti consigliamo di conservare CarAppService in un modulo separato da condividere tra i moduli per dispositivi mobili e auto e motori. Se utilizzi questo approccio, devi aggiornare il modulo Automotive in modo da includere il modulo condiviso utilizzando le dipendenze del progetto di Gradle, come mostrato nello snippet seguente:

Trendy

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"))
    }
}

Dichiara il supporto del sistema operativo Android Automotive

Utilizza la seguente voce manifest per dichiarare che la tua app supporta il sistema operativo Android Automotive:

<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à relative ad auto e motori supportate dalla tua app.

Per indicare che hai un'app Car App Library, 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, il sistema operativo Android Automotive utilizza la tua implementazione di CarAppService per eseguire l'app. Consulta gli articoli Creare un servizio CarAppService e una 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 funga da punto di ingresso per l'app del 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 visualizzare l'UI della tua app. Devi avere una sola istanza di questa attività nel file manifest, che 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 completo della classe CarAppActivity dell'artefatto app-automotive.
  • android:exported è impostato su true perché l'attività deve essere avviabile da un'app diversa da quella stessa (vale a dire Avvio app).
  • android:launchMode è impostato su singleTask, in modo che l'utente possa tornare alla stessa istanza dell'attività da Avvio app se esce.
  • L'app android:theme è impostata su @android:style/Theme.DeviceDefault.NoActionBar per occupare l'intero spazio a schermo disponibile.
  • Il filtro per intent indica che si tratta dell'attività di avvio dell'app.
  • Esiste un elemento <meta-data> che indica al sistema operativo che l'app può essere utilizzata mentre sono presenti limitazioni UX, ad esempio quando il veicolo è in movimento.

Per le app di navigazione, esistono altre voci manifest obbligatorie 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 android.intent.category.APP_MAPS aggiuntiva indica al sistema che la tua app è in grado di mostrare la posizione dell'utente.
  • Il filtro per intent androidx.car.app.action.NAVIGATE garantisce che gli utenti abbiano la possibilità di utilizzare la tua app quando gestiscono un intent di navigazione implicito da un'altra app per auto.

Altre considerazioni

Durante lo sviluppo della tua app per il sistema operativo Android Automotive, tieni presente queste altre considerazioni:

Nomi dei pacchetti

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

Si tratta principalmente di una decisione aziendale. Ad esempio, se hai un team che lavora all'app mobile e un altro all'app per il sistema operativo Android Automotive, potrebbe essere utile avere nomi di pacchetti separati e consentire a ciascun team di gestire la propria scheda del Play Store. Non c'è una grande differenza nell'impegno tecnico richiesto per utilizzare i due approcci.

La seguente tabella riassume alcune altre differenze fondamentali tra la conservazione del nome di pacchetto attuale o l'utilizzo di un nuovo nome di pacchetto:

Feature Stesso nome del pacchetto Nuovo nome pacchetto
Scheda dello Store Singolo Più di uno
Installazione con mirroring Sì: reinstallazione rapida dell'app durante la configurazione guidata No
Procedura di revisione del Play Store Blocco delle recensioni: se la revisione non va a buon fine per un APK, gli altri APK inviati nella stessa release vengono bloccati. Recensioni singole
Statistiche, metriche e vitali Combinato: puoi filtrare in base al nome del dispositivo per i dati specifici del settore auto e motori. Separa
Indicizzazione e ranking nei risultati di ricerca Basa la tua posizione attuale Nessun trasferimento
Integrazione con altre app Molto probabilmente non sono necessarie modifiche, supponendo che il codice multimediale sia condiviso tra i due APK Potrebbe essere necessario aggiornare l'app corrispondente, ad esempio per riprodurre l'URI con l'Assistente Google

Contenuti offline

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

Ecco alcuni aspetti da tenere presenti 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 sia disponibile una rete Wi-Fi. Il Wi-Fi potrebbe non essere mai raggiunto in auto o il produttore di apparecchiature originali (OEM) potrebbe aver disattivato il Wi-Fi a favore di una rete cellulare.
  • Sebbene sia corretto memorizzare in modo intelligente nella cache i contenuti che ti aspetti vengano utilizzati dagli utenti, ti consigliamo di consentirgli di modificare questo comportamento.
  • Lo spazio su disco nelle 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 restrizioni o consigli per l'utilizzo di SDK e librerie di terze parti?

Non esistono linee guida specifiche sull'utilizzo di SDK e librerie di terze parti. Se scegli di utilizzare SDK e librerie di terze parti, hai comunque la responsabilità di rispettare tutti i requisiti di qualità delle app per auto.

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

La procedura di pubblicazione delle app è simile alla pubblicazione di un'app per smartphone, ma il fattore di forma è diverso. Per consentire all'app di utilizzare il tipo di release del sistema operativo Android Automotive:

  1. Apri Play Console.
  2. Seleziona l'app.
  3. Nel menu a sinistra, seleziona Release > Configurazione > Impostazioni avanzate > Fattori di forma.
  4. Seleziona Aggiungi fattore di forma > Sistema operativo Android Automotive, quindi segui le istruzioni in Play Console.

Risoluzione dei problemi

Consulta quanto riportato di seguito per assistenza su alcuni scenari di risoluzione dei problemi comuni sul sistema operativo Android Automotive.

  • Anche dopo aver disinstallato un'app Car App Library 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.