Przykładowe kody usług SDV Core w /system/software_defined_vehicle/samples umożliwiają rozpoczęcie tworzenia usług. Każdy przykład zawiera plik README opisujący przypadek użycia.
Przegląd katalogu próbek
W tabeli poniżej znajdziesz katalogi z przykładowymi plikami referencyjnymi w system/software_defined_vehicle/samples oraz odpowiadające im przewodniki po dokumentacji:
| Katalog próbek | Opis | Dokumentacja |
|---|---|---|
system/software_defined_vehicle/samples/quickstart |
Przykładowy pakiet usługi Rust typu end-to-end, który demonstruje publikację VSIDL, subskrypcję i RPC między pakietami Manager i Monitor.
|
Szybki start: tworzenie i wykonywanie pakietów usług SDV |
system/software_defined_vehicle/samples/vsidl |
Zapoznaj się z katalogiem VSIDL, definicjami protobuf i wzorcami implementacji pakietu usług. | Implementowanie logiki biznesowej |
system/software_defined_vehicle/samples/concal |
Przykładowy klient do odczytywania i aktualizowania parametrów konfiguracji i kalibracji pojazdu. | Konfiguracja i kalibracja |
system/software_defined_vehicle/samples/health |
Przykłady pakietu usług monitorowanych pod kątem stanu i monitorowania jakości usług (QoS). | Monitorowanie stanu |
system/software_defined_vehicle/samples/oem_partition_update_client |
Przykładowa usługa, która używa skrzynki sdv_oem_updater do aktywowania i wycofywania aktualizacji partycji /oem_ab.
|
Aktualizacje partycji AB OEM |
system/software_defined_vehicle/samples/sdv_gateway |
Przykładowe aplikacje natywne i w języku Java na samochodowy system multimedialny (NativeSdvGatewayTestApp i SdvCarMonitorTestApp), które komunikują się z usługami SDV Core przez bramę SDV.
|
Korzystanie z bramy SDV w samochodowym systemie multimedialnym |
system/software_defined_vehicle/samples/telemetry |
Źródło danych telemetrycznych na urządzeniu i przykłady symulatorów. | Źródła danych |
Korzystanie z interfejsu Logging API
Więcej informacji o podanych instrukcjach znajdziesz w tych artykułach:
Przykładowy log podstawowy
logging.cpp przedstawia zapisywanie w buforach main, system i radio.
Krótki opis dostępnych buforów logów znajdziesz w artykule Wyświetlanie alternatywnych buforów logów.
Aby uruchomić przykład bez logów warunkowych, takich jak
ALOGI_IF:logging_sdv_sampleAby uruchomić przykład i wyświetlić logi warunkowe, takie jak
ALOGI_IF:LOGIF=1 logging_sdv_sample
Przykład uporządkowanego logowania
Przykładowy plik: structured_logging.cpp
Aby uruchomić przykład, który zapisuje logi w buforze logów
events:structured_logging_sdv_sample
Bufory logów event, security i stats zawierają uporządkowane dane, a nie dowolny tekst.
Dane strukturalne są rejestrowane za pomocą interfejsu API listy zdarzeń, który zawsze rejestruje dane z priorytetem INFO i numerycznym identyfikatorem tagu.
Plik .logtags można zdefiniować za pomocą atrybutu logtags w Android.bp..
Jeśli zostanie podany, logcat użyje go do uzyskania nazwy tagu z numerycznego identyfikatora tagu. Nazwy tagu można następnie użyć do filtrowania logów ustrukturyzowanych. Szczegółowe informacje i opis formatu pliku znajdziesz w komentarzu w pliku logcat event.logtags.
Podczas procesu kompilacji wszystkie pliki logtags są scalane i umieszczane w pliku /system/etc/event-log-tags w obrazie systemu Android.
Skompiluj przykład filtrowania logu czasu
Przykładowy plik: compile_time_log_filtering.cpp
Ten przykład zawiera makra, które możesz dostosować, aby usunąć niektóre logi z pliku wykonywalnego. Szczegółowe informacje znajdziesz w kodzie źródłowym.
Próbka filtrowania logów: log_filtering.cpp
Aby uruchomić przykład, ustaw minimalny priorytet logu na
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
Na filtrowanie logów mają wpływ właściwości systemowe. W przypadku wszystkich logów z:
log.tag.<tag>persist.log.tag.<tag>
W przypadku wszystkich logów w systemie:
log.tagpersist.log.tag
Aby wybrać poziom logowania, który jest sprawdzany w kolejności, każdą wartość można ustawić na V, D, I, W lub E.
Efektywny poziom logowania to poziom ustawiony we właściwości systemu, która jako pierwsza ma wartość. Może on być niższy lub wyższy niż poziom logowania ustawiony przez aplikację za pomocą wywołania __android_log_set_minimum_priority. Jeśli nie skonfigurowano żadnej z tych właściwości, stosowany jest poziom skonfigurowany za pomocą __android_log_set_minimum_priority.
Więcej informacji znajdziesz w artykule z omówieniem systemu logowania.
Uruchom przykładowy kod, ustawiając domyślny tag logu na
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
Przykładowy kod zawiera też zmienioną w komentarz definicję makra LOG_TAG, której możesz użyć do ustawienia tagu logu dla wszystkich komunikatów logu. Tag ustawiony w ten sposób zastępuje tag ustawiony w czasie działania za pomocą __android_log_set_default_tag.
Jeśli makro LOG_TAG nie jest zdefiniowane, a aplikacja nie wywołuje funkcji __android_log_set_default_tag, domyślnym tagiem jest wynik funkcji getprogname(). Na przykład nazwa pliku wykonywalnego.