Na tej stronie znajdziesz omówienie dostępu do komponentów bezpieczeństwa wyświetlacza, w tym renderera o wysokiej dostępności (HAR), DriverUI i monitora bezpieczeństwa, oraz ich tworzenia i uruchamiania na platformach pojazdów definiowanych programowo (SDV).
Dostęp do kodu
W tej sekcji opisano, jak uzyskać dostęp do bazy kodu komponentów HAR i DriverUI Display Safety.
Moduł renderujący o wysokiej dostępności
Baza kodu renderera o wysokiej dostępności (HAR) jest dostępna w ramach głównego repozytorium pod adresem packages/services/display_safety/.
Baza kodu HAR ma następującą strukturę:
- Framework: zawiera podstawowe interfejsy platformy, renderowania, animacji i dźwięku.
- Reference: zawiera implementacje interfejsów platformy dla konkretnych platform, a także kod aplikacji referencyjnej HAR i łańcuch narzędzi bezpieczeństwa (Design Compiler, monitor bezpieczeństwa).
- Usługa: usługi na Androida do wysyłania i odbierania danych pojazdu między komponentami oraz definicje pakietów danych APEX.
- Gotowe: udostępnia kod otaczający dla gotowych plików binarnych, takich jak biblioteka graficzna Impeller.
Kod aplikacji referencyjnej Harry znajduje się w packages/services/display_safety/reference/harry_app.
Szczegółową strukturę katalogów HAR znajdziesz w artykule Struktura kodu bezpieczeństwa wyświetlania.
Monitor bezpieczeństwa
Baza kodu monitora bezpieczeństwa jest dostępna w ramach głównego repozytorium w folderze packages/services/display_safety/reference/safety-monitor.
Kod monitora bezpieczeństwa ma taką strukturę:
main.rs: pobiera artefakty kontrolek, inicjuje serwer danych pojazdu i pętle monitorowania kontrolek. Informacje o widoczności kontrolek są porównywane z wynikami kontroli, a wyniki są podawane w logach SDV.Vehicle_data_server.rs: serwer, który subskrybuje dane pojazdu i aktualizuje widoczność kontrolek w głównej pętli.Telltale_monitoring.rs: działa w pętli, pobiera kopię bufora ekranu za pomocą skrzynki screencap i sprawdza określone regiony pod kątem wskaźników. Wyniki kontroli kontrolek są następnie wysyłane do pętli głównej.
DriverUI
Interfejs DriverUI jest dostępny jako część niepowiązanej bazy kodu, do której możesz uzyskać dostęp z gałęzi 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
Więcej informacji o aplikacjach niepowiązanych i źródle Google znajdziesz w artykule Integracja aplikacji niepowiązanych.
Tworzenie i uruchamianie
W tej sekcji opisano proces kompilowania i wykonywania elementów docelowych dla HAR w SDV Media i DriverUI w SDV samochodowy system multimedialny (IVI) w celu uzyskania pełnego rozwiązania klastrowego z SDV.

Rysunek 1. Wyświetl strukturę podwójnej maszyny wirtualnej Display Safety.
Tworzenie celu HAR i SDV Media
- Podstawowy cel medialny:
sdv_media_cf- Opis: dedykowany cel dla stosu multimediów SDV, ułatwiający izolowane testowanie różnych platform multimedialnych.
- Lokalizacja katalogu:
device/google/sdv/
- Cel zintegrowany z HAR:
sdv_media_har_cf- Opis: ten cel integruje stos multimediów z HAR, wykonując SDV Media na Cuttlefish.
- Lokalizacja katalogu:
device/google/sdv_display_safety/ - Wykonywanie kompilacji:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
Tworzenie interfejsu kierowcy
Z gałęzi ub-automotive-master możesz tworzyć aplikacje niepowiązane za pomocą CommandLine lub AndroidStudio.
W Android Studio zaimportuj plik Gradle:
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
To jest główny projekt Gradle ze wszystkimi aplikacjami, które nie są częścią pakietu, w tym DriverUI. Skompiluj projekt za pomocą Gradle:
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
Po pomyślnej kompilacji plik APK DriverUI jest dostępny w out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/
driver-ui-default-debug.apk
Kod DriverUI jest dostępny w katalogu packages/apps/Car/DriverUI
Uwaga: DriverUI to moduł podrzędny głównego projektu Gradle, więc wszystkie zadania Gradle są uruchamiane za pomocą aaos-apps-gradle-project.
Tworzenie celu SDV IVI z DriverUI
- Cel podstawowy:
sdv_ivi_cf- Opis: jest to podstawowy cel SDV dla samochodowego systemu multimedialnego w architekturze x86-64.
- Lokalizacja katalogu:
device/google/sdv/
Zintegrowany cel DriverUI:
sdv_ivi_cf_ds- Opis: ten cel rozszerza podstawową konfigurację samochodowego systemu multimedialnego o komponenty Display Safety. Ten cel jest niezbędny do weryfikacji usług Display Safety i interakcji w ramach zestawu wskaźników.
- Lokalizacja katalogu:
device/google/sdv_display_safety/ Dodaj plik binarny DriverUI: skopiuj
DriverUI.apkdopackages/apps/Car/DriverUIPrebuiltwraz z plikiem 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
Plik Android.bp powinien być skonfigurowany tak, aby używał nazwy modułu DriverUIPrebuilt i zastępował 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,
},
}
Wykonywanie kompilacji:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-aosp_current-userdebug m -j
Wdrożenie docelowe
Po pomyślnym zakończeniu procesu kompilacji obu środowisk docelowych narzędzia Cuttlefish pomagają je zainicjować w sposób opisany w tej sekcji.
Wdrażanie SDV Media i HAR
Cel HAR jest tworzony przy użyciu wstępnie zdefiniowanej konfiguracji sdv-media-config.json, która jest określona w device/google/sdv_media_cf.mk.
Uwaga: SDV Media i SDV IVI są uruchamiane w trybie uruchamiania Unlocked dla klastra bezpieczeństwa wyświetlacza. Szczegółowe informacje znajdziesz w artykule Tryb uruchamiania 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"
Po utworzeniu terminal wyświetli logi, aby uzyskać dostęp do środowiska docelowego w przeglądarce na porcie lokalnego hosta: Point your browser to https://localhost:8443 to interact with the
device.

