Créer des applications vidéo pour Android Automotive OS

Android Automotive OS permet aux utilisateurs d'exécuter votre application vidéo sur le système d'infoloisirs d'une voiture à l'arrêt.

Tester l'application sur un émulateur d'Android Automotive OS

Pour commencer à compiler votre application pour Android Automotive OS, testez d'abord votre application mobile existante sur un émulateur Android Automotive OS. Pour configurer un émulateur, suivez la procédure décrite dans Tester des applications Android pour voitures. Vous pouvez ensuite exécuter l'application en suivant les instructions de la section Exécuter votre application sur l'émulateur.

Lorsque vous exécutez votre application, soyez attentif aux problèmes de compatibilité suivants :

  • Les écrans d'infoloisirs ont une orientation fixe. Pour respecter les consignes relatives à la qualité des applications pour voitures, les applications doivent être compatibles avec les orientations portrait et paysage.
  • Les API disponibles sur d'autres appareils peuvent ne pas l'être sur Android Automotive OS. Par exemple, certaines API des services Google Play ne sont pas disponibles sur Android Automotive OS. Consultez la section Désactiver des fonctionnalités pour découvrir comment gérer ces problèmes.

Configurer les fichiers manifestes de votre application

Pour cibler Android Automotive OS, votre application doit comporter certaines entrées dans le fichier manifeste. Avec elles, les applications ciblant Android Automotive OS sont envoyées au Play Store via un type de version Automotive distinct. Elles seront soumises à un processus d'examen manuel afin de s'assurer qu'elles peuvent être utilisées de façon sécurisée dans une voiture. Pour en savoir plus, consultez Distribuer des applications Android pour voitures.

Fonctionnalités requises pour Android Automotive OS

Pour apparaître sur le Play Store destiné aux voitures, les applications vidéo conçues pour Android Automotive OS doivent inclure les éléments <uses-feature> et <uses-library> suivants dans le fichier AndroidManifest.xml.

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

Les applications envoyées à des canaux non destinés aux voitures ne peuvent pas déclarer les éléments <uses-feature> affichés dans l'exemple de code précédent, car elles ne peuvent pas dépendre de matériel spécifique aux voitures. Par conséquent, pour proposer la même application pour des appareils automobiles et non automobiles, vous devez générer au moins deux types d'applications : l'un pour les appareils automobiles et l'autre pour les appareils mobiles. Pour en savoir plus sur la création de ces types de produit, consultez les documents suivants :

Les deux types d'application peuvent partager le même nom de package, mais ils doivent utiliser des codes de version différents, car ils seront importés séparément dans le Play Store.

Au lieu d'utiliser des types distincts, vous pouvez utiliser des noms de package distincts pour les APK ou les app bundles pour mobiles et pour voitures. Pour comprendre les avantages et inconvénients propres à chaque approche, consultez les noms de packages dans le guide du développeur d'applications multimédias.

En plus des éléments présentés dans l'exemple de code précédent, les applications conçues pour Android Automotive OS doivent inclure les éléments <uses-feature> suivants dans l'élément racine <manifest> :

<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"/>

Définir explicitement ces fonctionnalités comme non requises garantit que votre application n'entre pas en conflit avec les fonctionnalités matérielles disponibles sur les appareils Android Automotive OS.

Marquer votre application comme une application vidéo

Pour indiquer que votre application Android Auto est compatible avec les vidéos, ajoutez un fichier XML nommé automotive_app_desc.xml au répertoire res/xml/ de votre projet. Dans ce fichier, incluez le contenu suivant :

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

Ensuite, dans l'élément <application> de votre fichier manifeste, ajoutez l'élément <meta-data> suivant qui mentionne le fichier XML :

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

Ne pas inclure les activités optimisées pour la distraction

Les applications vidéo sont conçues pour être utilisées uniquement à l'arrêt. Par conséquent, n'incluez pas l'élément <meta-data> suivant dans un élément <activity> :

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

Sans ces métadonnées, le système d'exploitation bloque automatiquement les activités de votre application dès que le véhicule passe en mode Voiture afin d'éviter toute distraction pour le conducteur. Il s'agit d'un rappel de cycle de vie onPause, au cours duquel vous devez suspendre la lecture vidéo et audio à partir de votre application.

Optimiser votre application pour Android Automotive OS

Pour offrir à vos utilisateurs la meilleure expérience possible, vous devrez peut-être activer ou désactiver certaines fonctionnalités selon que votre application est exécutée sur une voiture ou non.

Désactiver des fonctionnalités

Si vous publiez une application mobile existante sur Android Automotive OS, certaines fonctionnalités peuvent ne pas être pertinentes ou disponibles. Par exemple, les voitures ne permettent généralement pas d'accéder aux appareils photos. De plus, seul un sous-ensemble de services Google Play est disponible sur Android Automotive OS. Pour en savoir plus, consultez Services Google Play pour voitures.

Vous pouvez utiliser l'API PackageManager.hasSystemFeature pour détecter si l'application s'exécute sur Android Automotive OS en recherchant la fonctionnalité FEATURE_AUTOMOTIVE. comme illustré dans l'exemple suivant :

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
}

Si votre application comporte également un composant Android Auto, vous pouvez utiliser l'API CarConnection de la bibliothèque d'applications Android for Cars pour détecter si l'application s'exécute sur Android Automotive OS, sur Android Auto, ou si elle n'est pas connectée du tout à une voiture.

En ce qui concerne la fonctionnalité Picture-in-picture (PIP), suivez les bonnes pratiques pour vérifier si elle est disponible et si elle réagit de manière appropriée.

Gérer les situations hors connexion

Alors que les voitures sont de plus en plus connectées à Internet, de plus en plus d'applications peuvent fonctionner sans connexion Internet, comme dans les cas suivants :

  • Les utilisateurs peuvent désactiver les données mobiles proposées dans le cadre d'un abonnement du constructeur automobile.
  • L'accès aux données mobiles peut être limité dans certaines régions.
  • Les voitures dotées de signaux Wi-Fi peuvent ne pas être à portée du signal Wi-Fi, ou un OEM peut désactiver le Wi-Fi au profit d'un réseau mobile.

Préparez-vous à gérer ces scénarios dans votre application en dégradant de manière élégante les fonctionnalités qui dépendent de l'accès à Internet, par exemple en proposant du contenu hors connexion. Pour en savoir plus, consultez les bonnes pratiques pour optimiser la mise en réseau.

Utiliser d'autres ressources

Pour vous aider à adapter votre application automobile, vous pouvez utiliser le qualificatif de ressource car afin de fournir d'autres ressources lorsque vous l'exécutez sur un véhicule Android Automotive OS. Par exemple, si vous utilisez des ressources de dimension pour stocker des valeurs de marge intérieure, vous pouvez recourir à une valeur plus élevée pour l'ensemble de ressources car afin d'augmenter la taille des zones cibles tactiles.

Tester des applications vidéo sur Android Automotive OS

En général, suivez les instructions disponibles dans la section Tester les applications Android pour les voitures. Seuls les émulateurs des SDK 30 et 32 disponibles via Android Studio incluent la bibliothèque android-automotive-video. Vous devez donc les utiliser pour tester la version Automotive OS de votre application. Les émulateurs de SDK inférieurs n'ont pas cette bibliothèque. Par conséquent, les installations adb des applications qui en ont besoin échoueront. La bibliothèque peut être incluse dans les véhicules de production à des niveaux d'OS inférieurs.

Questions fréquentes

Widevine DRM est-il compatible ?

Oui, Widevine DRM L3 est compatible avec Android Automotive OS.