Cette page présente un aperçu de l'accès, de la création et de l'exécution des composants Display Safety, y compris le rendu haute disponibilité (HAR), DriverUI et le moniteur de sécurité, sur les plates-formes Software Defined Vehicle (SDV).
Accès au code
Cette section explique comment accéder à la base de code des composants HAR et DriverUI de Display Safety.
Rendu haute disponibilité
La base de code du moteur de rendu à haute disponibilité (HAR) est disponible dans le checkout du dépôt principal à l'adresse packages/services/display_safety/.
La codebase pour HAR est structurée comme suit :
- Framework : contient les interfaces de framework de base pour la plate-forme, le rendu, l'animation et l'audio.
- Référence : contient des implémentations spécifiques à la plate-forme pour les interfaces de framework, ainsi que le code de l'application de référence HAR et de la chaîne d'outils de sécurité (Design Compiler, moniteur de sécurité).
- Service : services spécifiques à Android pour l'envoi et la réception de données du véhicule entre les composants, et définitions des packages de données APEX.
- Prédéfinis : fournit des wrappers pour les binaires prédéfinis tels que la bibliothèque graphique Impeller.
Le code de l'application de référence Harry se trouve sur packages/services/display_safety/reference/harry_app.
Pour en savoir plus sur la structure des répertoires HAR, consultez Structure du code de sécurité de l'écran.
Surveillance de la sécurité
Le code de base du moniteur de sécurité est disponible dans le cadre de l'extraction du dépôt principal sur packages/services/display_safety/reference/safety-monitor.
Le code du moniteur de sécurité est structuré comme suit :
main.rs: récupère les artefacts révélateurs, initialise le serveur de données du véhicule et les boucles de surveillance des voyants. Les informations sur la visibilité des voyants sont comparées aux résultats de l'inspection des voyants, et les résultats sont fournis à l'aide des journaux SDV.Vehicle_data_server.rs: serveur qui s'abonne aux données du véhicule, en mettant à jour la visibilité des voyants pour la boucle principale.Telltale_monitoring.rs: s'exécute en boucle, récupère une copie du tampon d'écran à l'aide du crate screencap et inspecte les régions spécifiées pour les signaux. Les résultats des inspections sont ensuite envoyés à la boucle principale.
DriverUI
DriverUI est disponible dans un codebase non groupé, auquel vous pouvez accéder à partir de la branche ub-automotive-master.
mkdir ub-automotive-master && cd ub-automotive-master
repo init -u https://android.googlesource.com/platform/manifest -b ub-automotive-master
repo sync -cq
Pour en savoir plus sur les sources Google et non groupées, consultez Intégrer des applications non groupées.
Compiler et exécuter
Cette section décrit en détail le processus de compilation et d'exécution des cibles pour le HAR dans SDV Media et DriverUI dans SDV In-Vehicle Infotainment (IVI) afin d'obtenir la solution de cluster complète avec SDV.

Figure 1. Structure à double VM de Display Safety.
Créer une cible média HAR et SDV
- Cible média de base :
sdv_media_cf- Description : cible dédiée à la pile multimédia SDV, qui facilite les tests isolés de différents frameworks multimédias.
- Emplacement du répertoire :
device/google/sdv/
- Cible intégrée HAR :
sdv_media_har_cf- Description : cette cible intègre la pile multimédia au HAR, en exécutant SDV Media sur Cuttlefish.
- Emplacement du répertoire :
device/google/sdv_dsplay_safety/ - Exécution de la compilation :
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
Créer l'interface utilisateur du pilote
À partir de la branche ub-automotive-master, vous pouvez créer des applications non groupées à l'aide de CommandLine ou AndroidStudio.
Dans Android Studio, importez le fichier Gradle :
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
Il s'agit du projet Gradle principal avec toutes les applications non groupées, y compris DriverUI. Compilez le projet à l'aide de Gradle :
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
Une fois la compilation réussie, le fichier APK DriverUI est disponible sur out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/
driver-ui-default-debug.apk.
Le code DriverUI est disponible sur packages/apps/Car/DriverUI
Remarque : DriverUI est un sous-module du projet Gradle principal. Toutes les tâches Gradle sont donc exécutées à l'aide de aaos-apps-gradle-project.
Compiler la cible SDV IVI avec DriverUI
- Cible de base :
sdv_ivi_cf- Description : il s'agit de la cible SDV de base pour IVI sur l'architecture x86-64.
- Emplacement du répertoire :
device/google/sdv/
Cible intégrée à DriverUI :
sdv_ivi_cf_ds- Description : cette cible étend la configuration IVI de base pour intégrer les composants Display Safety. Cette cible est essentielle pour la validation des services et des interactions liés à la sécurité de l'affichage dans le combiné d'instruments.
- Emplacement du répertoire :
device/google/sdv_dsplay_safety/ Ajouter le binaire DriverUI : copiez
DriverUI.apkdanspackages/apps/Car/DriverUIPrebuiltavec un fichier BlueprintAndroid.bp.# Create a blueprint file, contents of this file are shown in the next step touch /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/Android.bp # Copy DriverUI.apk built cp /path/to/ub-automotive-master/out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/driver-ui-default-debug.apk /path/to/aosp_repo_root/packages/apps/Car/DriverUIPrebuilt/DriverUI.apk
Le Android.bp doit être configuré pour utiliser le nom de module DriverUIPrebuilt et remplacer DriverUIStubApp :
android_app_import {
name: "DriverUIPrebuilt",
overrides: ["DriverUIStubApp"],
apk: "DriverUI.apk",
privileged: true,
product_specific: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.driverui"],
optional_uses_libs: [
"androidx.window.extensions",
"androidx.window.sidecar",
],
enforce_uses_libs: false,
dex_preopt: {
enabled: false,
},
}
Exécution de la compilation :
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-trunk_staging-userdebug m -j
Déploiement cible
Une fois le processus de compilation terminé pour les deux cibles, les utilitaires Cuttlefish permettent de les lancer, comme décrit dans cette section.
Déploiement SDV Media et HAR
La cible HAR est créée à l'aide de la configuration sdv-media-config.json prédéfinie, qui est spécifiée dans device/google/sdv_media_cf.mk.
Remarque : SDV Media et SDV IVI sont tous deux lancés en mode de démarrage Unlocked pour le cluster Display Safety. Pour en savoir plus, consultez Mode Boot SDV.
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance1 androidboot.virt.address=3"
Une fois le terminal créé, les journaux s'affichent pour accéder à la cible dans le navigateur sur un port localhost : Point your browser to https://localhost:8443 to interact with the
device.

