Começar a usar a segurança de display

Esta página oferece uma visão geral sobre como acessar, criar e executar os componentes do Display Safety, incluindo o renderizador de alta disponibilidade (HAR), DriverUI e o monitor de segurança, nas plataformas de veículos definidos por software (SDV).

Acesso ao código

Esta seção aborda como acessar a base de código dos componentes HAR e DriverUI do Display Safety.

Renderizador de alta disponibilidade

A base de código do renderizador de alta disponibilidade (HAR) está disponível como parte do checkout do repositório principal em packages/services/display_safety/.

A base de código do HAR está estruturada da seguinte maneira:

  • Framework:contém interfaces de framework principais para plataforma, renderização, animação e áudio.
  • Referência:contém implementações específicas da plataforma para interfaces de framework, bem como o código do app de referência do HAR e o conjunto de ferramentas de segurança (compilador de design, monitor de segurança).
  • Serviço:serviços específicos do Android para enviar e receber dados do veículo entre componentes e definições para os pacotes de dados APEX.
  • Pré-compilados:fornece wrappers para binários pré-compilados, como a biblioteca de gráficos Impeller.

O código do app de referência Harry está localizado em packages/services/display_safety/reference/harry_app.

Para ver a estrutura detalhada do diretório do HAR, consulte Estrutura do código do Display Safety

Monitor de segurança

A base de código do monitor de segurança está disponível como parte do checkout do repositório principal em packages/services/display_safety/reference/safety-monitor.

O código do monitor de segurança está estruturado da seguinte maneira:

  • main.rs: busca artefatos de alerta, inicializa o servidor de dados do veículo e os loops de monitoramento de alerta. As informações sobre a visibilidade do alerta são comparadas aos resultados da inspeção, que são fornecidos usando registros do SDV.
  • Vehicle_data_server.rs: o servidor que se inscreve nos dados do veículo, atualizando a visibilidade do alerta para o loop principal.
  • Telltale_monitoring.rs: é executado em um loop, buscando uma cópia do buffer de tela usando o crate screencap e inspecionando as regiões especificadas para alertas. Os resultados das inspeções de alerta são enviados para o loop principal.

DriverUI

A DriverUI está disponível como parte de uma base de código não agrupada, que pode ser acessada na ramificação 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 mais informações sobre a origem não agrupada e do Google, consulte Integrar apps não agrupados.

Criar e executar

Esta seção detalha o processo de compilação e execução dos destinos do HAR na mídia SDV e da DriverUI no infoentretenimento no veículo (IVI) do SDV para alcançar a solução de cluster completa com o SDV.

VMs convidadas

Figura 1. Estrutura de VM dupla do Display Safety.

Criar o destino de mídia HAR e SDV

  • Destino de mídia base: sdv_media_cf
    • Descrição:um destino dedicado para a pilha de mídia SDV, facilitando o teste isolado de vários frameworks de mídia.
    • Local do diretório:device/google/sdv/
  • Destino integrado do HAR: sdv_media_har_cf
    • Descrição:esse destino integra a pilha de mídia ao HAR, executando a mídia SDV no Cuttlefish.
    • Local do diretório:device/google/sdv_dsplay_safety/
    • Execução da build :
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

Criar a DriverUI

Na ramificação ub-automotive-master, é possível criar apps não agrupados usando a linha de comando ou o Android Studio.

No Android Studio, importe o arquivo do Gradle: packages/apps/Car/libs/aaos-apps-gradle-project/build.gradle

Esse é o projeto principal do Gradle com todos os apps não agrupados, incluindo a DriverUI. Crie o projeto usando o Gradle:

# To build only DriverUI module of aaos-apps-gradle-project use
./gradlew :driver-ui:assemble

Após uma build bem-sucedida, o APK da DriverUI estará disponível em out/aaos-apps-gradle-build/driver-ui/outputs/apk/default/debug/ driver-ui-default-debug.apk

O código da DriverUI está disponível em packages/apps/Car/DriverUI

Observação: a DriverUI é um submódulo do projeto principal do Gradle. Portanto, todas as tarefas do Gradle são executadas usando aaos-apps-gradle-project.

