Как настроить IDE для разработки SDV

Android Studio for Platform (ASfP) – это рекомендуемая интегрированная среда разработки (IDE) для создания программно-определяемых автомобилей (SDV) на базе Android Automotive OS (AAOS). ASfP поддерживает все языки, используемые платформой AAOS SDV, включая Rust для пакетов сервисов SDV.

На этой странице описана только настройка SDV. Дополнительную информацию об общих функциях и рабочих процессах ASfP можно найти в статье Android Studio for Platform.

ASfP работает только на 64-разрядных системах Linux с процессорами x86-64. Его можно использовать на локальной рабочей станции Linux или в облаке. Подробнее о настройке облака…

Установка ASfP

По умолчанию максимальный размер кучи в ASfP составляет 30 ГБ. Индексирование платформы требует много памяти, особенно если на том же компьютере запущено несколько виртуальных устройств Cuttlefish. Ограничьте область проекта каталогами, с которыми вы работаете, и при необходимости измените максимальный размер кучи в настройках памяти ASfP.

ASfP поддерживает автоматические обновления в IDE. Подробнее о том, как обновить Android Studio для платформы… Подробнее о том, как скачать и установить Android Studio for Platform и проверить системные требования…

Как создать проект SDV

Прежде чем начать, инициализируйте, синхронизируйте и соберите извлеченный код AAOS SDV. Дополнительную информацию о настройке оформления заказа можно найти в разделах Расположение кода и Скачивание, сборка и запуск.

Чтобы создать проект SDV, выполните следующие действия:

  1. Создайте новый проект в ASfP и выберите корневой каталог извлечения SDV AAOS в качестве извлечения репозитория. Подробнее о создании и импорте проектов…
  2. После того как ASfP создаст проект, выберите ASfP > Project (Проект) > Open Config (Открыть конфигурацию), чтобы открыть файл .asfp-project.
  3. Замените содержимое файла следующим примером, а затем укажите в repo путь к странице оплаты:

    repo: /path/to/sdv_source
    lunch: sdv_core_cf-aosp_current-userdebug
    directories:
      include:
        -   system/software_defined_vehicle/samples
    other_languages:
      -   rust
    
  4. Обновите данные (lunch, directories) для области, с которой вы работаете. Чтобы индексирование и синхронизация выполнялись быстрее, включайте только те каталоги, которые вы активно изменяете. В таблице ниже перечислены распространенные цели и каталоги SDV.

    Разработка SDV lunch цель Рекомендуем – directories
    Пакеты сервисов SDV sdv_core_cf-aosp_current-userdebug Каталог сервисов и каталог пакетов, например system/software_defined_vehicle/samples.
    Интеграция с платформой SDV Core sdv_core_cf-aosp_current-userdebug system/software_defined_vehicle/middleware, system/software_defined_vehicle/automotive_services, device/google/sdv
    Шлюз SDV на SDV IVI sdv_ivi_cf-aosp_current-userdebug system/software_defined_vehicle/sdv_gateway, system/software_defined_vehicle/samples/sdv_gateway, packages/services/Car
    Безопасность при использовании медиасистемы SDV sdv_media_har_cf-aosp_current-userdebug packages/services/display_safety, device/google/sdv_display_safety
    Безопасность дисплея в информационно-развлекательной системе программно-определяемого автомобиля sdv_ivi_cf_ds-aosp_current-userdebug packages/apps/Car/DriverUI, packages/services/display_safety/service

    Если при оформлении покупки используется манифест trunk_staging, замените -aosp_current-userdebug на -trunk_staging-userdebug. Чтобы также просматривать код нативной платформы, добавьте cpp в other_languages. Дополнительную информацию обо всех параметрах конфигурации можно найти в статье Параметры конфигурации.

  5. Чтобы применить изменения, выберите ASfP > Sync > Sync Project (ASfP > Синхронизировать > Синхронизировать проект). Подробнее о режимах синхронизации (полная, частичная и без сборки), а также об экспорте и импорте шаблонов .asfp-project для команды читайте в статьях Режимы синхронизации и окно инструмента Soong и Общие шаблоны проектов (экспорт и импорт).

Развертывание пакетов сервисов SDV

В ASfP входит плагин SDV, который развертывает APEX с пакетами сервисов непосредственно на работающем устройстве SDV. По умолчанию плагин отключен. Чтобы использовать его, включите плагин SDV в разделе Настройки > Плагины. Подробнее об упаковке APEX см. в разделе Создание и развертывание пакетов сервисов.

Способ развертывания зависит от того, есть ли уже APEX на устройстве:

  • Если APEX уже установлено, вы можете развернуть изменения непосредственно из ASfP.
  • Если APEX-файл новый, сначала необходимо пересобрать и перезапустить образ системы или использовать образ системы, который включает ключ, используемый для подписания APEX-файла. После этого вы сможете развернуть его из ASfP.

