En esta página, se proporciona una descripción general para acceder, compilar y ejecutar los componentes de Display Safety, incluidos el renderizador de alta disponibilidad (HAR), DriverUI y el supervisor de seguridad, en las plataformas de vehículos definidos por software (SDV).
Acceso al código
En esta sección, se explica cómo obtener acceso a la base de código de los componentes de seguridad de la pantalla HAR y DriverUI.
Renderizador de alta disponibilidad
La base de código del renderizador de alta disponibilidad (HAR) está disponible como parte de la confirmación del repositorio principal en packages/services/display_safety/.
La base de código de HAR se estructura de la siguiente manera:
- Framework: Contiene interfaces de framework principales para la plataforma, el renderizado, la animación y el audio.
- Referencia: Contiene implementaciones específicas de la plataforma para las interfaces del framework, así como el código de la app de referencia de HAR y la cadena de herramientas de seguridad (Design Compiler, monitor de seguridad).
- Servicio: Servicios específicos de Android para enviar y recibir datos del vehículo entre componentes y definiciones para los paquetes de datos de APEX
- Prebuilts: Proporciona wrappers para objetos binarios compilados previamente, como la biblioteca de gráficos de Impeller.
El código de la app de referencia de Harry se encuentra en packages/services/display_safety/reference/harry_app.
Para obtener información detallada sobre la estructura de directorios de HAR, consulta Estructura del código de seguridad de Display.
Monitor de seguridad
La base de código del monitor de seguridad está disponible como parte de la confirmación del repositorio principal en packages/services/display_safety/reference/safety-monitor.
El código del supervisor de seguridad se estructura de la siguiente manera:
main.rs: Recupera artefactos de indicadores, inicializa el servidor de datos del vehículo y los bucles de supervisión de indicadores. La información sobre la visibilidad de los indicadores se compara con los resultados de la inspección de indicadores, y los resultados se proporcionan con los registros de SDV.Vehicle_data_server.rs: Es el servidor que se suscribe a los datos del vehículo y actualiza la visibilidad de los indicadores para el bucle principal.Telltale_monitoring.rs: Se ejecuta en un bucle, recupera una copia del búfer de pantalla con la caja screencap y, luego, inspecciona las regiones especificadas en busca de indicadores. Luego, los resultados de las inspecciones de indicadores se envían al bucle principal.
DriverUI
DriverUI está disponible como parte de una base de código desagregada, a la que puedes acceder desde la rama 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
Para obtener más información sobre las apps independientes y de Google, consulta Cómo integrar apps independientes.
Compilación y ejecución
En esta sección, se detalla el proceso para compilar y ejecutar los destinos de HAR en SDV Media y DriverUI en el infoentretenimiento en el vehículo (IVI) de SDV para lograr la solución de clúster completa con SDV.

Figura 1: Muestra la estructura de VM doble de Display Safety.
Crea un objetivo de medios de HAR y SDV
- Objetivo de medios base:
sdv_media_cf- Descripción: Es un destino dedicado para la pila de contenido multimedia de SDV, lo que facilita las pruebas aisladas de varios frameworks de contenido multimedia.
- Ubicación del directorio:
device/google/sdv/
- Objetivo integrado de HAR:
sdv_media_har_cf- Descripción: Este destino integra la pila de contenido multimedia con la HAR, lo que ejecuta SDV Media en Cuttlefish.
- Ubicación del directorio:
device/google/sdv_display_safety/ - Ejecución de la compilación:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
Compila la DriverUI
Desde la rama ub-automotive-master, puedes compilar apps no empaquetadas con la línea de comandos o Android Studio.
En Android Studio, importa el archivo Gradle:
packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle
Este es el proyecto principal de Gradle con todas las apps desagregadas, incluida DriverUI. Compila el proyecto con Gradle:
# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble
Después de una compilación correcta, el APK de DriverUI está disponible en out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/
driver-ui-default-debug.apk
El código de DriverUI está disponible en packages/apps/Car/DriverUI
Nota: DriverUI es un submódulo del proyecto principal de Gradle, por lo que todas las tareas de Gradle se ejecutan con aaos-apps-gradle-project.
Compila el destino de IVI de SDV con DriverUI
- Objetivo base:
sdv_ivi_cf- Descripción: Sirve como destino de SDV fundamental para IVI en la arquitectura x86-64.
- Ubicación del directorio:
device/google/sdv/
Objetivo integrado de DriverUI:
sdv_ivi_cf_ds- Descripción: Este destino extiende la configuración de IVI base para incorporar componentes de seguridad de la pantalla. Este objetivo es esencial para la validación de los servicios de seguridad de la pantalla y las interacciones dentro del panel de instrumentos.
- Ubicación del directorio:
device/google/sdv_display_safety/ Agrega el objeto binario DriverUI: Copia
DriverUI.apkenpackages/apps/Car/DriverUIPrebuiltjunto con un archivoAndroid.bpde Blueprint.# 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
El Android.bp debe configurarse para usar el nombre del módulo DriverUIPrebuilt y
anular 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,
},
}
Ejecución de la compilación:
# In the root of the Android source source build/envsetup.sh lunch sdv_ivi_cf_ds-aosp_current-userdebug m -j
Implementación de destino
Cuando se completa correctamente el proceso de compilación para ambos destinos, las utilidades de Cuttlefish ayudan a iniciar los destinos como se describe en esta sección.
Implementación de SDV Media y HAR
El destino de HAR se crea con la configuración predefinida de sdv-media-config.json,
que se especifica en device/google/sdv_media_cf.mk.
Nota: SDV Media y SDV IVI se inician en el modo de inicio Unlocked para el clúster de seguridad de la pantalla. Para obtener información detallada, consulta Modo de inicio de 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"
Una vez creado, la terminal mostrará los registros para acceder al destino en el navegador en un puerto
de localhost: Point your browser to https://localhost:8443 to interact with the
device.

