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 プロジェクトを作成する手順は次のとおりです。
- 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 Core プラットフォームの統合 sdv_core_cf-aosp_current-userdebugsystem/software_defined_vehicle/middleware、system/software_defined_vehicle/automotive_services、device/google/sdvSDV IVI の SDV Gateway 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に置き換えます。ネイティブ プラットフォーム コードも参照するには、other_languagesにcppを追加します。すべての構成オプションの詳細については、構成パラメータをご覧ください。変更を適用するには、[File] > [Sync Project] を選択します。
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 '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 を検索します。[実行中のデバイス] で個々のディスプレイを確認することもできます。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.