Начните работу с обеспечением безопасности дисплея.

На этой странице представлен обзор доступа, сборки и запуска компонентов 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 вместе с файлом 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
      

В файле 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.

HAR в SDV Media VM

Рисунок 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 ).

DriverUI в виртуальной машине SDV-IVI

Рисунок 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