Android Studio for Platform (ASfP) 與 atest 和 Soong 測試模組整合,因此您可以在 Linux 主機、連結裝置或 Cuttlefish 虛擬裝置上,透過 IDE 執行及偵錯平台測試。
必要條件
- 開啟已設定 AOSP 簽出和
lunch目標的 ASfP 專案。 - 如要測試裝置,請連線至實體裝置,或啟動執行相符版本的 Cuttlefish 虛擬裝置。
執行及偵錯測試
您可以從 ASfP 的多個位置啟動平台測試和偵錯工作階段:
Android.bp測試目標:開啟Android.bp檔案,然後按一下任何測試模組 (*_test或*_test_host) 旁邊空白邊中的「執行」:- 執行:適用於所有 Soong 測試模組類型 (
android_test、java_test_host、cc_test、rust_test、python_test、sh_test和android_robolectric_test)。 - 偵錯:適用於
android_test模組 (使用atest --wait-for-debugger附加 Java 偵錯工具) 和 C++ 或 Rust 測試模組 (cc_test、cc_test_host、rust_test和rust_test_host,在 ASfP 內建的 LLDB 偵錯工具下啟動)。
- 執行:適用於所有 Soong 測試模組類型 (
- 來源檔案空白處的圖示:按一下來源程式碼中測試類別或
@Test方法旁邊的「執行」,即可執行或偵錯該特定測試。 - 按一下滑鼠右鍵的內容選單:在測試檔案、類別、方法或
Android.bp模組上按一下滑鼠右鍵,然後選取「Run」或「Debug」。 - 內建 Agent (Android Studio 中的 AI):在「Agent」工具視窗中,內建 Agent 可以執行
atest目標,在編輯程式碼後驗證變更。 - 整合式終端機:開啟「View」>「工具視窗」>「Terminal」,直接執行
atest指令。
智慧測試設定和偵錯
從側欄或內容選單啟動測試時,ASfP 會使用 Android.bp 模組圖表建立及設定 Soong 測試執行設定。
偵錯 android_test Java 和 Kotlin 目標
在 Android.bp 中按一下 android_test 模組旁邊的溝槽圖示,或在 Java/Kotlin JUnit 類別或 @Test 方法旁邊按一下,然後選取「Debug '<TestName>'」。ASfP 會從來源檔案溝槽中,挑選最接近的封閉式 android_test 模組 (其 srcs 包含該檔案),並將設定命名為 <module>、<module>:<SimpleClass> 或 <module>:<SimpleClass>#<method>。
ASfP 會使用 --wait-for-debugger 執行 atest,從模組的 AndroidManifest.xml 讀取目標 package 屬性,等待連結裝置上的程序,然後附加 Java 偵錯工具。

在 LLDB 下偵錯 cc_test 和 rust_test 目標
如要偵錯 C++ 或 Rust 測試模組 (cc_test、cc_test_host、rust_test 或 rust_test_host),請按一下 Android.bp 裝訂邊圖示,然後選取「Debug '<TestName>'」。ASfP 會在內建的 LLDB 偵錯工具下啟動已編譯的測試二進位檔,而不是透過 atest 執行。
設定 Soong 測試執行設定
開啟「Run」>「Edit Configurations」,然後選取「Soong Test」設定,自訂測試的建構、部署及啟動方式:
- 模組自動完成和
Android.bp導覽:「模組」欄位會自動完成專案中已建立索引的 Soong 測試模組。按一下欄位旁的「前往 Android.bp」,即可跳至Android.bp中的模組宣告。 - 執行平台:裝置或主機 (包括
host_supported: true):ASfP 會評估模組規則及其遞移defaults鏈結 (host_supported、device_supported、enabled、target.android.enabled和target.host.enabled):- 雙目標測試 (
cc_test和rust_test,搭配host_supported: true):「裝置」和「主機」圓形按鈕 均可使用 (預設為「裝置」)。「裝置」和「主機」各自維護獨立的 LLDB 偵錯工具範本。在「裝置」和「主機」之間切換「執行於」,即可在遠端裝置lldb-server設定和本機主機二進位設定之間切換,同時保留在各目標上所做的自訂項目。 - 單一目標測試:如果 C++ 或 Rust 測試只為一個環境建構 (例如僅限裝置的
cc_test或僅限主機的cc_test_host或rust_test_host),ASfP 會選取支援的目標,並停用不支援的圓形按鈕,同時顯示說明工具提示:「<module> (<ruleType>) doesn't build for the host or device.」
- 雙目標測試 (
- 發布前工作 (建構原生測試模組並使用 atest 部署):
根據預設,每個 Soong 測試設定都包含兩項「發布前」工作:
- 建構原生測試模組:在啟動 LLDB 之前,建構
<module>-target(適用於裝置) 或<module>-host(適用於主機)。 - 使用 atest 部署:在「裝置」上偵錯時,系統會執行
atest <module> --collect-tests-only --disable-teardown -it -s <serial> -- --abi <abi>,因此 Tradefed 會推送測試依附元件並執行目標準備工具,然後 LLDB 才會啟動二進位檔。將游標懸停在「使用測試部署」方塊上,即可預覽確切的atest指令。如果裝置上已有依附元件,請移除「Deploy with atest」(使用 atest 部署),ASfP 就只會直接推送測試二進位檔,加快疊代速度。選取「在以下裝置上執行:主機」時,ASfP 會自動略過「使用測試部署」。
- 建構原生測試模組:在啟動 LLDB 之前,建構
- 修改選項和偵錯工具 (LLDB 選項資訊卡):使用「修改選項」新增選用設定欄位:
- 程式引數 (作業系統,僅限 C++ 和 Rust 測試):
偵錯時,在
--gtest_filter或libtest篩選器之後,直接傳遞至cc_test或rust_test二進位檔的額外引數。 - atest 參數 (Test):執行測試或使用「Deploy with atest」準備裝置時,傳遞至
atest的額外標記。 - 偵錯工具 (僅限 C++ 和 Rust 測試):當「模組」為
cc_test*或rust_test*目標時顯示。切換「LLDB options」資訊卡 (例如「Stop on entry」、「Cache symbols across sessions」、「Load symbols on demand」或「With Rust visualizers」 (適用於 Rust 測試)),按一下「Reset to defaults」即可重設有效的「Device」或「Host」範本,或從「Modify options」>「Debugger」新增「Symbol directories」、「Init、Pre-run、Post-run 或 Exit commands」和「Launch JSON」(「DAP Settings」)。
- 程式引數 (作業系統,僅限 C++ 和 Rust 測試):
偵錯時,在

查看測試結果
測試執行進度、通過或失敗狀態、堆疊追蹤記錄和裝置記錄,都會即時顯示在 ASfP 的「Run」或「Debug」工具視窗中。
測試訣竅
- 執行目標測試:從編輯器空白邊測試個別方法,不必執行整個測試套件。
- 使用 Cuttlefish 快照:在 Cuttlefish 虛擬裝置上執行裝置測試時,請使用快照在執行之間還原裝置的清空狀態。
- 檢查 Soong 建構記錄:如果測試在執行前無法編譯,請檢查 Soong 工具視窗中的編譯器診斷資訊。