Mit den Codebeispielen für SDV-Core-Dienste in /system/software_defined_vehicle/samples können Sie mit der Entwicklung Ihrer Dienste beginnen. Jedes Beispiel enthält eine README-Datei, in der der Anwendungsfall beschrieben wird.
Beispielverzeichnis – Übersicht
In der folgenden Tabelle sind die Referenzbeispielverzeichnisse in system/software_defined_vehicle/samples und die entsprechenden Dokumentationsleitfäden aufgeführt:
| Beispielverzeichnis | Beschreibung | Dokumentationsleitfaden |
|---|---|---|
system/software_defined_vehicle/samples/quickstart |
Beispiel für ein End-to-End-Rust-Dienst-Bundle, das die VSIDL-Veröffentlichung, das Abo und den RPC zwischen Manager- und Monitor-Bundles veranschaulicht.
|
Schnellstart: SDV-Dienst-Bundles erstellen und ausführen |
system/software_defined_vehicle/samples/vsidl |
Referenzieren Sie VSIDL-Katalog, Protobuf-Definitionen und Implementierungsmuster für Dienst-Bundles. | Geschäftslogik implementieren |
system/software_defined_vehicle/samples/concal |
Clientbeispiel zum Lesen und Aktualisieren von Fahrzeugkonfigurations- und Kalibrierungsparametern. | Konfiguration und Kalibrierung |
system/software_defined_vehicle/samples/health |
Beispiele für Dienst-Bundles mit Zustandsüberwachung und Dienstqualitätsüberwachung (QoS). | Statusüberwachung |
system/software_defined_vehicle/samples/oem_partition_update_client |
Beispieldienst, der die sdv_oem_updater-Crate verwendet, um /oem_ab-Partitionsupdates auszulösen und rückgängig zu machen.
|
OEM-AB-Partitionsupdates |
system/software_defined_vehicle/samples/sdv_gateway |
Native und Java-IVI-Beispiel-Apps (NativeSdvGatewayTestApp und SdvCarMonitorTestApp), die über das SDV-Gateway mit SDV Core-Diensten kommunizieren.
|
SDV-Gateway auf IVI verwenden |
system/software_defined_vehicle/samples/telemetry |
On-Device-Telemetriedatenquelle und Simulatorbeispiele. | Datenquellen |
Logging API verwenden
Weitere Informationen zu den bereitgestellten Anleitungen finden Sie hier:
Einfaches Logbeispiel
logging.cpp stellt das Schreiben in die Puffer main, system und radio dar.
Eine kurze Beschreibung der verfügbaren Logpuffer finden Sie unter Alternative Logpuffer ansehen.
So führen Sie das Beispiel ohne die bedingten Logs wie
ALOGI_IFaus:logging_sdv_sampleSo führen Sie das Beispiel aus und geben die bedingten Logs wie
ALOGI_IFaus:LOGIF=1 logging_sdv_sample
Beispiel für strukturiertes Logging
Beispieldatei: structured_logging.cpp
So führen Sie das Beispiel aus, das Logs in den Logpuffer
eventsschreibt:structured_logging_sdv_sample
Die Logpuffer event, security und stats enthalten strukturierte Daten anstelle von Freitext.
Strukturierte Daten werden mit der Ereignislisten-API protokolliert, die immer mit der Priorität INFO und der numerischen Tag-ID protokolliert wird.
Eine .logtags-Datei kann mit einem logtags-Attribut in Android.bp. definiert werden. Wenn sie angegeben ist, wird sie von logcat verwendet, um den Tag-Namen aus der numerischen Tag-ID abzuleiten. Der Tag-Name kann dann zum Filtern strukturierter Logs verwendet werden. Weitere Informationen und eine Beschreibung des Dateiformats finden Sie im Kommentar in der Datei logcat event.logtags.
Während des Build-Prozesses werden alle logtags-Dateien zusammengeführt und in der Datei /system/etc/event-log-tags im Android-System-Image abgelegt.
Beispiel für das Filtern von Zeitprotokollen kompilieren
Beispieldatei: compile_time_log_filtering.cpp
Dieses Beispiel enthält Makros, die Sie anpassen können, um einige Logs aus der ausführbaren Datei zu entfernen. Weitere Informationen finden Sie im Quellcode.
Beispiel für Logfilterung: log_filtering.cpp
So führen Sie das Beispiel aus und legen die Mindestpriorität für das Logging auf
WARNfest:LOGLEVEL=WARN log_filtering_sdv_sample
Die Logfilterung wird von Systemeigenschaften beeinflusst. Für alle Logs mit
log.tag.<tag>persist.log.tag.<tag>
Für alle Logs im System:
log.tagpersist.log.tag
Um die ausgewählte Logebene auszuwählen, die der Reihe nach geprüft wird, kann jeder Wert auf V, D, I, W oder E gesetzt werden.
Die effektive Logebene ist die Ebene, die für die erste Systemeigenschaft mit einem Wert festgelegt ist. Sie kann niedriger oder höher als die Logebene sein, die von der App mit einem __android_log_set_minimum_priority-Aufruf festgelegt wird. Wenn keine der Properties festgelegt ist, gilt die mit __android_log_set_minimum_priority konfigurierte Ebene.
Weitere Informationen finden Sie in der Übersicht über das Logging-System.
Führen Sie das Beispiel aus und legen Sie das Standard-Log-Tag auf
example_tagfest:LOGTAG=example_tag log_filtering_sdv_sample
Das Beispiel enthält auch eine auskommentierte LOG_TAG-Makrodefinition, mit der Sie das Log-Tag für alle Logeinträge festlegen können. Das so festgelegte Tag überschreibt das zur Laufzeit mit __android_log_set_default_tag festgelegte Tag.
Wenn das Makro LOG_TAG nicht definiert ist und die App __android_log_set_default_tag nicht aufruft, ist das Standard-Tag das Ergebnis von getprogname(). Beispiel: der Name der ausführbaren Datei.