La compatibilité avec les écrans de voiture permet aux applications pour téléphones et tablettes de fonctionner correctement sur les appareils automobiles.
Fonctionnalités incluses :
- Scaling PPP : mettez à l'échelle les éléments d'interface utilisateur de l'application en fonction du PPP de l'écran.
- Zone sécurisée pour le rendu des applications : limitez le contenu de l'application à une zone sécurisée, en évitant qu'il ne soit masqué par les éléments d'interface utilisateur du système.
- Logique de classification des applications : identifiez les applications qui nécessitent la compatibilité avec les écrans de voiture.
Fonctionnalités de compatibilité
La plate-forme fournit plusieurs mécanismes pour optimiser le rendu et le scaling des applications sur les écrans automobiles.
Scaling PPP
La fonctionnalité de scaling PPP permet aux fabricants d'appareils de mettre à l'échelle le PPP de densité des applications individuelles ou de toutes les applications qui nécessitent la compatibilité avec les écrans de voiture.
Pour configurer le scaling de densité des applications :
Ajoutez un fichier de configuration
/product/etc/display_compat_config.xml:<?xml version="1.0" encoding="utf-8"?> <!-- Each scale factor can have the following attributes display (required) Specifies the displayId to which this scale factor will be applied. packageName (optional) Specifies the packageName to which the scale factor will be applied. If omitted, the scaling will apply to all packages. For example: <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale> This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled. --> <config> <scale display="0">1.0</scale> </config>Pour définir une valeur de scaling par défaut pour toutes les applications qui nécessitent la compatibilité avec les écrans de voiture, remplacez le scaling par défaut de l'écran 0 par
<scale display="0">1.0</scale>. La valeur correspond à la valeur de scaling inverse. Par exemple, pour mettre à l'échelle les applications qui nécessitent la compatibilité avec les écrans de voiture à 1,5x, définissez la valeur de scaling sur(1 / 1.5) = 0.67:<config> <scale display="0">0.67</scale> </config>Pour définir une valeur de scaling pour une application spécifique, ajoutez un nouvel élément
scaleà la configuration. Dans cet exemple, YouTube Automotive est mis à l'échelle à 1,43x (par exemple,(1 / 1.43) = 0.7).<config> <scale display="0">0.67</scale> <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale> </config>
Si le système était en cours d'exécution lorsque vous avez modifié /product/etc/display_compat_config.xml, vous devez vider le cache pour que la nouvelle configuration prenne effet. Utilisez cette macro pour vider le cache :
SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
echo "Deleting Display Compat config for user: $USER_ID"
adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
sleep 1
echo
done
Ajoutez le fichier de configuration et la déclaration de fonctionnalité à une compilation AAOS, par exemple, dans
vendor/OEM_NAME/products/displaycompat:# File: vendor/OEM_NAME/products/displaycompat/Android.bp prebuilt_etc { name: "display_compat_config", filename: "display_compat_config.xml", src: "display_compat_config.xml", product_specific: true, }
Zone sécurisée de l'application
Les applications pour téléphones et tablettes ne sont souvent pas conçues pour les grandes barres système présentes dans les voitures. Ces applications ne doivent pas pouvoir dessiner de contenu sous les barres système ni les superpositions système. Sinon, elles peuvent afficher des éléments interactifs dans une zone masquée pour l'utilisateur final.
La zone sécurisée de l'application est implémentée à l'aide de l'UI évolutive SafeBounds.
Logique de classification des applications
Vous pouvez utiliser CarPackageManager.requiresDisplayCompat(..) pour créer des fonctionnalités supplémentaires qui améliorent la compatibilité des applications. Par exemple, vous pouvez utiliser cette fonctionnalité pour ajouter un bouton Retour ou une UI supplémentaire.
Les développeurs d'applications peuvent activer la compatibilité avec les écrans de voiture en incluant des métadonnées dans le fichier manifeste de l'application :
<meta-data
android:name="android.software.car.display_compatibility"
android:value="true" />
Le système évalue si une application nécessite des fonctionnalités de compatibilité avec les écrans de voiture à l'aide de la logique suivante (évaluée dans l'ordre) :
- Métadonnées du fichier manifeste
android.software.car.display_compatibility:- Si
android:value="true"→ L'application nécessite la compatibilité - Si
android:value="false"→ L'application ne nécessite pas la compatibilité - Si les métadonnées sont manquantes, passez à la vérification suivante.
- Si
- Utilise la fonctionnalité
android.hardware.type.automotive:- Si la fonctionnalité est déclarée (que
android:requiredsoittrueoufalse) → L'application ne nécessite pas la compatibilité - Si la fonctionnalité est manquante, passez à la vérification suivante.
- Si la fonctionnalité est déclarée (que
- Activités de l'application :
- Si l'application ne comporte aucune activité (telle que des RRO, des applications sans interface ou des services) → L'application ne nécessite pas la compatibilité
- Si l'application comporte des activités, passez à la vérification suivante.
- Informations sur l'application
- Si l'application est privilégiée → L'application ne nécessite pas la compatibilité
- Si l'application est une application système (
FLAG_SYSTEM) → L'application ne nécessite pas la compatibilité - Sinon, passez à la vérification suivante.
- Informations sur la signature
- Si l'application est signée par la plate-forme (avec la même signature que le framework Android) → L'application ne nécessite pas la compatibilité
- Sinon, passez à la vérification suivante.
- **Décision de remplacement**
- Si toutes les vérifications sont réussies sans désactivation → L'application nécessite la compatibilité
Consultez
CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.
Vérifier si l'appareil est compatible
Les appareils compatibles avec les écrans de voiture doivent déclarer la compatibilité à l'aide de la déclaration de fonctionnalité :
<feature name="android.software.car.display_compatibility" />