AOSP 提供了多种工具和测试套件 (test suite),用于测试实现的各个部分。在继续学习本部分之前,您应该熟悉以下术语:
- 与 Android 兼容的设备
- 可运行由第三方开发者使用 Android SDK 和 NDK 编写的任何第三方应用的设备。与 Android 兼容的设备必须遵守兼容性定义文档 (CDD) 中的要求,并通过兼容性测试套件 (CTS) 的测试。与 Android 兼容的设备有资格加入 Android 生态系统,其中包括获得 Google Play 商店和 Google 移动服务 (GMS) 应用和 API 套件的潜在许可,以及对 Android 商标的使用。我们欢迎任何人使用 Android 源代码,但要成为 Android 生态系统的一部分,设备必须与 Android 兼容。
- 工件
- 工件是与 build 相关的日志,用于支持本地问题排查。
- 兼容性定义文档 (CDD)
- 一种文档,列出了与 Android 兼容的设备应遵循的软件和硬件要求。
- 兼容性测试套件 (CTS)
一个免费的商业级测试套件,可以下载二进制文件版本,也可以在 AOSP 中下载源代码版本。CTS 是一组单元测试,旨在集成到您的日常工作流程中。CTS 的目的是发现不兼容性,并确保软件在整个开发过程中保持兼容性。
CTS 和平台测试并不互斥。下面列出了一些一般准则:
- 如果测试断言框架 API 函数或行为的正确性,并且应该在 OEM 合作伙伴之间强制执行,那么它应该在 CTS 中。
- 如果测试的意图是在平台开发期间捕捉回归,并且可能需要特许权限来执行,还可能依赖于实现细节(如 AOSP 中所发布),那么它应为平台测试。
- Google 移动服务 (GMS)
可在设备上预安装的一系列 Google 应用和 API。
- GoogleTest (GTest)
GTest 是一个 C++ 测试和模拟框架。GTest 二进制文件通常会访问较低级别的抽象层,或针对各种系统服务执行原始 IPC。GTest 的测试方法通常与接受测试的服务密切相关。CTS 包含 GTest 框架。
- 插桩测试
插桩测试提供了一种通过
am instrument
命令启动的特殊测试作业环境,其中目标应用进程会重启并使用基本的应用上下文进行初始化,并在应用进程虚拟机内启动插桩线程。CTS 包含插桩测试。- Logcat
Logcat 是一个命令行工具,用于创建系统消息日志,包括设备抛出错误时的堆栈轨迹,以及从您的应用使用
Log
类写入的消息。- 日志记录
日志记录是指使用日志来记录计算机系统事件,例如错误。由于在 Logcat tool 中合并使用了多个标准,Android 中的日志记录较为复杂。
- 提交后测试
Android 提交后测试在新的补丁提交到通用内核分支后执行。通过输入
aosp_kernel
作为部分分支名称,您会看到具有结果的内核分支列表。例如,可以在 https://ci.android.com/builds/branches/aosp_kernel-common-android-mainline/grid 上找到android-mainline
的结果。- 提交前测试
提交前测试用于防止在通用内核中引入故障。
- Trade Federation
Trade Federation(也称为 Tradefed)是一种连续的测试框架,专门用于在 Android 设备上运行测试。例如,Tradefed 可用于运行兼容性测试套件和供应商测试套件测试。
- 供应商测试套件 (VTS)
Android 供应商测试套件 (VTS) 提供了大量用于进行 Android 测试的功能,能够促进由测试驱动的开发流程,并自动执行 HAL 和 OS 内核测试。
平台测试类型
平台测试通常与一个或多个 Android 系统服务或硬件抽象层 (HAL) 交互、执行受测对象的功能,并断言测试结果的正确性。平台测试可能会:
- (类型 1)使用 Android 框架来锻炼框架 API。执行的特定 API 可能包括:
- 用于第三方应用的公共 API
- 用于特权应用的隐藏 API,即系统 API 或私有 API(
@hide
, or
受保护的,
软件包私有)
- (类型 2)直接使用原始 binder 或 IPC 代理调用 Android 系统服务。
- (类型 3)使用低级别 API 或 IPC 接口直接与 HAL 交互。
类型 1 和 2 的测试通常是插桩测试,而类型 3 的测试通常是 GTest。
延伸阅读
下面列出了您后续可以参阅的文档:
如果您还没学过 Android 架构,请参阅架构概览。
如果您要创建与 Android 兼容的设备,请参阅 Android 兼容性计划概览。
如需将插桩测试、功能测试、指标测试和 JAR 主机测试集成到平台持续测试服务中,请参阅测试开发工作流。
如需检测设备上的漏洞以及加强设备抵御漏洞的能力,请参阅安全测试。
如需了解如何测试 HAL 和内核实现,请参阅供应商测试套件 (VTS) 和基础架构。
如需了解应用测试,请参阅 Android 应用测试基础知识,还可参考使用 Kotlin 05.1 进行高级 Android 开发:测试基础知识,使用提供的样本进行实操。
了解可通过 Repo 钩子进行的基本提交前测试。在继续执行上传提交等操作之前,可以通过 Repo 钩子运行 linter、检查格式和触发单元测试。默认情况下这些钩子处于停用状态。如需了解详情,请参阅 AOSP Preuplaod 钩子。
如需详细了解日志记录,请参阅了解日志记录。
如需了解如何调试 Android 代码,请参阅调试原生平台代码。