Android Automotive OS permet aux utilisateurs d'installer des applications dans leur voiture. Pour atteindre les utilisateurs de cette plate-forme, vous devez proposer une application optimisée pour la conduite et compatible avec Android Automotive OS. Vous pouvez réutiliser la quasi-totalité du code et des ressources de votre application Android Auto, mais vous devrez créer un build distinct qui répond aux exigences décrites sur cette page.
Pour exécuter votre application automobile sur Android Automotive OS, vous devez disposer de la dernière version de l'hôte de modèles, qui est disponible en tant qu'application système.
Présentation du développement
La prise en charge d'Android Automotive OS ne nécessite que quelques étapes, comme décrit dans les sections de cette page :
- Créer un module automobile
- Déclarer la prise en charge d'Android Automotive OS
- Déclarer vos
CarAppService
etCarAppActivity
- Mettre à jour vos dépendances Gradle
Utilisez Android Studio Bumblebee ou une version ultérieure pour vous assurer que toutes les fonctionnalités d'Automotive OS sont activées.
Créer un module automobile
Certains composants d'Android Automotive OS, comme le fichier manifeste, ont des exigences spécifiques à la plate-forme. Vous devez donc créer un module capable de séparer le code de ces composants des autres codes de votre projet, comme celui utilisé pour votre application pour téléphone.
Pour ajouter un module automobile à un projet existant, procédez comme suit :
- Dans Android Studio, cliquez sur File > New > New Module (Fichier > Nouveau > Nouveau module).
- Sélectionnez Automotive Module (Module automobile), puis cliquez sur Next (Suivant).
- Indiquez un nom d'application/de bibliothèque dans Application/Library name. Il s'agit du nom que les utilisateurs voient pour votre application sur Android Automotive OS.
- Indiquez un nom de module dans Module name.
- Modifiez le nom du package pour qu'il corresponde à votre application existante.
Sélectionnez API 29 : Android 10 (Q) pour le Minimum SDK, puis cliquez sur Next (Suivant). Toutes les voitures compatibles avec la bibliothèque d'applications pour voitures sur Android Automotive OS s'exécutent sur Android version 10 (niveau 29 d'API) ou ultérieure. La sélection de cette valeur cible donc toutes les voitures compatibles.
Sélectionnez Add No Activity (N'ajouter aucune activité), puis cliquez sur Finish (Terminer).
Si vous démarrez un nouveau projet :
- Dans Android Studio, cliquez sur File > New > New Project (Fichier > Nouveau > Nouveau projet).
- Dans Project Type (Type de projet), sélectionnez Automotive (Automobile).
- Sélectionnez No Activity (Aucune activité), puis cliquez sur Next (Suivant).
- Attribuez un Name (Nom) à votre projet. Il s'agit du nom que les utilisateurs voient pour votre application sur Android Automotive OS.
- Saisissez un nom de package. Consultez la section Noms des packages pour en savoir plus sur la sélection d'un nom de package.
Sélectionnez API 29 : Android 10 (Q) pour le Minimum SDK, puis cliquez sur Next (Suivant).
Toutes les voitures compatibles avec la bibliothèque d'applications pour voitures sur Android Automotive OS s'exécutent sur Android version 10 (niveau 29 d'API) ou ultérieure. La sélection de cette valeur cible donc toutes les voitures compatibles.
Après avoir créé votre module dans Android Studio, ouvrez le fichier AndroidManifest.xml
dans le nouveau module automobile :
<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'élément application
contient des informations sur l'application standard, ainsi qu'un élément uses-feature
qui déclare la prise en charge d'Android Automotive OS. Notez qu'aucune activité n'a été déclarée dans le fichier manifeste.
Ajoutez ensuite les éléments uses-feature
suivants à votre fichier manifeste :
<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>
Le premier élément uses-feature
déclare que votre application utilise l'hôte de modèles pour s'exécuter. En définissant de manière explicite les quatre autres éléments uses-feature
sur required="false"
, vous vous assurez que votre application n'entre pas en conflit avec les fonctionnalités matérielles disponibles sur les appareils Android Automotive OS.
Mettre à jour vos dépendances Gradle
Dans votre module automobile, vous devez ajouter une dépendance à l'artefact androidx.car.app:app-automotive
, qui inclut l'implémentation CarAppActivity
requise pour que votre application s'exécute sur Android Automotive OS.
Si vous développez votre application pour qu'elle soit compatible avec Android Auto et Android Automotive OS, nous vous recommandons de conserver votre CarAppService
dans un module distinct que vous partagerez entre vos modules mobiles et automobiles. Si vous utilisez
avec cette approche, vous devez mettre à jour votre module automobile afin d'inclure le
module partagé à l'aide des dépendances de projet de Gradle
, comme illustré dans l'extrait suivant:
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")) } }
Déclarer la prise en charge d'Android Automotive OS
Utilisez l'entrée de fichier manifeste suivante pour déclarer que votre application prend en charge Android Automotive OS :
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Cette entrée du fichier manifeste fait référence à un fichier XML qui déclare les fonctionnalités automobiles prises en charge par votre application.
Pour indiquer que vous disposez d'une application Car App Library, ajoutez un fichier XML nommé automotive_app_desc.xml
au répertoire res/xml/
de votre module Android Automotive OS. Ce fichier doit inclure le contenu suivant :
<automotiveApp>
<uses name="template"/>
</automotiveApp>
Déclarer vos CarAppService et CarAppActivity
Comme avec Android Auto, Android Automotive OS utilise votre implémentation CarAppService
pour exécuter votre application. Consultez les sections Créer votre CarAppService et Session et Déclarer votre CarAppService pour savoir comment implémenter et déclarer votre CarAppService
.
Contrairement à Android Auto, vous devez inclure un composant d'application supplémentaire, CarAppActivity
, qui servira de point d'entrée pour votre application Android Automotive OS. L'implémentation de cette activité est incluse dans l'artefact androidx.car.app:app-automotive
et permet de communiquer avec le modèle d'application hôte pour afficher l'UI de votre application. Vous ne devez avoir qu'une seule instance de cette activité dans votre fichier manifeste. Elle doit être déclarée comme suit :
<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
est défini sur le nom complet de la classeCarAppActivity
de l'artefactapp-automotive
.android:exported
est défini surtrue
, car l'activité doit pouvoir être lancée par une autre application (à savoir, le lanceur d'applications).android:launchMode
est défini sursingleTask
afin que l'utilisateur puisse revenir à la même instance de l'activité à partir du lanceur d'applications s'il quitte la page.android:theme
est défini sur@android:style/Theme.DeviceDefault.NoActionBar
pour que l'application occupe tout l'espace en plein écran disponible.- Le filtre d'intent indique qu'il s'agit de l'activité du lanceur d'applications pour l'application.
- Un élément
<meta-data>
indique à l'OS que l'application peut être utilisée lorsque des restrictions de l'expérience utilisateur sont en place, par exemple lorsque le véhicule est en mouvement.
Exigences supplémentaires pour les applications de navigation
Pour les applications de navigation, quelques autres entrées de fichier manifeste sont requises pour CarAppActivity
, comme illustré dans l'extrait suivant :
<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 catégorie supplémentaire
android.intent.category.APP_MAPS
indique au système que votre application est en mesure d'afficher la position de l'utilisateur. - Le filtre d'intent
androidx.car.app.action.NAVIGATE
garantit que les utilisateurs ont la possibilité d'utiliser votre application lorsqu'ils gèrent un intent de navigation implicite à partir d'une autre application pour voitures.
Autres points à prendre en compte
Gardez à l'esprit les points suivants lorsque vous développez votre application Android Automotive OS :
Noms des packages
Étant donné que vous distribuez un APK (Android Package Kit) distinct pour Android Automotive OS, vous pouvez réutiliser le nom du package depuis votre application mobile ou en créer un autre. Si vous utilisez un nom de package différent, votre application possède deux fiches Play Store distinctes. Si vous réutilisez le nom de votre package actuel, votre application possède une seule fiche sur les deux plates-formes.
C'est avant tout une décision opérationnelle. Par exemple, si une équipe travaille sur l'application mobile et une autre sur l'application Android Automotive OS, il peut être judicieux d'avoir des noms de package distincts et de laisser chaque équipe gérer sa propre fiche Play Store. Quelle que soit votre approche, les efforts techniques sont relativement similaires.
Le tableau suivant récapitule quelques-unes des autres différences clés entre la conservation du nom de package actuel ou l'utilisation d'un nouveau nom :
Fonctionnalité | Nom de package identique | Nouveau nom de package |
---|---|---|
Fiche Play Store | Une seule | Plusieurs |
Installation en miroir | Oui : réinstallation rapide de l'application dans l'assistant de configuration | Non |
Processus d'examen du Play Store | Blocage des examens : si l'examen échoue pour un APK, les autres APK envoyés dans la même version sont bloqués | Examens individuels |
Statistiques, métriques et indicateurs clés | Combinés : vous pouvez filtrer par nom d'appareil pour obtenir des données automobiles. | Séparés |
Référencement et classement dans les résultats de recherche | Basé sur la position actuelle | Pas de report |
Intégration à d'autres applications | Il est très probable qu'aucune modification ne soit nécessaire si le code média est partagé entre les deux APK. | Vous devrez peut-être mettre à jour l'application correspondante (par exemple, pour la lecture de l'URI avec l'Assistant Google). |
Contenu hors connexion
Le cas échéant, activez le mode hors connexion dans votre application. Les voitures avec Android Automotive OS doivent disposer de leur propre connexion de données, c'est-à-dire un forfait Internet soit inclus dans le coût du véhicule, soit payé par l'utilisateur. Toutefois, la connectivité des voitures devrait être plus variable que celle des appareils mobiles.
Quelques points à garder en tête si vous envisagez d'utiliser le mode hors connexion :
- Le meilleur moment pour télécharger du contenu est lorsque votre application est utilisée.
- Ne partez pas du principe que le Wi-Fi est disponible. Il se peut qu'une voiture ne soit jamais à portée d'un réseau Wi-Fi ou que fabricant d'équipement d'origine (OEM) ait désactivé le réseau Wi-Fi au profit d'un réseau mobile.
- Bien qu'il soit acceptable de mettre en cache intelligemment le contenu que les utilisateurs pourraient utiliser, nous vous recommandons de leur donner la possibilité de modifier ce comportement.
- L'espace disque des voitures peut varier. Vous devez donc permettre aux utilisateurs de supprimer le contenu hors connexion.
Questions fréquentes
Consultez les sections suivantes pour obtenir des réponses aux questions fréquentes concernant Android Automotive OS.
Existe-t-il des restrictions ou des recommandations concernant l'utilisation de bibliothèques et de SDK tiers ?
Il n'existe aucune consigne spécifique concernant l'utilisation de bibliothèques et de SDK tiers. Si vous choisissez d'utiliser des bibliothèques et des SDK tiers, vous devez toujours respecter toutes les exigences de qualité des applications de voiture.
Comment publier mon application Android Automotive OS à l'aide de la Google Play Console ?
Le processus de publication de l'application est semblable à celui utilisé pour publier votre application pour téléphone, mais vous vous servirez d'un facteur de forme différent. Pour autoriser votre application à utiliser le type de version d'Android Automotive OS, procédez comme suit :
- Ouvrez la Play Console.
- Sélectionnez votre application.
- Dans le menu de gauche, sélectionnez Release > Setup > Advanced settings > Form factors (Version > Configuration > Paramètres avancés > Facteurs de forme).
- Sélectionnez Add form factor > Android Automotive OS (Ajouter un facteur de forme > Android Automotive OS), puis suivez les instructions dans la Play Console.
Dépannage
Consultez les sections suivantes pour obtenir des conseils de dépannage pour Android Automotive OS.
Même après avoir désinstallé une application de la bibliothèque Car App à partir des paramètres système, un message d'erreur s'affiche lorsque j'essaie d'installer une nouvelle version.
Pour vous assurer que l'application est désinstallée, utilisez la commande
adb uninstall app.package.name
.