En esta página, se proporciona una descripción general para acceder a los componentes de Display Safety, compilarlos y ejecutarlos, incluidos el renderizador de alta disponibilidad (HAR), DriverUI y el monitor 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 Display Safety HAR y DriverUI.
Renderizador de alta disponibilidad
La base de código del renderizador de alta disponibilidad (HAR) está disponible como parte de
la salida del repositorio principal en packages/services/display_safety/.
La base de código de HAR está estructurada de la siguiente manera:
- Framework: Contiene interfaces de framework principales para la plataforma, la renderización, la animación y el audio.
- Reference: Contiene implementaciones específicas de la plataforma para las interfaces de framework, así como el código de la app de referencia de HAR y la cadena de herramientas de seguridad (compilador de diseño, monitor de seguridad).
- Service: 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 previamente compilados, como la biblioteca de gráficos Impeller.
El código de la app de referencia 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 de código de Display Safety
Monitor de seguridad
La base de código del monitor de seguridad está disponible como parte del registro de salida del repositorio principal en packages/services/display_safety/reference/safety-monitor.
El código del monitor de seguridad está estructurado de la siguiente manera:
main.rs: Recupera artefactos de advertencia, inicializa el servidor de datos del vehículo y los bucles de supervisión de advertencia. La información sobre la visibilidad de la advertencia se compara con los resultados de la inspección de la advertencia, 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 la advertencia para el bucle principal.Telltale_monitoring.rs: Se ejecuta en un bucle, recupera una copia del búfer de pantalla con el contenedor screencap y inspecciona las regiones especificadas en busca de advertencias. Luego, los resultados de las inspecciones de advertencia se envían al bucle principal.
DriverUI
DriverUI está disponible como parte de una base de código no agrupada, 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 la fuente no agrupada y de Google, consulta Cómo integrar apps no agrupadas.
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 SDV In-Vehicle Infotainment (IVI) para lograr la solución de clúster completa con SDV.

Figura 1: Estructura de VM doble de Display Safety
Compila el destino de HAR y SDV Media
- Destino de medios base:
sdv_media_cf- Descripción: Es un destino dedicado para la pila de medios de SDV, que facilita las pruebas aisladas de varios frameworks de medios.
- Ubicación del directorio:
device/google/sdv/
- Destino integrado de HAR:
sdv_media_har_cf- Descripción: Este destino integra la pila de medios con HAR y ejecuta SDV Media en Cuttlefish.
- Ubicación del directorio:
device/google/sdv_dsplay_safety/ - Ejecución de la compilación:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
Compila DriverUI
Desde la rama ub-automotive-master, puedes compilar apps no agrupadas con
CommandLine 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 no agrupadas, incluido 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 exitosa, 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 SDV IVI con DriverUI
- Destino base:
sdv_ivi_cf- Descripción: Este es el destino base de SDV para IVI en la arquitectura x86-64.
- Ubicación del directorio:
device/google/sdv/
Destino integrado de DriverUI:
sdv_ivi_cf_ds- Descripción: Este destino extiende la configuración base de IVI para incorporar componentes de Display Safety. Este destino es esencial para la validación de los servicios y las interacciones de Display Safety dentro del panel de instrumentos.
- Ubicación del directorio:
device/google/sdv_dsplay_safety/ Agrega el objeto binario de DriverUI: Copia
DriverUI.apkapackages/apps/Car/DriverUIPrebuiltjunto con un archivoAndroid.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
Se debe configurar Android.bp 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-trunk_staging-userdebug m -j
Implementación de destino
Una vez que 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 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 arranque Unlocked para el clúster de
Display Safety. Para obtener información detallada, consulta Modo de arranque de 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"
Una vez creado, el terminal mostrará registros para acceder al destino en el navegador en un puerto localhost: Point your browser to https://localhost:8443 to interact with the
device.

Figura 2: VM de SDV Media de Display Safety con HAR
Implementación de SDV IVI y DriverUI
El destino de DriverUI de SDV IVI 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 arranque adicionales y dimensiones de pantalla adecuadas para la pantalla del clúster.
# 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
Una vez que se inicia el destino, el terminal muestra registros para acceder al destino en el
navegador en un puerto 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. El
DriverUI opera como una app de clúster con privilegios, que aprovecha la
ClusterHomeManager clase (también conocida como Cluster2).

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

Figura 4: Descripción general de la composición de la pantalla de Display Safety
Puedes iniciar la configuración de VM doble con ds-toolkit disponible en packages/services/display_safety/service/.
m ds_toolkit
ds_toolkit launch
Una vez que se inicia la configuración, el terminal muestra registros para acceder al destino en el
navegador en un puerto 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áquinas virtuales superpuestas.

Figura 5: Clúster completo de Display Safety con VM de SDV Media y SDV IVI
Cómo compilar el monitor de seguridad
El monitor de seguridad se compila de forma predeterminada para el destino de SDV Media:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j
En el tiempo 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.
Para generar artefactos nuevos, ejecuta 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 mediante el análisis del búfer de pantalla y los indicadores de datos del vehículo entrantes.
Puedes ver los registros del monitor de seguridad en cualquier momento:
adb logcat | grep har-safety-monitor