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 su questa piattaforma, dovete distribuire un'app ottimizzata per il conducente che sia compatibile con Android Automotive OS. Puoi riutilizzare quasi tutto il codice 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 avere la versione più recente Templates Host, che viene fornito come app di sistema.

Panoramica dello sviluppo

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

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

Usa Android Studio Bumblebee o una versione successiva per assicurarti che tutte le funzionalità di Automotive OS siano abilitate.

Crea un modulo Automotive

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

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

  1. In Android Studio, fai clic su File > Nuovo > Nuovo modulo.
  2. Seleziona Automotive Module, quindi fai clic su Next (Avanti).
  3. Specifica un Nome applicazione/libreria. Questo è il nome che gli utenti visualizzano la tua app su Android Automotive OS.
  4. Inserisci un Nome modulo.
  5. Modifica il Nome del pacchetto in modo che corrisponda all'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 sul sistema operativo Android Automotive vengono eseguite su Livello API Android 10 29 o superiore, quindi se selezioni questo valore hai come target tutti compatibili con le automobili.

  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 Automotive come Tipo di progetto.
  3. Seleziona Nessuna attività, quindi fai clic su Avanti.
  4. Specifica un nome per il progetto. Questo è il nome che gli utenti vedono per il tuo su Android Automotive OS.
  5. Inserisci un Nome pacchetto. Consulta la sezione Nomi dei pacchetti per maggiori dettagli sulla selezione del nome del pacchetto.
  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 sul sistema operativo Android Automotive vengono eseguite su Livello API Android 10 29 o superiore, quindi se selezioni questo valore hai come target tutti compatibili con le automobili.

Dopo aver creato il modulo in Android Studio, apri AndroidManifest.xml nel tuo 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 ha alcune informazioni sull'app standard, nonché un uses-feature che dichiara il supporto per Android Automotive OS. Tieni presente che non sono dichiarate attività nel file manifest.

Poi, 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 dei modelli eseguire. 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 Automotive, devi aggiungere una dipendenza androidx.car.app:app-automotive artefatto, che include l'implementazione di CarAppActivity richiesta 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 tenere CarAppService in un ambiente separato condiviso tra i moduli per dispositivi mobili e auto e motori. Se utilizzando questo approccio, devi aggiornare il modulo Automotive per includere modulo condiviso utilizzando le dipendenze del progetto di Gradle , come mostrato nello snippet seguente:

Alla moda

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 per Android Automotive OS

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

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

Questa voce manifest si riferisce a un file XML che dichiara la supportate dalla tua app.

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

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

Dichiara i tuoi CarAppService e CarAppActivity

Come per Android Auto, Android Automotive OS utilizza CarAppService implementazione per eseguire la tua app. Consulta Crea il tuo CarAppService e una sessione e Dichiara il tuo CarAppService per istruzioni per implementare e dichiarare CarAppService.

A differenza di Android Auto, devi includere un componente dell'applicazione aggiuntivo, CarAppActivity, che fungerà da punto di accesso per il tuo sistema operativo Android Automotive dell'app. L'implementazione di questa attività è inclusa nella androidx.car.app:app-automotive artefatto ed è responsabile della comunicazione con l'applicazione host del modello per eseguire il rendering dell'UI dell'app. Dovresti avere solo un'istanza di questa attività nel file manifest e deve essere dichiarata che 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 del corso di CarAppActivity dall'artefatto app-automotive.
  • android:exported è impostata su true perché l'attività deve essere avviabile da un un'altra app diversa da se stessa (ovvero, Avvio app).
  • android:launchMode è impostato su singleTask per consentire all'utente di tornare allo stesso istanza dell'attività da Avvio app se escono.
  • android:theme è impostato su @android:style/Theme.DeviceDefault.NoActionBar, quindi in modo che l'app occupi spazio a schermo intero.
  • Il filtro per intent indica che questa è l'attività di avvio dell'app.
  • C'è un elemento <meta-data> che indica al sistema operativo che l'app può essere usata mentre sono in vigore limitazioni UX, ad esempio quando il veicolo è in movimento.

Per le app di navigazione, esistono alcune altre voci manifest obbligatorie per CarAppActivity, come mostrato di seguito 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>
  • L'elemento aggiuntivo android.intent.category.APP_MAPS comunica al sistema che la tua app può mostrare la posizione dell'utente.
  • Il filtro per intent androidx.car.app.action.NAVIGATE garantisce che gli utenti abbiano l'opzione di utilizzare la tua app quando gestisci un intento di navigazione implicito da un'altra app per auto.

Altre considerazioni

Tieni presenti queste altre considerazioni durante lo sviluppo di Android Automotive App del sistema operativo:

Nomi dei pacchetti

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

Si tratta di una decisione prevalentemente aziendale. Ad esempio, se un team sta lavorando l'app mobile e un team separato che lavora su Android Automotive dell'app del sistema operativo, potrebbe avere senso avere nomi di pacchetto separati e lasciare che di gestire la propria scheda del Play Store. Non c'è una grande differenza nel l'impegno tecnico necessario per utilizzare uno dei due approcci.

La tabella seguente riassume alcune altre principali differenze nella conservazione del pacchetto corrente o utilizzando un nuovo nome di pacchetto:

Funzionalità Stesso nome del pacchetto Nuovo nome pacchetto
Scheda dello Store Singolo Diversi
Installazione con mirroring Sì: reinstalla rapidamente l'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, per altri APK inviati nella stessa release sono bloccati Recensioni singole
Statistiche, metriche e dati vitali Combinata: puoi filtrare in base al nome del dispositivo per specifiche auto e motori e i dati di Google Cloud. Separa
Indicizzazione e ranking nei risultati di ricerca Sviluppa la tua reputazione Nessun riporto
Integrazione con altre app Molto probabilmente non saranno 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 URI con l'Assistente Google

Contenuti offline

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

Di seguito sono riportati alcuni aspetti da tenere presenti quando valuti l'assistenza offline strategia:

  • Il momento migliore per scaricare i contenuti è mentre l'app è in uso.
  • Non dare per scontato che sia disponibile una rete Wi-Fi. Un'auto potrebbe non rientrare 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 nella cache in modo intelligente i contenuti che ci si aspetta dagli utenti, ti consigliamo di consentire all'utente di modificare questo comportamento.
  • Lo spazio su disco sulle auto varia, quindi offri agli utenti un modo per eliminarlo contenuti offline.

Domande frequenti

Consulta le sezioni seguenti per trovare le risposte ad alcune domande frequenti su Sistema operativo Android Automotive.

Sono presenti limitazioni 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, sei comunque responsabile per rispettare tutti i requisiti di qualità delle app per auto.

Come faccio a pubblicare la mia app per Android Automotive OS utilizzando Google Play Console?

La procedura di pubblicazione dell'app è simile alla pubblicazione di un'app per smartphone, ma utilizzi un fattore di forma diverso. Per attivare l'utilizzo di Android Automotive nella tua app Tipo di release del sistema operativo:

  1. Apri Play Console.
  2. Seleziona l'app.
  3. Dal menu a sinistra, seleziona Release > Configurazione > Impostazioni avanzate > Modulo fattori principali.
  4. Seleziona Aggiungi fattore di forma > Android Automotive OS, quindi segui le istruzioni nella Play Console.

Risoluzione dei problemi

Consulta quanto segue per assistenza con alcuni scenari di risoluzione dei problemi comuni su Android Automotive OS.

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

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