Rysunek 2. Wyświetl maszynę wirtualną Safety SDV Media z plikiem HAR.
Wdrażanie samochodowego systemu multimedialnego i interfejsu kierowcy w SDV
Cel DriverUI systemu multimedialnego SDV jest inicjowany za pomocą istniejącego elementu sdv-ivi-config.json zdefiniowanego w device/google/sdv_ivi_cf.mk. Możesz też określić dodatkowe parametry konfiguracji rozruchu i odpowiednie wymiary wyświetlania ekranu klastra.
# 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
Po zainicjowaniu celu terminal wyświetla logi umożliwiające dostęp do celu w przeglądarce na porcie lokalnego hosta: Point your browser to https://localhost:8443 to
interact with the device.
Wdrożenie elementów docelowych SDV-IVI i DriverUI inicjuje 2 wyświetlacze: jeden dla systemu SDV-IVI, a drugi dla DriverUI. DriverUI działa jako uprzywilejowana aplikacja klastra, wykorzystując klasę ClusterHomeManager (znaną również jako Cluster2).

Rysunek 3. Wyświetl maszynę wirtualną z systemem multimedialnym SDV z funkcjami bezpieczeństwa i interfejsem DriverUI.
Wdrażanie klastra z 2 maszynami wirtualnymi
Cuttlefish umożliwia uruchomienie 2 maszyn wirtualnych przy użyciu konfiguracji podwójnej maszyny wirtualnej w celu uzyskania nakładki wyświetlacza.

Rysunek 4. Wyświetl podsumowanie kompozycji wyświetlania dotyczącej bezpieczeństwa.
Konfigurację z 2 maszynami wirtualnymi możesz uruchomić za pomocą ds_toolkit dostępnego na stronie packages/services/display_safety/service/.
m ds_toolkit
ds_toolkit launch
Po uruchomieniu konfiguracji terminal wyświetla logi, aby uzyskać dostęp do celu w przeglądarce na porcie lokalnego hosta: Point your browser to https://localhost:8443 to
interact with the device.
Spowoduje to uruchomienie obu urządzeń docelowych Cuttlefish w pełni funkcjonalnym klastrze z nałożonymi na siebie wyświetlaczami obu maszyn wirtualnych.

Rysunek 5. Wyświetl pełny klaster bezpieczeństwa z maszyną wirtualną SDV Media i SDV IVI.
Monitor bezpieczeństwa budynku
Monitor bezpieczeństwa jest domyślnie tworzony dla jednego z tych celów SDV Media:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
W czasie działania monitor bezpieczeństwa używa domyślnego zestawu artefaktów kompilatora wygenerowanych i spakowanych w APEX na potrzeby wyświetlania klastra referencyjnego.
Nowe artefakty można wygenerować, uruchamiając har-design-compiler. To narzędzie działa na urządzeniu docelowym, aby generować artefakty z projektu. Zalecamy uruchomienie narzędzia, pobranie nowych artefaktów z elementu docelowego i ponowne utworzenie obrazu.
Narzędzie jest domyślnie kompilowane i instalowane na urządzeniu docelowym.
# 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
Monitor bezpieczeństwa jest inicjowany po uruchomieniu urządzenia docelowego. Monitor bezpieczeństwa będzie działać nieprzerwanie w pętli, aby weryfikować elementy ekranu o kluczowym znaczeniu dla bezpieczeństwa pod kątem oczekiwanych wartości, analizując bufor ekranu i przychodzące sygnały danych pojazdu.
Dzienniki monitorowania bezpieczeństwa możesz wyświetlić w dowolnym momencie:
adb logcat | grep har-safety-monitor