SDV 開発用に IDE を設定する

Android Studio for Platform(ASfP)は、Android Automotive OS(AAOS)ソフトウェア定義車両(SDV)プラットフォーム開発に推奨される統合開発環境(IDE)です。ASfP は、SDV サービス バンドル用の Rust を含め、AAOS SDV プラットフォームで使用されるすべての言語をサポートしています。

このページでは、SDV 固有の設定のみについて説明します。一般的な ASfP の機能とワークフローについて詳しくは、Android Studio for Platform をご覧ください。

ASfP は、x86-64 CPU を搭載した 64 ビット Linux でのみ動作します。ローカルの Linux ワークステーションまたはクラウドで使用できます。クラウドの設定の詳細については、クラウド開発をご覧ください。

ASfP をインストールする

ASfP のデフォルトの最大ヒープサイズは 30 GB です。プラットフォームのチェックアウトのインデックス登録には、特に同じマシンでマルチ VM Cuttlefish デバイスも実行している場合、大量のメモリが使用されます。プロジェクトのスコープを、作業するディレクトリに限定し、必要に応じて ASfP のメモリ設定で最大ヒープサイズを調整します。

ASfP は、IDE 内での自動更新をサポートしています。詳しくは、プラットフォーム向け Android Studio を更新するをご覧ください。ASfP のダウンロードとインストール、システム要件の確認について詳しくは、Android Studio for Platform をインストールするをご覧ください。

SDV プロジェクトを作成する

始める前に、AAOS SDV チェックアウトを初期化、同期、ビルドします。チェックアウトの設定の詳細については、コードの場所とダウンロード、ビルド、実行をご覧ください。

SDV プロジェクトを作成する手順は次のとおりです。

  1. ASfP で新しいプロジェクトを作成し、リポジトリ チェックアウトとして AAOS SDV チェックアウトのルートを選択します。ウィザードの手順の詳細については、プロジェクトを作成またはインポートするをご覧ください。
  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 コア プラットフォームの統合 sdv_core_cf-aosp_current-userdebug system/software_defined_vehicle/middleware、system/software_defined_vehicle/automotive_services、device/google/sdv
    SDV IVI 上の SDV ゲートウェイ 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 でのディスプレイの安全性 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-project テンプレートのエクスポートまたはインポートの詳細については、同期モードと Soong ツール ウィンドウと共有可能なプロジェクト テンプレート(エクスポートとインポート)をご覧ください。

SDV サービス バンドルをデプロイする

ASfP には、サービス バンドルを含む APEX を実行中の SDV デバイスに直接デプロイする SDV プラグインが含まれています。このプラグインはデフォルトで無効になっています。これを使用するには、[Settings] > [Plugins] で SDV プラグインを有効にします。APEX パッケージの詳細については、サービス バンドルをビルドしてデプロイするをご覧ください。

デプロイ方法は、APEX がすでにデバイスに存在するかどうかによって異なります。

  • APEX がすでにインストールされている場合は、ASfP から直接変更をデプロイできます。
  • APEX が新しい場合は、まずシステム イメージを再ビルドして再起動するか、APEX の署名に使用された鍵を含むシステム イメージを使用する必要があります。その後、ASfP からデプロイできます。

サービス バンドル APEX をデプロイする手順は次のとおりです。

  1. Cuttlefish プラグインを使用して SDV デバイスを起動します。詳細については、Cuttlefish で SDV デバイスを実行するをご覧ください。
  2. サービス バンドルの apex/Android.bp ファイルを開き、apex { ブロックの横にあるガターの [Run] アイコンをクリックします。
  3. 表示されたメニューで、[Run 'Deploy APEX_NAME'] を選択します。同じメニューから、デプロイせずに APEX をビルドしたり、実行構成を変更したりすることもできます。

Cuttlefish で SDV デバイスを実行する

ASfP には、ローカル Cuttlefish デバイスを作成して実行する Cuttlefish プラグインが含まれています。このプラグインには Cuttlefish ホスト オーケストレーターが必要です。ホスト オーケストレーターが利用できない場合、ASfP には設定手順が表示されます。

SDV デバイスを作成する手順は次のとおりです。

  1. [Tools] > [デバイス マネージャー] を選択し、[+] をクリックして、[Create Cuttlefish Device] を選択します。
  2. マルチ VM 設定を作成するには、[正規構成から] を選択し、SDV Core と SDV IVI、SDV Media と SDV IVI(ディスプレイの安全性)など、設定の構成を作成またはインポートします。単一の VM を作成するには、[From local Android source tree checkout] を選択します。

すべての VM ディスプレイを 1 つの画面に表示し、追加のデバイス オプションにアクセスするには、[Cuttlefish] ツール ウィンドウを使用します。これを開くには、サイドパネルの ... アイコンを選択して [Cuttlefish] を選択するか、[Help] > [Find Action] で [Cuttlefish] を検索します。[Running Devices] で個々のディスプレイを表示することもできます。SDV Core はディスプレイなしで動作するため、Logcat とターミナルを使用して検査します。

デバッグとテスト

ASfP には、C++ コードと Rust コード用の組み込み LLDB デバッガが含まれています。ASfP でのデバッグとテストの詳細については、プラットフォーム コードをデバッグする、Rust コードをデバッグする、atest でプラットフォーム コードをテストする、LLDB で cc_test ターゲットと rust_test ターゲットをデバッグするをご覧ください。

デバッガをサービス バンドルにアタッチする場合は、それをホストするプロセスにアタッチします。プロセス名は <bundle_name>:<instance_name> 形式(OrchestratorSampleRustServiceBundle:sample-main-no-conditions など)を使用します。次のコマンドは、一致するプロセスとそのプロセス ID を一覧表示します。

adb shell ps -A | grep <bundle_name>

複数のデバイスへの接続やログの表示など、SDV デバッグ ワークフローの詳細については、SDV をデバッグするをご覧ください。

VSIDL ファイルを編集する

ASfP には、VSIDL 言語サーバー(vsidl-lsp)が含まれています。言語サーバーのカタログを設定する方法については、カタログの自動更新と LSP の統合をご覧ください。カタログに CATALOG_UPDATE ファイルが含まれている場合、エディタには .vsidl ファイルに対して次の機能が用意されています。

  • ライブ検証: エディタは VSIDL キーワードをハイライト表示し、構文エラー、未解決の型、VSIDLC 検証エラーを [Problems] ウィンドウに表示します。検証ルールとエラーコードの詳細については、VSIDL 言語仕様をご覧ください。
  • 予測入力とドキュメント: Ctrl+Space キーを押すと、キーワード、メッセージ、サービス、トピック、チャネルの候補が表示されます。Ctrl+Q キーを押すと、ドキュメントのコメントが表示されます。
  • Navigation とフォーマット: Ctrl+B キーを押すと .vsidl または .proto の定義に移動できます。Alt+Shift+F7 キーを押すと参照を検索できます。Ctrl+F12 キーを押すとファイル構造を表示できます。Ctrl+Alt+L キーを押すとファイルをフォーマットできます。

AI アシスタントに SDV コンテキストを追加する

ASfP には、Android Studio の AI と、Soong ビルドツールおよび atest ツールを備えた組み込みエージェントが含まれています。ASfP AI 機能の詳細については、Android Studio for Platform の概要をご覧ください。AI アシスタントが SDV 規則に従うようにするには、VSIDL カタログのルートに AGENTS.md ファイルを追加します。エージェント ファイルの詳細については、AGENTS.md ファイルを使用して Gemini をカスタマイズするをご覧ください。

次の例は、カタログに合わせて調整できる出発点です。

# 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.