Android Studio for Platform (ASfP) 与 atest 和 Soong 测试模块集成,因此您可以在 Linux 主机、已连接的设备或 Cuttlefish 虚拟设备上通过 IDE 运行和调试平台测试。
前提条件
- 打开一个使用 AOSP 代码库和
lunch目标配置的 ASfP 项目。 - 对于设备测试,请连接实体设备或启动运行匹配 build 的 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 Test 运行配置。
调试 android_test Java 和 Kotlin 目标平台
点击 Android.bp 中 android_test 模块旁边的边线图标,或 Java/Kotlin JUnit 类或 @Test 方法旁边
的边线图标,然后选择 Debug
'<TestName>'。从源文件边线中,ASfP 会选择最近的srcs包含该文件的
android_test 模块,并将配置命名为
<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 测试模块自动补全。点击相应字段旁边的 Go to 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 芯片进行部署上,即可预览确切的atest命令。为了在依赖项已位于设备上时更快地进行迭代,请移除使用 atest 进行部署,以便 ASfP 直接推送测试二进制文件。如果您选择 Run on: Host,ASfP 会自动跳过 Deploy with atest。
- 构建原生测试模块:在启动 LLDB 之前构建
- 修改选项和调试器(LLDB 选项卡片):使用修改选项添加可选的配置字段:
- 程序实参(仅限 操作系统、C++ 和 Rust 测试):调试时,在
--gtest_filter或libtest过滤条件之后直接传递给cc_test或rust_test二进制文件的额外实参。 - atest 实参(测试):运行测试或使用 Deploy with atest 准备设备时传递给
atest的额外标志。 - 调试器(仅限 C++ 和 Rust 测试):当模块为
cc_test*或rust_test*目标时显示。切换 LLDB 选项卡片(例如 Stop on entry、Cache symbols across sessions、Load symbols on demand 或 With Rust visualizers [适用于 Rust 测试]),点击 Reset to defaults 可重置有效的设备或主机模板,或通过修改选项 > 调试器添加符号目录、初始化、预运行、运行后或退出命令以及启动 JSON (DAP 设置)。
- 程序实参(仅限 操作系统、C++ 和 Rust 测试):调试时,在

查看测试结果
测试作业进度、通过或失败状态、堆栈轨迹和设备日志会实时显示在 ASfP 的 Run 或 Debug 工具窗口中。
测试提示
- 运行目标测试:在编辑器边线中测试单个方法,而无需运行整个测试套件。
- 使用 Cuttlefish 快照:在 Cuttlefish 虚拟设备上运行设备测试时,使用快照在每次运行之间恢复干净的设备状态。
- 检查 Soong build 日志:如果测试在运行之前未能成功编译,请检查 Soong 工具窗口中的编译器诊断信息。