Começar a usar a segurança de display

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

Acesso ao código

Nesta seção, mostramos como acessar a base de código dos componentes de segurança de exibição HAR e DriverUI.

Renderizador de alta disponibilidade

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

A base de código da HAR é estruturada da seguinte maneira:

  • Framework: contém as principais interfaces de framework 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 para o app de referência de HAR e o conjunto de ferramentas de segurança (Design Compiler, monitor de segurança).
  • Serviço: serviços específicos do Android para enviar e receber dados de veículos entre componentes e definições para os pacotes de dados do APEX.
  • Pré-criados: fornece wrappers para binários pré-criados, 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 de diretórios detalhada do HAR, consulte Estrutura do código de segurança de exibição.

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 é estruturado da seguinte maneira:

  • main.rs: busca artefatos de indicadores, inicializa o servidor de dados do veículo e os loops de monitoramento de indicadores. As informações sobre a visibilidade do indicador são comparadas com os resultados da inspeção do indicador, e os resultados são fornecidos usando registros de SDV.
  • Vehicle_data_server.rs: o servidor que se inscreve nos dados do veículo, atualizando a visibilidade do indicador 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 em busca de indicadores. Os resultados das inspeções de indicadores são enviados para o loop principal.

DriverUI

A DriverUI está disponível como parte de uma base de código separada, 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 as fontes desagrupadas e do Google, consulte Integrar apps desagrupados.

Criar e executar

Nesta seção, detalhamos o processo de compilação e execução dos destinos para o HAR no SDV Media e a 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. Mostrar a estrutura de VM dupla do Display Safety.

Criar destino de mídia HAR e SDV

  • Meta de mídia básica: sdv_media_cf
    • Descrição: um destino dedicado para a pilha de mídia do SDV, facilitando o teste isolado de vários frameworks de mídia.
    • Local do diretório: device/google/sdv/
  • Meta integrada de 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_display_safety/
    • Execução do build:
# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-userdebug
m -j

Criar a DriverUI

Na ramificação ub-automotive-master, é possível criar apps desagrupados usando a CommandLine ou o AndroidStudio.

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

Este é o projeto principal do Gradle com todos os apps desagrupados, incluindo o 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 criação bem-sucedida, o APK DriverUI fica 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: DriverUI é um submódulo do projeto principal do Gradle. Portanto, todas as tarefas do Gradle são executadas usando aaos-apps-gradle-project.

Criar um destino de IVI de SDV com o DriverUI

  • Meta básica: sdv_ivi_cf
    • Descrição: serve como o destino de SDV básico 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 de segurança da tela. Essa meta é essencial para a validação dos serviços e interações do Display Safety no painel de instrumentos.
    • Local do diretório: device/google/sdv_display_safety/
    • Adicionar o binário DriverUI: copie DriverUI.apk para packages/apps/Car/DriverUIPrebuilt com um arquivo Android.bp do 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
      

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 do build:

    # In the root of the Android source
    source build/envsetup.sh
    lunch sdv_ivi_cf_ds-aosp_current-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 HAR é criado usando a configuração predefinida sdv-media-config.json, que é especificada em device/google/sdv_media_cf.mk.

Observação: o SDV Media e o SDV IVI são iniciados no modo de inicialização Unlocked para o cluster de segurança da tela. 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-aosp_current-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: Point your browser to https://localhost:8443 to interact with the device.

HAR na VM de mídia do SDV

Figura 2. Mostre a VM de mídia do SDV de segurança com o HAR.

Implantação do SDV IVI e da DriverUI

O destino 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-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

Depois que o destino for iniciado, o terminal vai mostrar registros para acessar o destino no navegador em uma porta de host local: 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 classe ClusterHomeManager (também conhecida como Cluster2).

DriverUI na VM SDV-IVI

Figura 3. Mostrar a VM de IVI do SDV de segurança com a DriverUI.

Implantação do cluster de VM duplo

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

Composição da tela

Figura 4. Visão geral da composição da tela de segurança.

É 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 for iniciada, o terminal vai mostrar registros para acessar o destino no navegador em uma porta de host local: 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.

Cluster completo de segurança de exibição

Figura 5. Mostre o cluster completo de segurança com a VM de mídia SDV e a VM IVI SDV.

Monitor de segurança do edifício

O monitor de segurança é criado por padrão para qualquer um dos destinos de mídia do SDV:

# In the root of the Android source
source build/envsetup.sh
lunch sdv_media_har_cf-aosp_current-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 do cluster de referência.

Novos artefatos podem ser gerados executando har-design-compiler. Essa ferramenta é executada no destino para gerar artefatos com base em 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 os elementos críticos para a segurança na tela em relação ao 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