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_samplePour 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.tagpersist.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.