Pierwsze kroki z Display Safety

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.

Maszyny wirtualne gościa

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.apk do packages/apps/Car/DriverUIPrebuilt wraz z plikiem Blueprint Android.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.

HAR na maszynie wirtualnej SDV Media

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).

DriverUI na maszynie wirtualnej SDV-IVI

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.

Kompozycja wyświetlania

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.

Wyświetlanie pełnego klastra Bezpieczeństwo

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