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.

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.apkparapackages/apps/Car/DriverUIPrebuiltcom um arquivoAndroid.bpdo 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.

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

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.

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.

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