Os exemplos de código dos serviços principais do SDV em /system/software_defined_vehicle/samples
permitem que você comece a criar seus serviços. Cada amostra contém um arquivo README
que descreve o caso de uso.
Visão geral do diretório de amostras
A tabela a seguir lista os diretórios de amostra de referência em
system/software_defined_vehicle/samples e os guias de documentação
correspondentes:
| Diretório de amostra | Descrição | Guia de documentação |
|---|---|---|
system/software_defined_vehicle/samples/quickstart |
Exemplo de pacote de serviço Rust de ponta a ponta que demonstra a publicação,
a assinatura e a RPC do VSIDL entre os pacotes Manager e
Monitor.
|
Guia de início rápido: criar e executar pacotes de serviços de SDV |
system/software_defined_vehicle/samples/vsidl |
Consulte o catálogo VSIDL, as definições de protobuf e os padrões de implementação do pacote de serviços. | Implementar a lógica de negócios |
system/software_defined_vehicle/samples/concal |
Exemplo de cliente para ler e atualizar parâmetros de configuração e calibração de veículos. | Configuração e calibração |
system/software_defined_vehicle/samples/health |
Pacote de serviços com monitoramento de integridade e amostras de monitoramento de qualidade de serviço (QoS). | Monitoramento de integridade |
system/software_defined_vehicle/samples/oem_partition_update_client |
Exemplo de serviço que usa o crate sdv_oem_updater para acionar
e reverter atualizações de partição /oem_ab.
|
Atualizações de partição AB do OEM |
system/software_defined_vehicle/samples/sdv_gateway |
Apps de exemplo de IVI nativos e em Java (NativeSdvGatewayTestApp
e SdvCarMonitorTestApp) que se comunicam com os serviços principais do SDV
pelo gateway do SDV.
|
Usar o gateway de SDV no IVI |
system/software_defined_vehicle/samples/telemetry |
Fonte de dados de telemetria no dispositivo e amostras de simulador. | Fontes de dados |
Usar a API Logging
Para saber mais sobre as instruções fornecidas, consulte:
Exemplo de registro básico
logging.cpp apresenta a gravação nos buffers main, system e radio.
Para ler uma breve descrição dos buffers de registro disponíveis, consulte
Acessar buffers de registro alternativos.
Para executar o exemplo sem os registros condicionais, como
ALOGI_IF:logging_sdv_samplePara executar o exemplo e imprimir os registros condicionais, como
ALOGI_IF:LOGIF=1 logging_sdv_sample
Exemplo de geração de registros estruturados
Arquivo de exemplo: structured_logging.cpp
Para executar o exemplo, que grava registros no buffer de registros
events:structured_logging_sdv_sample
Os buffers de registro event, security e stats contêm dados estruturados, em vez de texto livre.
Os dados estruturados são registrados usando a API de lista de eventos, que sempre é registrada com
a prioridade INFO e o ID numérico da tag.
Um arquivo .logtags pode ser definido com um atributo logtags em Android.bp..
Quando fornecido, o logcat usa isso para derivar o nome da tag do ID numérico
da tag. O nome da tag pode ser usado para filtrar registros estruturados. Para detalhes e
uma descrição do formato do arquivo, consulte o comentário no
arquivo
logcat event.logtags.
Durante o processo de build, todos os arquivos logtags são mesclados e colocados no arquivo /system/etc/event-log-tags na imagem do sistema Android.
Compilar uma amostra de filtragem de registro de tempo
Arquivo de exemplo: compile_time_log_filtering.cpp
Este exemplo contém macros que podem ser ajustadas para remover alguns registros do executável. Consulte o código-fonte para mais detalhes.
Exemplo de filtragem de registros: log_filtering.cpp
Para executar o exemplo, defina a prioridade mínima de registro como
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
A filtragem de registros é afetada pelas propriedades do sistema. Para todos os registros com
log.tag.<tag>persist.log.tag.<tag>
Para todos os registros no sistema:
log.tagpersist.log.tag
Para selecionar o nível de registro escolhido, que é verificado em ordem, cada valor pode ser
definido como V, D, I, W ou E.
O nível de registro efetivo é o nível definido na primeira propriedade do sistema que tem
um valor, que pode ser menor ou maior que o nível de registro definido pelo app com uma
chamada __android_log_set_minimum_priority. Quando nenhuma das propriedades é
definida, o nível configurado com __android_log_set_minimum_priority é aplicado.
Para mais detalhes, consulte a visão geral do sistema do Logging.
Execute o exemplo, definindo a tag de registro padrão como
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
O exemplo também contém uma definição de macro LOG_TAG comentada que pode ser
usada para definir a tag de registro para todas as mensagens de registro. A tag definida dessa maneira
substitui a tag definida no ambiente de execução com __android_log_set_default_tag.
Se a macro LOG_TAG não estiver definida e o app não chamar
__android_log_set_default_tag, a tag padrão será o resultado de
getprogname(). Por exemplo, o nome do executável.