На этой странице рассказывается, как получить доступ к компонентам Display Safety, собрать и запустить их на платформах SDV. К этим компонентам относятся высокодоступный рендерер (HAR), DriverUI и монитор безопасности.
Доступ по коду
В этом разделе рассказывается, как получить доступ к базе кода для компонентов HAR и DriverUI Display Safety.
Отрисовщик с высокой доступностью
База кода для средства визуализации с высокой доступностью (HAR) доступна в составе извлечения основного репозитория по адресу packages/services/display_safety/.
База кода HAR структурирована следующим образом:
- Фреймворк. Содержит основные интерфейсы фреймворка для платформы, рендеринга, анимации и аудио.
- Reference. Содержит реализации интерфейсов фреймворка для конкретных платформ, а также код для эталонного приложения HAR и тулчейн безопасности (Design Compiler, монитор безопасности).
- Сервис. Сервисы Android для отправки и получения данных автомобиля между компонентами, а также определения для пакетов данных APEX.
- Prebuilts. Оболочки для готовых двоичных файлов, например графической библиотеки Impeller.
Код эталонного приложения Harry находится в каталоге packages/services/display_safety/reference/harry_app.
Подробная структура каталога HAR приведена в разделе Структура кода безопасности медийной рекламы.
Монитор безопасности
База кода для монитора безопасности доступна в основном репозитории по адресу packages/services/display_safety/reference/safety-monitor.
Код монитора безопасности имеет следующую структуру:
main.rs: извлекает артефакты индикаторов, инициализирует сервер данных автомобиля и циклы мониторинга индикаторов. Информация о видимости контрольных ламп сравнивается с результатами их проверки, которые предоставляются в журналах SDV.Vehicle_data_server.rs– сервер, который подписывается на данные автомобиля и обновляет видимость индикаторов для основного цикла.Telltale_monitoring.rs: работает в цикле, получая копию буфера экрана с помощью крейта screencap и проверяя указанные области на наличие признаков. Результаты проверок контрольных ламп затем отправляются в основной цикл.
DriverUI
DriverUI доступен в виде отдельной базы кода, которую можно получить из ветки 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
Подробнее об интеграции отдельных приложений…
Сборка и запуск
В этом разделе подробно описан процесс компиляции и выполнения целей для HAR в SDV Media и DriverUI в SDV In-Vehicle Infotainment (IVI) для достижения полного кластерного решения с SDV.

Рисунок 1. Структура Display Safety с двумя ВМ.
Создать цель для HAR и SDV Media
- Базовая цель по медиа:
sdv_media_cf- Описание. Специальная цель для медиастека SDV, которая позволяет изолированно тестировать различные медиафреймворки.
- Расположение каталога:
device/google/sdv/
- Целевая рентабельность инвестиций в рекламу с учетом HAR:
sdv_media_har_cf- Описание. Эта цель интегрирует медиастек с HAR, выполняя SDV Media на Cuttlefish.
- Расположение каталога:
device/google/sdv_display_safety/ - Выполнение сборки:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
Создайте DriverUI
Из ветки ub-automotive-master можно создавать отдельные приложения с помощью командной строки или Android Studio.
Импортируйте файл Gradle в Android Studio:
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
Это основной проект Gradle со всеми непакетными приложениями, включая DriverUI. Создайте проект с помощью Gradle:
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
После успешной сборки APK-файл DriverUI будет доступен по адресу out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/
driver-ui-default-debug.apk.
Код DriverUI доступен по адресу packages/apps/Car/DriverUI.
Примечание. DriverUI – это подмодуль основного проекта Gradle, поэтому все задачи Gradle выполняются с помощью aaos-apps-gradle-project.
Как создать целевую систему IVI для SDV с помощью DriverUI
- Базовая цель:
sdv_ivi_cf- Описание. Базовая цель SDV для IVI на архитектуре x86-64.
- Расположение каталога:
device/google/sdv/
DriverUI Integrated Target:
sdv_ivi_cf_ds- Описание. Эта цель расширяет базовую конфигурацию IVI, чтобы включить компоненты безопасности дисплея. Эта цель необходима для проверки служб безопасности дисплея и взаимодействий в приборной панели.
- Расположение каталога:
device/google/sdv_display_safety/ Добавьте двоичный файл DriverUI. Скопируйте
DriverUI.apkвpackages/apps/Car/DriverUIPrebuiltвместе с файлом 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
В Android.bp должно быть указано название модуля DriverUIPrebuilt и переопределение 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,
},
}
Выполнение сборки:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-aosp_current-userdebug m -j
Целевое развертывание
После успешного завершения сборки для обеих целей утилиты Cuttlefish помогут запустить цели, как описано в этом разделе.
Развертывание SDV Media и HAR
Цель HAR создается с помощью предопределенной конфигурации sdv-media-config.json, которая указана в device/google/sdv_media_cf.mk.
Примечание. SDV Media и SDV IVI запускаются в режиме загрузки Unlocked для Display Safety Cluster. Подробную информацию можно найти в статье Режим загрузки 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"
После создания терминал покажет журналы для доступа к цели в браузере через порт localhost: Point your browser to https://localhost:8443 to interact with the
device..

