Примеры кода SDV Core services в /system/software_defined_vehicle/samples
помогут вам начать создавать свои сервисы. Каждый пример содержит файл README с описанием сценария использования.
Обзор каталога примеров
В таблице ниже перечислены каталоги с примерами в system/software_defined_vehicle/samples и соответствующие им руководства.
| Пример каталога | Описание | Руководство по документации |
|---|---|---|
system/software_defined_vehicle/samples/quickstart |
Пример пакета сервиса Rust, демонстрирующий публикацию VSIDL, подписку и RPC между пакетами Manager и Monitor.
|
Быстрый старт: создание и запуск пакетов сервисов SDV |
system/software_defined_vehicle/samples/vsidl |
Ознакомьтесь с каталогом VSIDL, определениями protobuf и шаблонами реализации пакета сервисов. | Реализация бизнес-логики |
system/software_defined_vehicle/samples/concal |
Пример клиента для чтения и обновления параметров конфигурации и калибровки транспортного средства. | Настройка и калибровка |
system/software_defined_vehicle/samples/health |
Пакет сервисов с отслеживанием состояния и примеры мониторинга качества обслуживания (QoS). | Отслеживание здоровья |
system/software_defined_vehicle/samples/oem_partition_update_client |
Пример сервиса, использующего крейт sdv_oem_updater для запуска и отката обновлений раздела /oem_ab.
|
Обновления разделов AB для OEM-производителей |
system/software_defined_vehicle/samples/sdv_gateway |
Примеры нативных приложений и приложений Java для IVI (NativeSdvGatewayTestApp и SdvCarMonitorTestApp), которые взаимодействуют с основными сервисами SDV через шлюз SDV.
|
Как использовать шлюз SDV в IVI |
system/software_defined_vehicle/samples/telemetry |
Источник данных телеметрии на устройстве и примеры симулятора. | Источники данных |
Как использовать Logging API
Дополнительную информацию об инструкциях можно найти в следующих статьях:
Пример базового журнала
logging.cpp представляет запись в буферы main, system и radio.
Краткое описание доступных буферов журналов приведено в разделе Как посмотреть альтернативные буферы журналов.
Чтобы запустить пример без условных журналов, таких как
ALOGI_IF:logging_sdv_sampleЧтобы запустить пример и распечатать условные журналы, например
ALOGI_IF:LOGIF=1 logging_sdv_sample
Пример структурированного ведения журнала
Пример файла: structured_logging.cpp
Чтобы запустить пример, который записывает журналы в буфер журналов
events, выполните следующие действия:structured_logging_sdv_sample
Буферы журналов event, security и stats содержат структурированные данные, а не произвольный текст.
Структурированные данные регистрируются с помощью API списка событий, который всегда регистрируется с приоритетом INFO и числовым идентификатором тега.
Файл .logtags можно определить с помощью атрибута logtags в Android.bp.. Если он указан, logcat использует его, чтобы получить название тега из его числового идентификатора. Затем название тега можно использовать для фильтрации структурированных журналов. Подробные сведения и описание формата файла приведены в комментарии в файле logcat event.logtags.
В процессе сборки все файлы logtags объединяются и помещаются в файл /system/etc/event-log-tags в образе системы Android.
Как составить пример фильтрации журнала времени
Пример файла: compile_time_log_filtering.cpp
Этот пример содержит макросы, которые можно настроить, чтобы удалить некоторые журналы из исполняемого файла. Подробную информацию можно найти в исходном коде.
Пример фильтрации журналов: log_filtering.cpp
Чтобы запустить пример, установите минимальный приоритет журнала на
WARN:LOGLEVEL=WARN log_filtering_sdv_sample
На фильтрацию журналов влияют свойства системы. Для всех журналов с
log.tag.<tag>persist.log.tag.<tag>
Для всех журналов в системе:
log.tagpersist.log.tag
Чтобы выбрать уровень ведения журнала, который проверяется по порядку, каждому значению можно присвоить V, D, I, W или E.
Действующий уровень ведения журнала – это уровень, заданный в первом системном свойстве, у которого есть значение. Он может быть ниже или выше уровня, заданного приложением с помощью вызова __android_log_set_minimum_priority. Если ни одно из свойств не задано, применяется уровень, настроенный с помощью __android_log_set_minimum_priority.
Подробнее о системе ведения журналов…
Запустите пример, установив тег журнала по умолчанию на
example_tag:LOGTAG=example_tag log_filtering_sdv_sample
В примере также содержится закомментированное определение макроса LOG_TAG, которое можно использовать, чтобы задать тег для всех сообщений в журнале. Тег, заданный таким образом, переопределяет тег, заданный во время выполнения с помощью __android_log_set_default_tag.
Если макрос LOG_TAG не определен и приложение не вызывает __android_log_set_default_tag, тегом по умолчанию будет результат getprogname(). Например, имя исполняемого файла.