Gli esempi di codice dei servizi SDV Core in /system/software_defined_vehicle/samples
ti consentono di iniziare a creare i tuoi servizi. Ogni esempio contiene un file README che descrive il caso d'uso.
Panoramica della directory di esempio
La tabella seguente elenca le directory degli esempi di riferimento in system/software_defined_vehicle/samples e le relative guide alla documentazione:
| Directory di esempio | Descrizione | Guida alla documentazione |
|---|---|---|
system/software_defined_vehicle/samples/quickstart |
Esempio di bundle di servizi Rust end-to-end che mostra la pubblicazione, la sottoscrizione e l'RPC VSIDL tra i bundle Manager e Monitor.
|
Guida rapida: crea ed esegui bundle di servizi SDV |
system/software_defined_vehicle/samples/vsidl |
Consulta il catalogo VSIDL, le definizioni protobuf e i pattern di implementazione dei bundle di servizi. | Implementa la logica di business |
system/software_defined_vehicle/samples/concal |
Esempio di client per la lettura e l'aggiornamento dei parametri di configurazione e calibrazione del veicolo. | Configurazione e calibrazione |
system/software_defined_vehicle/samples/health |
Bundle di servizi con monitoraggio dell'integrità ed esempi di monitoraggio della qualità del servizio (QoS). | Monitoraggio dello stato di integrità |
system/software_defined_vehicle/samples/oem_partition_update_client |
Servizio di esempio che utilizza il crate sdv_oem_updater per attivare ed eseguire il rollback degli aggiornamenti della partizione /oem_ab.
|
Aggiornamenti delle partizioni AB degli OEM |
system/software_defined_vehicle/samples/sdv_gateway |
App di esempio IVI native e Java (NativeSdvGatewayTestApp
e SdvCarMonitorTestApp) che comunicano con i servizi
SDV Core tramite il gateway SDV.
|
Utilizza il gateway SDV su IVI |
system/software_defined_vehicle/samples/telemetry |
Origine dati di telemetria on-device ed esempi di simulatori. | Origini dati |
Utilizza l'API Logging
Per scoprire di più sulle istruzioni fornite, consulta:
Esempio di log di base
logging.cpp presenta la scrittura nei buffer main, system e radio.
Per leggere una breve descrizione dei buffer di log disponibili, consulta Visualizza buffer di log alternativi.
Per eseguire l'esempio senza i log condizionali, ad esempio
ALOGI_IF:logging_sdv_samplePer eseguire l'esempio e stampare i log condizionali, ad esempio
ALOGI_IF:LOGIF=1 logging_sdv_sample
Esempio di logging strutturato
File di esempio: structured_logging.cpp
Per eseguire l'esempio, che scrive i log nel buffer di log
events:structured_logging_sdv_sample
I buffer di log event, security e stats contengono dati strutturati anziché testo libero.
I dati strutturati vengono registrati utilizzando l'API Event List, che viene sempre registrata con priorità INFO e l'ID tag numerico.
Un file .logtags può essere definito con un attributo logtags in Android.bp.
Se fornito, logcat lo utilizza per ricavare il nome del tag dall'ID tag numerico. Il nome del tag può quindi essere utilizzato per filtrare i log strutturati. Per i dettagli e una descrizione del formato file, consulta il commento nel file logcat event.logtags.
Durante il processo di build, tutti i file logtags vengono uniti e inseriti nel file /system/etc/event-log-tags nell'immagine di sistema Android.
Compila un esempio di filtro dei log temporali
File di esempio: compile_time_log_filtering.cpp
Questo esempio contiene macro che puoi modificare per rimuovere alcuni log dall'eseguibile. Per i dettagli, consulta il codice sorgente.
Esempio di filtro dei log: log_filtering.cpp
Per eseguire l'esempio, impostando la priorità minima del log su
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
Il filtro dei log è influenzato dalle proprietà di sistema. Per tutti i log con
log.tag.<tag>persist.log.tag.<tag>
Per tutti i log nel sistema:
log.tagpersist.log.tag
Per selezionare il livello di log scelto, che viene controllato in ordine, ogni valore può essere impostato su V, D, I, W o E.
Il livello di log effettivo è il livello impostato sulla prima proprietà di sistema che ha un valore, che potrebbe essere inferiore o superiore al livello di log impostato dall'app con una chiamata __android_log_set_minimum_priority. Se non viene impostata nessuna delle proprietà, viene applicato il livello configurato con __android_log_set_minimum_priority.
Per maggiori dettagli, consulta la panoramica del sistema di logging.
Esegui l'esempio, impostando il tag di log predefinito su
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
L'esempio contiene anche una definizione della macro LOG_TAG commentata che puoi utilizzare per impostare il tag di log per tutti i messaggi di log. Il tag impostato in questo modo
esegue l'override del tag impostato in fase di runtime con __android_log_set_default_tag.
Se la macro LOG_TAG non è definita e l'app non chiama __android_log_set_default_tag, il tag predefinito è il risultato di getprogname(). Ad esempio, il nome dell'eseguibile.