Рисунок 2. Показать виртуальную машину Safety SDV Media с HAR.
Развертывание SDV IVI и DriverUI
Цель DriverUI для IVI-системы SDV-автомобиля инициализируется с помощью существующего sdv-ivi-config.json, определенного в device/google/sdv_ivi_cf.mk. Вы также можете указать дополнительные параметры конфигурации загрузки и подходящие размеры экрана для кластера.
# 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
После инициализации цели в терминале появятся журналы для доступа к цели в браузере через порт localhost: Point your browser to https://localhost:8443 to
interact with the device..
При развертывании целевых объектов SDV-IVI и DriverUI инициализируются два дисплея: один для системы SDV-IVI, а другой для DriverUI. DriverUI работает как привилегированное приложение для приборной панели, используя класс ClusterHomeManager (также известный как Cluster2).

Рисунок 3. Показать виртуальную машину Safety SDV IVI с DriverUI.
Развертывание кластера из двух ВМ
Cuttlefish позволяет запустить две виртуальные машины (ВМ) в конфигурации с двумя ВМ, чтобы получить наложение дисплея.

Рисунок 4. Обзор композиции дисплея безопасности дисплея.
Вы можете запустить конфигурацию с двумя виртуальными машинами, используя ds_toolkit, доступный по адресу packages/services/display_safety/service/.
m ds_toolkit
ds_toolkit launch
После запуска конфигурации в терминале появятся журналы для доступа к цели в браузере через порт localhost: Point your browser to https://localhost:8443 to
interact with the device..
Это запустит обе цели Cuttlefish в полностью рабочем кластере с наложением обоих дисплеев виртуальных машин.

Рисунок 5. Показывать полную панель безопасности с SDV Media и SDV IVI VM.
Монитор безопасности здания
Монитор безопасности по умолчанию создается для одной из следующих целей SDV Media:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
Во время выполнения монитор безопасности использует набор артефактов компилятора по умолчанию, сгенерированных и упакованных в APEX для эталонного дисплея кластера.
Новые артефакты можно создать, запустив har-design-compiler. Этот инструмент запускается на целевом устройстве и генерирует артефакты на основе дизайна. Рекомендуем запустить инструмент, извлечь новые артефакты из целевого объекта и пересобрать образ.
Инструмент создается и устанавливается на целевом объекте по умолчанию.
# 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
Монитор безопасности инициализируется при загрузке целевого устройства. Монитор безопасности будет непрерывно проверять критически важные элементы на экране, сравнивая их с ожидаемыми значениями. Для этого он будет анализировать буфер экрана и входящие сигналы от автомобиля.
Вы можете в любое время посмотреть журналы мониторинга безопасности. Для этого:
adb logcat | grep har-safety-monitor