Criar o destino SDV IVI com a DriverUI

  • Destino base: sdv_ivi_cf
    • Descrição:esse é o destino SDV fundamental para IVI na arquitetura x86-64.
    • Local do diretório:device/google/sdv/
  • Destino integrado da DriverUI:sdv_ivi_cf_ds

    • Descrição:esse destino estende a configuração básica do IVI para incorporar componentes do Display Safety. Esse destino é essencial para a validação de serviços e interações do Display Safety no cluster de instrumentos.
    • Local do diretório:device/google/sdv_dsplay_safety/
    • Adicionar binário da DriverUI: copie DriverUI.apk para packages/apps/Car/DriverUIPrebuilt junto com um arquivo 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
      

O Android.bp precisa ser configurado para usar o nome do módulo DriverUIPrebuilt e substituir 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,
    },
}
  • Execução da build :

    # In the root of the Android source
    source build/envsetup.sh
    lunch sdv_ivi_cf_ds-trunk_staging-userdebug
    m -j
    

Implantação de destino

Após a conclusão do processo de build para os dois destinos, os utilitários do Cuttlefish ajudam a iniciar os destinos conforme descrito nesta seção.

Implantação de mídia SDV e HAR

O destino do HAR é criado usando a configuração sdv-media-config.json predefinida, especificada em device/google/sdv_media_cf.mk.

Observação: a mídia SDV e o SDV IVI são iniciados no modo de inicialização Unlocked para o cluster do Display Safety. Para mais informações, consulte Modo de inicialização do 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"

Depois de criado, o terminal vai mostrar registros para acessar o destino no navegador em uma porta localhost port: Point your browser to https://localhost:8443 to interact with the device.

HAR na VM de mídia do SDV

Figura 2. VM de mídia SDV do Display Safety com HAR.

Implantação de SDV IVI e DriverUI

O destino da DriverUI do SDV IVI é iniciado usando o sdv-ivi-config.json definido em device/google/sdv_ivi_cf.mk. Também é possível especificar outros parâmetros de configuração de inicialização e dimensões de exibição adequadas para a tela do cluster.

# 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

Depois que o destino é iniciado, o terminal mostra registros para acessar o destino no navegador em uma porta localhost: Point your browser to https://localhost:8443 to interact with the device.

A implantação dos destinos SDV-IVI e DriverUI inicializa duas telas: uma para o sistema SDV-IVI e outra para a DriverUI. A DriverUI opera como um app de cluster privilegiado, aproveitando a ClusterHomeManager classe (também conhecida como Cluster2).

DriverUI na VM SDV-IVI

Figura 3. VM de SDV IVI do Display Safety com DriverUI.

Implantação do cluster de VM dupla

O Cuttlefish oferece a capacidade de iniciar duas máquinas virtuais (VMs) usando uma configuração de VM dupla para alcançar a sobreposição de exibição.

Composição da tela

Figura 4. Visão geral da composição da tela do Display Safety.

É possível iniciar a configuração de VM dupla usando ds-toolkit, disponível em packages/services/display_safety/service/.

m ds_toolkit
ds_toolkit launch

Depois que a configuração é iniciada, o terminal mostra registros para acessar o destino no navegador em uma porta localhost: Point your browser to https://localhost:8443 to interact with the device.

Isso inicia os dois destinos do Cuttlefish em um cluster totalmente operacional com as duas telas de máquina virtual sobrepostas.

Mostrar cluster completo de segurança

Figura 5. Cluster completo do Display Safety com mídia SDV e VM SDV IVI.

Como criar o monitor de segurança

O monitor de segurança é criado por padrão para o destino de mídia SDV:

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-trunk_staging-userdebug
m -j

No momento da execução, o monitor de segurança usa um conjunto padrão de artefatos do compilador gerados e empacotados no APEX para a tela de cluster de referência.

Novos artefatos podem ser gerados executando har-design-compiler. Essa ferramenta é executada no destino para gerar artefatos de um design. Recomendamos executar a ferramenta, extrair os novos artefatos do destino e recriar a imagem. A ferramenta é criada e instalada no destino por padrão.

# 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

O monitor de segurança é inicializado quando o destino é inicializado. O monitor de segurança será executado continuamente em um loop para verificar elementos críticos de segurança na tela em relação ao que é esperado, analisando o buffer de tela e os sinais de dados do veículo recebidos.

É possível conferir os registros do monitor de segurança a qualquer momento:

adb logcat | grep har-safety-monitor