SDV 開発用に IDE を設定する

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

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

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

ASfP をインストールする

ASfP のダウンロードとインストール、システム要件の確認について詳しくは、Android Studio for Platform をインストールするをご覧ください。

プラットフォーム チェックアウトのインデックス登録は、特に同じマシンでマルチ VM Cuttlefish デバイスも実行している場合、多くのメモリを使用します。ASfP の実行速度が遅い場合は、プロジェクトとマシンに合わせて ASfP のメモリ設定で最大ヒープサイズを増やし、プロジェクトのスコープを作業ディレクトリに限定します。

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 Core プラットフォームの統合 sdv_core_cf-aosp_current-userdebug system/software_defined_vehicle/middleware、system/software_defined_vehicle/automotive_services、device/google/sdv
    SDV IVI の SDV Gateway 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 に置き換えます。ネイティブ プラットフォーム コードも参照するには、other_languages に cpp を追加します。すべての構成オプションの詳細については、構成パラメータをご覧ください。

  5. 変更を適用するには、[File] > [Sync Project] を選択します。

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 { ブロックの横のガターにある [実行] アイコンをクリックします。
  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 を検索します。[実行中のデバイス] で個々のディスプレイを確認することもできます。SDV Core はディスプレイなしで実行されるため、Logcat とターミナルを使用して検査します。

デバッグとテスト

ASfP でのデバッグとテストについて詳しくは、プラットフォーム コードをデバッグするとプラットフォーム コードをテストするをご覧ください。Rust サービス バンドルをデバッグするための CodeLLDB の設定の詳細については、Rust のデバッグをご覧ください。

デバッガをサービス バンドルにアタッチする場合は、それをホストするプロセスにアタッチします。プロセス名は <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 検証エラーが [問題] ウィンドウに表示されます。検証ルールとそのエラーコードの詳細については、VSIDL 言語仕様をご覧ください。
  • 自動補完とドキュメント: Ctrl+Space キーを押すと、キーワード、メッセージ、サービス、トピック、チャネルの候補が表示されます。Ctrl+Q キーを押すと、ドキュメントのコメントが表示されます。
  • ナビゲーションとフォーマット: Ctrl+B を押して .vsidl または .proto の定義に移動したり、Alt+Shift+F7 を押して参照を検索したり、Ctrl+F12 を押してファイル構造を表示したり、Ctrl+Alt+L を押してファイルをフォーマットしたりできます。

AI アシスタントの SDV コンテキストを追加

ASfP には Gemini in Android Studio が含まれています。ASfP の機能について詳しくは、Android Studio for Platform の概要をご覧ください。Gemini や他の AI コーディング アシスタントが SDV の規則に従うようにするには、SDV カタログのルートに 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.