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 プロジェクトを作成する手順は次のとおりです。
- ASfP で新しいプロジェクトを作成し、リポジトリ チェックアウトとして AAOS SDV チェックアウトのルートを選択します。ウィザードの手順の詳細については、プロジェクトを作成またはインポートするをご覧ください。
- ASfP でプロジェクトを作成したら、[ASfP] > [Project] > [Open Config] を選択して
.asfp-projectファイルを開きます。 ファイルの内容を次の例に置き換え、
repoをチェックアウトのパスに設定します。repo: /path/to/sdv_source lunch: sdv_core_cf-aosp_current-userdebug directories: include: - system/software_defined_vehicle/samples other_languages: - rust作業する領域の
lunchとdirectoriesを更新します。インデックス登録と同期を高速に保つには、頻繁に変更するディレクトリのみを含めます。次の表に、一般的な SDV ターゲットとディレクトリを示します。SDV 開発の重点 lunch個の目標推奨 directoriesSDV サービス バンドル sdv_core_cf-aosp_current-userdebugサービス カタログとバンドル ディレクトリ( system/software_defined_vehicle/samplesなど)SDV コア プラットフォームの統合 sdv_core_cf-aosp_current-userdebugsystem/software_defined_vehicle/middleware、system/software_defined_vehicle/automotive_services、device/google/sdvSDV IVI 上の SDV ゲートウェイ sdv_ivi_cf-aosp_current-userdebugsystem/software_defined_vehicle/sdv_gateway、system/software_defined_vehicle/samples/sdv_gateway、packages/services/CarSDV メディアでのディスプレイの安全性 sdv_media_har_cf-aosp_current-userdebugpackages/services/display_safety、device/google/sdv_display_safetySDV IVI でのディスプレイの安全性 sdv_ivi_cf_ds-aosp_current-userdebugpackages/apps/Car/DriverUI、packages/services/display_safety/serviceチェックアウトで
trunk_stagingマニフェストを使用する場合は、-aosp_current-userdebugを-trunk_staging-userdebugに置き換えます。ネイティブ プラットフォーム コードも参照するには、cppをother_languagesに追加します。すべての構成オプションの詳細については、構成パラメータをご覧ください。変更を適用するには、[ASfP] > [Sync] > [Sync Project] を選択します。同期モード(完全同期、部分同期、ビルドなし同期)と、チーム用の共有可能な
.asfp-projectテンプレートのエクスポートまたはインポートの詳細については、同期モードと Soong ツール ウィンドウと共有可能なプロジェクト テンプレート(エクスポートとインポート)をご覧ください。
SDV サービス バンドルをデプロイする
ASfP には、サービス バンドルを含む APEX を実行中の SDV デバイスに直接デプロイする SDV プラグインが含まれています。このプラグインはデフォルトで無効になっています。これを使用するには、[Settings] > [Plugins] で SDV プラグインを有効にします。APEX パッケージの詳細については、サービス バンドルをビルドしてデプロイするをご覧ください。
デプロイ方法は、APEX がすでにデバイスに存在するかどうかによって異なります。
- APEX がすでにインストールされている場合は、ASfP から直接変更をデプロイできます。
- APEX が新しい場合は、まずシステム イメージを再ビルドして再起動するか、APEX の署名に使用された鍵を含むシステム イメージを使用する必要があります。その後、ASfP からデプロイできます。
サービス バンドル APEX をデプロイする手順は次のとおりです。
- Cuttlefish プラグインを使用して SDV デバイスを起動します。詳細については、Cuttlefish で SDV デバイスを実行するをご覧ください。
- サービス バンドルの
apex/Android.bpファイルを開き、apex {ブロックの横にあるガターの [Run] アイコンをクリックします。 - 表示されたメニューで、[Run 'Deploy APEX_NAME'] を選択します。同じメニューから、デプロイせずに APEX をビルドしたり、実行構成を変更したりすることもできます。
Cuttlefish で SDV デバイスを実行する
ASfP には、ローカル Cuttlefish デバイスを作成して実行する Cuttlefish プラグインが含まれています。このプラグインには Cuttlefish ホスト オーケストレーターが必要です。ホスト オーケストレーターが利用できない場合、ASfP には設定手順が表示されます。
SDV デバイスを作成する手順は次のとおりです。
- [Tools] > [デバイス マネージャー] を選択し、[+] をクリックして、[Create Cuttlefish Device] を選択します。
- マルチ 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.