Cette page explique comment accéder aux composants Display Safety, les créer et les exécuter, y compris le moteur de rendu haute disponibilité (HAR), DriverUI et le moniteur de sécurité, sur les plates-formes de véhicules définis par logiciel (SDV).
Accès au code
Cette section explique comment accéder au codebase des composants d'affichage de sécurité HAR et DriverUI.
Moteur de rendu haute disponibilité
La codebase 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 de HAR est structurée comme suit :
- Framework : contient les interfaces de framework de base pour la plate-forme, l'affichage, 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 la chaîne d'outils de sécurité (compilateur de conception, moniteur de sécurité).
- Service : services spécifiques à Android pour l'envoi et la réception de données de véhicule entre les composants, et définitions des packages de données APEX.
- Prebuilts : 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 dans packages/services/display_safety/reference/harry_app.
Pour en savoir plus sur la structure de répertoires de HAR, consultez Structure du code de sécurité de l'affichage.
Moniteur de sécurité
Le codebase du moniteur de sécurité est disponible dans le dépôt principal à l'adresse packages/services/display_safety/reference/safety-monitor.
Le code du moniteur de sécurité est structuré comme suit :
main.rs: extrait les artefacts de voyant, initialise le serveur de données du véhicule et les boucles de surveillance des voyants. Les informations sur la visibilité des témoins sont comparées aux résultats de l'inspection des témoins, 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, mettant à jour la visibilité des témoins pour la boucle principale.Telltale_monitoring.rs: s'exécute en boucle, récupère une copie du tampon d'écran à l'aide de la crate screencap et inspecte les régions spécifiées pour détecter les indicateurs. Les résultats des inspections des témoins sont ensuite envoyés à la boucle principale.
DriverUI
DriverUI est disponible dans un codebase distinct, 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 non groupées et Google, consultez Intégrer des applications non groupées.
Compiler et exécuter
Cette section détaille le processus de compilation et d'exécution des cibles pour le HAR dans SDV Media et DriverUI dans l'infodivertissement embarqué (IVI) SDV afin d'obtenir la solution de cluster complète avec SDV.

Figure 1. Affichez la structure de VM double de Safety.
Créer une cible multimédia HAR et SDV
- Cible média de base :
sdv_media_cf- Description : cible dédiée à la pile multimédia SDV, facilitant 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_display_safety/ - Exécution de la compilation :
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
Créer l'UI du conducteur
À partir de la branche ub-automotive-master, vous pouvez créer des applications non groupées à l'aide de CommandLine ou d'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. Créez 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 terminée, l'APK DriverUI est disponible à l'emplacement suivant : 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.
Créer une cible IVI SDV avec DriverUI
- Cible de base :
sdv_ivi_cf- Description : sert de cible SDV de base pour l'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 de sécurité de l'affichage. Cette cible est essentielle pour la validation des services et des interactions de Display Safety dans le tableau de bord.
- Emplacement du répertoire :
device/google/sdv_display_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-aosp_current-userdebug m -j
Déploiement cible
Une fois le processus de compilation terminé pour les deux cibles, les utilitaires Cuttlefish permettent de lancer les cibles comme décrit dans cette section.
Déploiement de 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 de démarrage SDV.
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
cvd create --extra_bootconfig_args="androidboot.sdv.boot_mode=unlocked androidboot.sdv.instance_name=instance1 androidboot.virt.address=3"
Une fois l'instance créée, le terminal affiche les journaux pour accéder à la cible dans un navigateur sur un port localhost : Point your browser to https://localhost:8443 to interact with the
device..

Figure 2. Affichez la VM multimédia SDV Safety avec HAR.
Déploiement de SDV IVI et DriverUI
La cible SDV IVI DriverUI démarre à 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 des paramètres de configuration de démarrage supplémentaires et des 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-aosp_current-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 initialisé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. DriverUI fonctionne comme une application de cluster privilégiée, en exploitant la classe ClusterHomeManager (également appelée Cluster2).

Figure 3. Afficher la VM IVI SDV Safety 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. Afficher la présentation de la composition de l'affichage de sécurité.
Vous pouvez lancer la configuration de VM double à 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 écrans de machine virtuelle superposés.

Figure 5. Afficher le cluster complet Safety avec les VM SDV Media et SDV IVI.
Surveillance de la sécurité des bâtiments
Le moniteur de sécurité est conçu par défaut pour l'une des cibles multimédias SDV :
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
Au moment de l'exécution, le moniteur de sécurité utilise un ensemble par défaut d'artefacts de compilateur générés et empaqueté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, d'extraire les nouveaux artefacts de la cible et de recompiler l'image.
L'outil est compilé 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 au démarrage de la cible. Le moniteur de sécurité s'exécute en continu dans une boucle pour vérifier les éléments critiques pour la 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 entrant.
Vous pouvez consulter les journaux du moniteur de sécurité à tout moment :
adb logcat | grep har-safety-monitor