Начало работы с функцией "Безопасность медийной рекламы"

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

HAR в SDV Media VM

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

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

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