Figure 2. VM Media SDV Display Safety avec HAR.
Déploiement de SDV IVI et DriverUI
La cible SDV IVI DriverUI s'initialise à l'aide de l'élément sdv-ivi-config.json existant défini dans device/google/sdv_ivi_cf.mk. Vous pouvez également spécifier d'autres paramètres de configuration du démarrage et les dimensions d'affichage appropriées pour l'écran du cluster.
# In the root of the Android source
source build/envsetup.sh
lunch sdv_ivi_cf_ds-trunk_staging-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance2 androidboot.virt.address=4" --display1=width=1920,height=720
Une fois la cible lancée, le terminal affiche les journaux permettant d'accéder à la cible dans le navigateur sur un port localhost : Point your browser to https://localhost:8443 to
interact with the device.
Le déploiement des cibles SDV-IVI et DriverUI initialise deux écrans : un pour le système SDV-IVI et un autre pour DriverUI. L'interface utilisateur du pilote fonctionne comme une application de cluster privilégiée, en tirant parti de la classe ClusterHomeManager (également appelée Cluster2).

Figure 3. Afficher la VM IVI SDV de sécurité avec DriverUI.
Déploiement du cluster de VM double
Cuttlefish permet de lancer deux machines virtuelles (VM) à l'aide d'une configuration à double VM pour obtenir une superposition d'affichage.

Figure 4. Présentation de la composition de l'affichage de sécurité.
Vous pouvez lancer la configuration à double VM à l'aide de ds-toolkit disponible sur packages/services/display_safety/service/.
m ds_toolkit
ds_toolkit launch
Une fois la configuration lancée, le terminal affiche les journaux permettant d'accéder à la cible dans le navigateur sur un port localhost : Point your browser to https://localhost:8443 to
interact with the device.
Cela lance les deux cibles Cuttlefish dans un cluster entièrement opérationnel avec les deux affichages de machine virtuelle superposés.

Figure 5. Cluster complet Display Safety avec les VM SDV Media et SDV IVI.
Surveillance de la sécurité des bâtiments
Le moniteur de sécurité est créé par défaut pour la cible SDV Media :
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
Lors de l'exécution, le moniteur de sécurité utilise un ensemble par défaut d'artefacts de compilation générés et regroupés dans l'APEX pour l'affichage du cluster de référence.
De nouveaux artefacts peuvent être générés en exécutant har-design-compiler. Cet outil s'exécute sur la cible pour générer des artefacts à partir d'une conception. Nous vous recommandons d'exécuter l'outil, de récupérer les nouveaux artefacts de la cible et de reconstruire l'image.
L'outil est créé et installé sur la cible par défaut.
# Run the compiler on the target
adb shell har_design_compiler -c </path/to/artifacts> -o /data/local/tmp/
# Pull the artifacts to the local filesystem
adb pull data/local/tmp/artifacts services/harry-prebuilt/data/assets/
# Rebuild the image
m -j
Le moniteur de sécurité s'initialise lorsque la cible est démarrée. Le moniteur de sécurité s'exécute en continu en boucle pour vérifier les éléments critiques de sécurité à l'écran par rapport à ce qui est attendu en analysant le tampon d'écran et les signaux de données du véhicule entrants.
Vous pouvez consulter les journaux du contrôle de la sécurité à tout moment :
adb logcat | grep har-safety-monitor