Android Studio for Platform (ASfP) 是建議使用的整合式開發環境 (IDE),適用於 Android Automotive OS (AAOS) 軟體定義車輛 (SDV) 平台開發。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/samplesSDV Core 平台整合 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_safety在 SDV 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。如要進一步瞭解所有設定選項,請參閱「設定參數」。如要套用變更,請依序選取「File」>「Sync Project」。
部署 SDV 服務套件
ASfP 內含 SDV 外掛程式,可將包含服務套件的 APEX 直接部署至正在執行的 SDV 裝置。外掛程式預設為停用。如要使用這項功能,請依序前往「設定」>「外掛程式」,然後啟用 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 設定,請選取「From canonical configuration」(從標準設定),然後建立或匯入設定,例如 SDV Core with SDV IVI,或是 SDV Media with SDV IVI for Display Safety。如要建立單一 VM,請改為選取「From local Android source tree checkout」。
如要在單一畫面上查看所有 VM 螢幕,並存取其他裝置選項,請使用 Cuttlefish 工具視窗。如要開啟,請選取側邊面板中的「...」圖示,然後選取「Cuttlefish」,或在「說明」>「尋找動作」中搜尋「Cuttlefish」。您也可以在「執行中的裝置」中查看個別螢幕。由於 SDV Core 會在沒有螢幕的環境下執行,請使用 Logcat 和終端機檢查。
偵錯及測試
如要進一步瞭解如何在 ASfP 中偵錯及測試,請參閱「偵錯平台程式碼」和「測試平台程式碼」。如要進一步瞭解如何設定 CodeLLDB 來偵錯 Rust 服務套件,請參閱「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 關鍵字,並在「Problems」視窗中顯示語法錯誤、未解決的型別和 VSIDLC 驗證錯誤。如要進一步瞭解驗證規則和錯誤代碼,請參閱 VSIDL 語言規格。
- 自動完成和文件:按下 Ctrl + 空格鍵,即可查看關鍵字、訊息、服務、主題和頻道建議;按下 Ctrl + Q 鍵,即可查看文件註解。
- 導覽和格式設定:你可以按下 Ctrl+B 前往
.vsidl或.proto定義,按下 Alt+Shift+F7 尋找參照,按下 Ctrl+F12 查看檔案結構,以及按下 Ctrl+Alt+L 格式化檔案。
為 AI 輔助工具新增 SDV 脈絡
ASfP 內含 Android Studio 內建 Gemini。如要進一步瞭解 ASfP 功能,請參閱「認識 Android Studio for Platform」。如要協助 Gemini 或其他 AI 程式碼輔助工具遵循 SDV 慣例,請在 SDV 目錄的根目錄中新增 AGENTS.md 檔案。如要進一步瞭解 Agent 檔案,請參閱「使用 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.