Comienza a usar la Seguridad de la pantalla

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.

VMs invitadas

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.apk a packages/apps/Car/DriverUIPrebuilt junto con un archivo 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
      

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.

HAR en la VM de medios de SDV

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).

DriverUI en la VM de SDV-IVI

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.

Composición de la 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.

Display Safety, clúster completo

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