Pierwsze kroki z Display Safety

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.

Maszyny wirtualne gościa

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.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,
    },
}
  • 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.

HAR w maszynie wirtualnej SDV Media

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

DriverUI w maszynie wirtualnej SDV-IVI

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.

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

Pełny klaster bezpieczeństwa wyświetlacza

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