Figura 2: Muestra la VM de contenido multimedia de SDV de seguridad con HAR.
Implementación de IVI y DriverUI de SDV
El destino DriverUI de IVI de SDV se inicia con el sdv-ivi-config.json existente definido en device/google/sdv_ivi_cf.mk. También puedes
especificar parámetros de configuración de inicio adicionales y dimensiones de visualización adecuadas
para la pantalla del clúster.
# 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
Después de que se inicie el destino, la terminal mostrará registros para acceder al destino en
el navegador en un puerto de localhost: Point your browser to https://localhost:8443 to
interact with the device.
La implementación de los destinos de SDV-IVI y DriverUI inicializa dos pantallas: una para el sistema SDV-IVI y otra para DriverUI. La DriverUI funciona como una app de clúster con privilegios, que aprovecha la clase ClusterHomeManager (también conocida como Cluster2).

Figura 3: Muestra la VM de IVI de SDV de seguridad con DriverUI.
Implementación del clúster de VM doble
Cuttlefish ofrece la capacidad de iniciar dos máquinas virtuales (VMs) con una configuración de VM doble para lograr la superposición de pantallas.

Figura 4: Descripción general de la composición de la pantalla de seguridad de la pantalla.
Puedes iniciar la configuración de VM doble con ds_toolkit
disponible en packages/services/display_safety/service/.
m ds_toolkit
ds_toolkit launch
Después de que se inicia la configuración, la terminal muestra registros para acceder al destino en
el navegador en un puerto de localhost: Point your browser to https://localhost:8443 to
interact with the device.
Esto inicia ambos destinos de Cuttlefish en un clúster completamente operativo con ambas pantallas de máquina virtual superpuestas.

Figura 5: Se muestra el clúster completo de seguridad con la VM de SDV Media y SDV IVI.
Monitor de seguridad del edificio
El supervisor de seguridad se compila de forma predeterminada para cualquiera de los destinos de SDV Media:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j
En el entorno de ejecución, el monitor de seguridad usa un conjunto predeterminado de artefactos del compilador generados y empaquetados en el APEX para la pantalla del clúster de referencia.
Es posible que se generen artefactos nuevos cuando ejecutes har-design-compiler. Esta herramienta
se ejecuta en el destino para generar artefactos a partir de un diseño. Te recomendamos que ejecutes
la herramienta, extraigas los artefactos nuevos del destino y vuelvas a compilar la imagen.
La herramienta se compila y se instala en el destino de forma predeterminada.
# 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
El monitor de seguridad se inicializa cuando se inicia el destino. El monitor de seguridad se ejecutará de forma continua en un bucle para verificar los elementos críticos para la seguridad en la pantalla en comparación con lo que se espera, analizando el búfer de pantalla y las señales de datos del vehículo entrantes.
Puedes ver los registros de la supervisión de seguridad en cualquier momento:
adb logcat | grep har-safety-monitor