Exemplos de código principais

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_sample
    
  • Para 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.tag
  • persist.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.