Чтобы развернуть APEX-файл пакета сервисов, выполните следующие действия:

  1. Запустите устройство SDV с плагином Cuttlefish. Подробнее о том, как запускать устройства SDV на Cuttlefish…
  2. Откройте файл apex/Android.bp пакета сервисов и нажмите на значок Run (Запустить) на полях рядом с блоком apex {.
  3. В открывшемся меню выберите Run 'Deploy APEX_NAME' (Запустить "Развернуть"). В этом же меню можно собрать APEX без развертывания или изменить конфигурацию запуска.

Как запускать устройства SDV на Cuttlefish

В ASfP входит плагин Cuttlefish, который создает и запускает локальные устройства Cuttlefish. Для работы плагина требуется оркестратор хоста Cuttlefish. Если оркестратор хоста недоступен, ASfP покажет инструкции по его настройке.

Чтобы создать устройство SDV, выполните следующие действия:

  1. Выберите Tools (Инструменты) > Device Manager (Диспетчер устройств), нажмите + и выберите Create Cuttlefish Device (Создать устройство Cuttlefish).
  2. Чтобы создать конфигурацию с несколькими виртуальными машинами, выберите Из канонической конфигурации и создайте или импортируйте конфигурацию для своей настройки, например SDV Core с SDV IVI или SDV Media с SDV IVI для Display Safety. Чтобы создать одну виртуальную машину, выберите From local Android source tree checkout (Из локального дерева исходного кода Android).

Чтобы посмотреть все экраны виртуальных машин на одном экране и получить доступ к дополнительным параметрам устройства, используйте окно инструмента Cuttlefish. Чтобы открыть его, нажмите на значок … на боковой панели и выберите Cuttlefish или найдите Cuttlefish в разделе Help (Справка) > Find Action (Найти действие). Вы также можете посмотреть отдельные экраны в разделе Работающие устройства. Поскольку SDV Core работает без дисплея, для проверки используйте Logcat и терминал.

Отладка и тестирование

В ASfP есть встроенный отладчик LLDB для кода на C++ и Rust. Дополнительную информацию об отладке и тестировании в ASfP можно найти в статьях Отладка кода платформы, Отладка кода Rust, Тестирование кода платформы с помощью atest и Отладка целей cc_test и rust_test в LLDB.

При подключении отладчика к пакету служб подключитесь к процессу, в котором он размещен. Названия процессов указываются в формате <bundle_name>:<instance_name>, например OrchestratorSampleRustServiceBundle:sample-main-no-conditions. Следующая команда выводит список соответствующих процессов и их идентификаторов:

adb shell ps -A | grep <bundle_name>

Дополнительную информацию о рабочих процессах отладки SDV, например о подключении к нескольким устройствам и просмотре журналов, можно найти в статье Отладка SDV.

Редактирование файлов VSIDL

В ASfP входит языковой сервер VSIDL (vsidl-lsp). Чтобы узнать, как настроить каталог для языкового сервера, прочитайте статью Автоматическое обновление каталога и интеграция LSP. Если в каталоге есть файл CATALOG_UPDATE, то в редакторе доступны следующие функции для файлов .vsidl:

  • Проверка в реальном времени. Редактор выделяет ключевые слова VSIDL и показывает синтаксические ошибки, неразрешенные типы и ошибки проверки VSIDLC в окне Проблемы. Дополнительную информацию о правилах проверки и кодах ошибок можно найти в спецификации языка VSIDL.
  • Автозаполнение и документация. Нажмите Ctrl + Пробел, чтобы увидеть подсказки по ключевым словам, сообщениям, сервисам, темам и каналам, или Ctrl + Q, чтобы посмотреть комментарии к документации.
  • Навигация и форматирование. Чтобы перейти к определениям .vsidl или .proto, нажмите Ctrl + B. Чтобы найти ссылки, нажмите Alt + Shift + F7. Чтобы посмотреть структуру файла, нажмите Ctrl + F12. Чтобы отформатировать файл, нажмите Ctrl + Alt + L.

Добавление контекста SDV для ИИ-помощников

ASfP включает ИИ в Android Studio и встроенного агента с инструментами сборки Soong и atest. Дополнительную информацию об ИИ-функциях ASfP можно найти в статье Знакомство с Android Studio for Platform. Чтобы ИИ-помощник следовал соглашениям SDV, добавьте файл AGENTS.md в корень каталога VSIDL. Подробнее о настройке Gemini с помощью файлов AGENTS.md…

Ниже приведен пример, который вы можете адаптировать для своего каталога.

# AAOS SDV service catalog rules

- Implement SDV service bundles in Rust under `services/<BundleName>/src/`.
- Keep `.proto` files limited to Protobuf `message`, `enum`, and `service` definitions. Define service bundles, APEX packaging, VM placement, and SOME/IP mappings in `.vsidl` files.
- Regenerate middleware with `vsidlc` after you change `.vsidl` or `.proto` files, and leave generated files unmodified.
- Use `PascalCase` for service bundle names and lowercase `kebab-case` for topic and channel names.
- Run `vsidlc --explain <CODE>` to look up a VSIDLC error code.