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.

Présentation du répertoire d'exemples

Le tableau suivant répertorie les répertoires d'exemples de référence dans system/software_defined_vehicle/samples et les guides de documentation correspondants :

Répertoire d'exemples Description Guide de documentation
system/software_defined_vehicle/samples/quickstart Exemple de bundle de services Rust de bout en bout illustrant la publication, l'abonnement et le RPC VSIDL entre les bundles Manager et Monitor. Guide de démarrage rapide : Créer et exécuter des bundles de services SDV
system/software_defined_vehicle/samples/vsidl Catalogue VSIDL de référence, définitions protobuf et modèles d'implémentation de packs de services. Implémenter la logique métier
system/software_defined_vehicle/samples/concal Exemple de client pour lire et mettre à jour les paramètres de configuration et d'étalonnage du véhicule. Configuration et étalonnage
system/software_defined_vehicle/samples/health Exemples de surveillance de la qualité de service (QoS) et de bundle de services surveillés. Surveillance de l'état
system/software_defined_vehicle/samples/oem_partition_update_client Exemple de service utilisant la caisse sdv_oem_updater pour déclencher et annuler les mises à jour de partition /oem_ab. Mises à jour des partitions A/B des OEM
system/software_defined_vehicle/samples/sdv_gateway Exemples d'applications IVI natives et Java (NativeSdvGatewayTestApp et SdvCarMonitorTestApp) qui communiquent avec les services SDV Core via la passerelle SDV. Utiliser la passerelle SDV sur IVI
system/software_defined_vehicle/samples/telemetry Exemples de simulateurs et de sources de données de télémétrie sur l'appareil. Sources de données

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 des 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 de liste d'événements, qui est toujours consignée avec la priorité INFO et l'ID de tag numérique.

Un fichier .logtags peut être défini avec un attribut logtags dans Android.bp.. S'il est fourni, logcat l'utilise pour dériver le nom du tag à partir de l'ID numérique du tag. Le nom du tag 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.

Pendant le 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 des journaux de temps

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 le niveau défini sur la première propriété système qui a une valeur, qui peut être inférieure ou supérieure 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 Logging.

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

    LOGTAG=example_tag log_filtering_sdv_sample
    

L'exemple contient également une définition de macro LOG_TAG mise en commentaire que vous pouvez utiliser pour définir le tag de journal pour tous les messages de journal. Le tag défini de cette manière remplace celui 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.