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 exemplo contém um arquivo README que descreve o caso de uso.
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 registro
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 da tag numérica.
Um arquivo .logtags pode ser definido com um atributo logtags em Android.bp.
Quando fornecido, logcat usa isso para derivar o nome da tag do ID da tag numérica. 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
logcat event.logtags
arquivo.
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 um exemplo 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, definindo 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 são verificados em ordem, cada valor pode ser definido como V, D, I, W ou E.
O nível de registro efetivo é o 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 está
definida, o nível configurado com __android_log_set_minimum_priority é aplicado.
Para detalhes, consulte a Visão geral do sistema de geração de registros.
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 forma substitui a tag definida no tempo 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 executável.