Exemples de code de base

Les exemples de code des services SDV Core dans /system/software_defined_vehicle/samples vous permettent de commencer à créer vos services. Chaque exemple contient un fichier README décrivant le cas d'utilisation.

Utiliser l'API Logging

Pour en savoir plus sur les instructions fournies, consultez les pages suivantes :

Exemple de journal de base

logging.cpp présente l'écriture dans les tampons main, system et radio. Pour lire une brève description des tampons de journal disponibles, consultez Afficher d'autres tampons de journal.

  • Pour exécuter l'exemple sans les journaux conditionnels, tels que ALOGI_IF :

    logging_sdv_sample
    
  • Pour exécuter l'exemple et imprimer les journaux conditionnels, tels que ALOGI_IF :

    LOGIF=1 logging_sdv_sample
    

Exemple de journalisation structurée

Exemple de fichier : structured_logging.cpp

  • Pour exécuter l'exemple, qui écrit les journaux dans le tampon de journal events :

    structured_logging_sdv_sample
    

Les tampons de journaux event, security et stats contiennent des données structurées plutôt que du texte libre.

Les données structurées sont consignées à l'aide de l'API Event List, qui est toujours consignée avec la priorité INFO et l'ID numérique de la balise.

Un fichier .logtags peut être défini avec un attribut logtags dans Android.bp.. Lorsqu'il est fourni, logcat l'utilise pour dériver le nom de la balise à partir de l'ID numérique de la balise. Le nom de la balise peut ensuite être utilisé pour filtrer les journaux structurés. Pour en savoir plus et obtenir une description du format de fichier, consultez le commentaire dans le fichier logcat event.logtags.

Lors du processus de compilation, tous les fichiers logtags sont fusionnés et placés dans le fichier /system/etc/event-log-tags de l'image système Android.

Compiler un exemple de filtrage du journal d'activité

Exemple de fichier : compile_time_log_filtering.cpp

Cet exemple contient des macros que vous pouvez ajuster pour supprimer certains journaux de l'exécutable. Pour en savoir plus, consultez le code source.

Exemple de filtrage des journaux : log_filtering.cpp

  • Pour exécuter l'exemple, définissez la priorité de journalisation minimale sur WARN :

    LOGLEVEL=WARN log_filtering_sdv_sample
    

Le filtrage des journaux est affecté par les propriétés système. Pour tous les journaux avec :

  • log.tag.<tag>
  • persist.log.tag.<tag>

Pour tous les journaux du système :

  • log.tag
  • persist.log.tag

Pour sélectionner le niveau de journalisation choisi, qui est vérifié dans l'ordre, chaque valeur peut être définie sur V, D, I, W ou E.

Le niveau de journalisation effectif est celui défini sur la première propriété système qui a une valeur. Il peut être inférieur ou supérieur au niveau de journalisation défini par l'application avec un appel __android_log_set_minimum_priority. Si aucune des propriétés n'est définie, le niveau configuré avec __android_log_set_minimum_priority s'applique.

Pour en savoir plus, consultez la présentation du système de journalisation.

  • Exécutez l'exemple en définissant le tag de journalisation par défaut sur example_tag :

    LOGTAG=example_tag log_filtering_sdv_sample
    

L'exemple contient également une définition de macro LOG_TAG commentée que vous pouvez utiliser pour définir le tag de journalisation pour tous les messages de journalisation. Le tag défini de cette manière remplace le tag défini au moment de l'exécution avec __android_log_set_default_tag.

Si la macro LOG_TAG n'est pas définie et que l'application n'appelle pas __android_log_set_default_tag, le tag par défaut est le résultat de getprogname(). Par exemple, le nom de l'exécutable.