На этой странице представлен обзор доступа, сборки и запуска компонентов Display Safety, включая высокодоступный рендерер (HAR) , DriverUI и монитор безопасности , на платформах программно-определяемых транспортных средств (SDV).
доступ к коду
В этом разделе рассматривается получение доступа к кодовой базе компонентов HAR и DriverUI Display Safety.
Высокодоступный рендерер
Исходный код высокодоступного рендерера (HAR) доступен в составе основного репозитория по адресу packages/services/display_safety/ .
Кодовая база HAR имеет следующую структуру:
- Фреймворк: Содержит основные интерфейсы фреймворка для платформы, рендеринга, анимации и звука.
- Справочник: содержит реализации интерфейсов фреймворка, специфичные для конкретной платформы, а также код эталонного приложения HAR и набора инструментов обеспечения безопасности (компилятор проектирования, монитор безопасности).
- Сервис: Специфические для Android сервисы для отправки и получения данных об автомобиле между компонентами, а также определения для пакетов данных APEX.
- Prebuilts: Предоставляет оболочки для предварительно скомпилированных бинарных файлов, таких как графическая библиотека Impeller.
Исходный код эталонного приложения Harry находится по адресу packages/services/display_safety/reference/harry_app .
Подробную информацию о структуре каталогов HAR см. в разделе «Структура кода безопасности отображения».
Контроль безопасности
Исходный код для Safety Monitor доступен в составе основного репозитория по адресу 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
Для получения дополнительной информации о приложениях, не входящих в состав пакета, и приложениях из Google Source см. раздел «Интеграция приложений, не входящих в состав пакета» .
Собрать и запустить
В этом разделе подробно описан процесс компиляции и выполнения целевых объектов для 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_dsplay_safety/ - Выполнение сборки:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
Создайте интерфейс пользователя для драйверов.
Из ветки ub-automotive-master вы можете создавать приложения без пакетов, используя командную строку или AndroidStudio .
В Android Studio импортируйте файл Gradle: 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 .
Создайте целевой объект SDV IVI с помощью DriverUI.
- Базовая цель:
sdv_ivi_cf- Описание: Это базовая целевая платформа SDV для IVI на архитектуре x86-64.
- Расположение каталога:
device/google/sdv/
Целевая платформа, интегрированная с DriverUI:
sdv_ivi_cf_ds- Описание: Данная цель расширяет базовую конфигурацию IVI, включая компоненты безопасности дисплея. Эта цель необходима для проверки служб безопасности дисплея и их взаимодействия в рамках приборной панели.
- Расположение каталога:
device/google/sdv_dsplay_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-trunk_staging-userdebug m -j
Целевое развертывание
После успешного завершения процесса сборки для обеих целей утилиты Cuttlefish помогают инициализировать цели, как описано в этом разделе.
Развертывание SDV Media и HAR
Целевой объект HAR создается с использованием предопределенной конфигурации sdv-media-config.json , которая указана в device/google/sdv_media_cf.mk .
Примечание : SDV Media и SDV IVI запускаются в Unlocked режиме загрузки для кластера безопасности дисплея. Для получения подробной информации см. раздел «Режим загрузки 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"
После создания терминал будет отображать логи для доступа к целевому устройству в браузере через локальный порт: Point your browser to https://localhost:8443 to interact with the device.

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

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

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

Рисунок 5. Полный кластер Display Safety с SDV Media и SDV IVI VM.
Инспектор по безопасности здания
Для любого из целевых носителей SDV Media по умолчанию создается монитор безопасности:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-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