Na tej stronie znajdziesz omówienie dostępu do komponentów Display Safety, ich tworzenia i uruchamiania, w tym renderera o wysokiej dostępności (HAR), DriverUI i monitora bezpieczeństwa, na platformach Software Defined Vehicle (SDV).
Dostęp do kodu
W tej sekcji dowiesz się, jak uzyskać dostęp do bazy kodu komponentów Display Safety HAR i DriverUI.
Renderer o wysokiej dostępności
Baza kodu renderera o wysokiej dostępności (HAR) jest dostępna w ramach
głównego repozytorium w packages/services/display_safety/.
Baza kodu HAR ma taką strukturę:
- Framework: zawiera podstawowe interfejsy platformy, renderowania, animacji i dźwięku.
- Reference: zawiera implementacje interfejsów platformy, a także kod aplikacji referencyjnej HAR i łańcucha narzędzi bezpieczeństwa (kompilator projektu, monitor bezpieczeństwa).
- Service: usługi specyficzne dla Androida do wysyłania i odbierania danych pojazdu między komponentami oraz definicje pakietów danych APEX.
- Prebuilts: udostępnia otoki dla wstępnie skompilowanych 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 Display Safety.
Monitor bezpieczeństwa
Baza kodu monitora bezpieczeństwa jest dostępna w ramach głównego repozytorium w packages/services/display_safety/reference/safety-monitor.
Kod monitora bezpieczeństwa ma taką strukturę:
main.rs: pobiera artefakty telltale, inicjuje serwer danych pojazdu i pętle monitorowania telltale. Informacje o widoczności telltale są porównywane z wynikami kontroli telltale, a wyniki są udostępniane za pomocą logów SDV.Vehicle_data_server.rs: serwer, który subskrybuje dane pojazdu, aktualizując widoczność telltale w pętli głównej.Telltale_monitoring.rs: działa w pętli, pobierając kopię bufora ekranu za pomocą pakietu screencap i sprawdzając określone regiony pod kątem telltale. Wyniki kontroli telltale są następnie wysyłane do pętli głównej.
DriverUI
DriverUI jest dostępny w ramach rozdzielonej 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 rozdzielonej bazie kodu i źródle Google, zobacz Integrowanie rozdzielonych aplikacji.
Kompilowanie i uruchamianie
W tej sekcji opisujemy proces kompilowania i wykonywania celów HAR w SDV Media oraz DriverUI w SDV samochodowy system multimedialny (IVI), aby uzyskać pełne rozwiązanie klastrowe z SDV.

Rysunek 1. Struktura podwójnej maszyny wirtualnej Display Safety.
Kompilowanie HAR i celu SDV Media
- Podstawowy cel multimediów:
sdv_media_cf- Opis: dedykowany cel dla stosu multimediów SDV, który ułatwia 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_dsplay_safety/ - Wykonanie kompilacji:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
Kompilowanie DriverUI
W gałęzi ub-automotive-master możesz kompilować rozdzielone aplikacje za pomocą
wiersza poleceń lub Androida Studio.
W Androidzie Studio zaimportuj plik Gradle:
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
Jest to główny projekt Gradle ze wszystkimi rozdzielonymi aplikacjami, 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 packages/apps/Car/DriverUI.
Uwaga: DriverUI to podmoduł głównego projektu Gradle, więc wszystkie zadania Gradle
są wykonywane za pomocą aaos-apps-gradle-project.
Kompilowanie celu SDV IVI z DriverUI
- Cel podstawowy:
sdv_ivi_cf- Opis: służy jako podstawowy cel SDV dla IVI w architekturze x86-64.
- Lokalizacja katalogu:
device/google/sdv/
Cel zintegrowany z DriverUI:
sdv_ivi_cf_ds- Opis: ten cel rozszerza podstawową konfigurację IVI o komponenty Display Safety. Ten cel jest niezbędny do weryfikacji usług i interakcji Display Safety w obrębie zestawu wskaźników.
- Lokalizacja katalogu:
device/google/sdv_dsplay_safety/ Dodawanie pliku binarnego 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,
},
}
Wykonanie kompilacji:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-trunk_staging-userdebug m -j
Wdrażanie celu
Po pomyślnym zakończeniu procesu kompilacji obu celów narzędzia Cuttlefish pomagają w inicjowaniu celów zgodnie z opisem w tej sekcji.
Wdrażanie SDV Media i HAR
Cel HAR jest tworzony za pomocą predefiniowanej 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 rozruchu Unlocked w przypadku klastra
Display Safety. Więcej informacji znajdziesz w artykule Tryb rozruchu 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"
Po utworzeniu terminal wyświetli 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.

Rysunek 2. Maszyna wirtualna SDV Media z HAR.
Wdrażanie SDV IVI i DriverUI
Cel SDV IVI DriverUI jest inicjowany za pomocą istniejącego pliku 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świetlacza dla ekranu klastra.
# 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
Po zainicjowaniu celu terminal wyświetli 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 celów SDV-IVI i DriverUI inicjuje 2 wyświetlacze: jeden dla systemu SDV-IVI, a drugi dla DriverUI. DriverUI działa jako uprzywilejowana aplikacja klastra, korzystając z
ClusterHomeManager klasy (znanej też jako Cluster2).

Rysunek 3. Maszyna wirtualna SDV IVI z DriverUI.
Wdrażanie klastra z 2 maszynami wirtualnymi
Cuttlefish umożliwia uruchamianie 2 maszyn wirtualnych za pomocą konfiguracji z 2 maszynami wirtualnymi, aby uzyskać nakładkę wyświetlacza.

Rysunek 4. Omówienie kompozycji wyświetlacza Display Safety.
Konfigurację z 2 maszynami wirtualnymi możesz uruchomić za pomocą ds-toolkit dostępnego w packages/services/display_safety/service/.
m ds_toolkit
ds_toolkit launch
Po uruchomieniu konfiguracji terminal wyświetli 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.
Spowoduje to uruchomienie obu celów Cuttlefish w pełni działającym klastrze z nałożonymi na siebie wyświetlaczami maszyn wirtualnych.

Rysunek 5. Pełny klaster Display Safety z maszyną wirtualną SDV Media i SDV IVI.
Kompilowanie monitora bezpieczeństwa
Monitor bezpieczeństwa jest domyślnie kompilowany dla celu SDV Media:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
W czasie działania monitor bezpieczeństwa używa domyślnego zestawu artefaktów kompilatora wygenerowanych i spakowanych do APEX na potrzeby referencyjnego wyświetlacza klastra.
Nowe artefakty można wygenerować, uruchamiając har-design-compiler. To narzędzie działa na celu, aby generować artefakty na podstawie projektu. Zalecamy uruchomienie narzędzia, pobranie nowych artefaktów z celu i ponowne skompilowanie obrazu.
Narzędzie jest domyślnie kompilowane i instalowane na celu.
# 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 podczas uruchamiania celu. Monitor bezpieczeństwa będzie działać w pętli, aby weryfikować elementy krytyczne dla bezpieczeństwa na ekranie w porównaniu z oczekiwanymi elementami, analizując bufor ekranu i przychodzące sygnały danych pojazdu.
W każdej chwili możesz wyświetlić logi monitora bezpieczeństwa:
adb logcat | grep har-safety-monitor