1. VTS 概述:定义、生态角色与测试体系定位
VTS(Vendor Test Suite,供应商测试套件)是 Android 平台为验证设备 HAL(硬件抽象层)实现与系统框架兼容性而设计的自动化测试集合。它直接面向 SoC 厂商、OEM 和 T1 供应商,确保底层硬件接口遵循 Android 定义的契约。
核心定义:VTS 是一套基于 gtest / TradeFed 的二进制测试集,运行在设备端或模拟器上,验证 HAL 接口、内核接口、系统属性、权限模型等是否符合 Android 兼容性定义(CDD)与 Treble 架构要求。
1.1 在 Android 生态中的核心作用
VTS 是 Android Treble 架构的“守门人”,其作用贯穿设备开发、集成与认证全流程:
- 接口契约强制验证:确保 HAL 实现严格遵循 .hal 接口定义(AIDL / HIDL),包括方法签名、返回值类型、回调顺序、事务 ID 等。
- 向前兼容保障:VTS 测试覆盖从 Android 8.0(Treble 引入)到当前版本的所有接口变更,防止 vendor 实现因框架升级而损坏。
- 安全基线检查:包含 SELinux 策略、权限模型、加密 API 等安全相关测试,防止 vendor 层引入系统级漏洞。
- 碎片化控制:通过强制 VTS 通过率(目前要求 100%),限制厂商对底层接口的随意修改,降低应用兼容性碎片化。
实践提示:在 GMS 认证流程中,VTS 是前置条件。若 VTS 失败,CTS 测试将无法启动。建议在每次 HAL 接口变更后立即运行 VTS 子集,而非等到集成末期。
1.2 VTS 与 CTS / GTS 的区别与联系
Android 兼容性测试体系由多个套件组成,VTS、CTS、GTS 分别聚焦不同层次。下表从测试目标、执行层级、关注对象三个维度进行对比:
| 对比维度 | VTS | CTS | GTS |
|---|---|---|---|
| 全称 | Vendor Test Suite | Compatibility Test Suite | Google Test Suite |
| 测试目标 | HAL 接口、内核接口、vendor 实现 | 应用框架、API、系统行为 | Google 移动服务(GMS)功能 |
| 执行层级 | Native 层(C++ / Rust) | Framework 层(Java / Kotlin) | Framework + 应用层 |
| 主要受众 | SoC 厂商、T1 供应商 | OEM、ODM | OEM(需预装 GMS) |
| 失败影响 | 阻断 CTS 执行 | 无法获得 Android 兼容性认证 | 无法预装 Google 应用 |
| 测试语言 | gtest / TradeFed | Instrumentation / TradeFed | Instrumentation / TradeFed |
三者的联系体现在 分层递进 关系:VTS 验证底层接口正确性 → CTS 验证框架兼容性 → GTS 验证 GMS 功能完整性。任何一层失败都会导致认证链条断裂。
常见误区:不要将 VTS 视为 CTS 的子集。VTS 测试的是 vendor 实现与框架的接口契约,而 CTS 测试的是 应用对框架 API 的使用。两者测试对象完全不同,但结果相互依赖。
1.3 VTS 在 Treble 架构中的位置
为了直观展示 VTS 的测试边界,下图描绘了 Android Treble 架构中 VTS 的覆盖范围:
1.4 VTS 测试套件组成概览
VTS 测试套件按测试对象分为以下模块,每个模块对应一组 HAL 接口或系统组件:
| 测试模块 | 覆盖接口 / 组件 | 典型测试项数 |
|---|---|---|
| VTS Core | 系统属性、SELinux、权限、分区挂载 | ~200 |
| VTS HAL | 所有 .hal 接口(audio / camera / sensor / wifi 等) | ~1500 |
| VTS Kernel | 内核 ABI、sysfs、procfs、ioctl 接口 | ~300 |
| VTS Performance | HAL 调用延迟、内存开销、binder 事务大小 | ~80 |
| VTS Security | 密钥管理、DRM、TEE 通信、加密算法 | ~120 |
集成建议:在开发阶段,优先运行
VTS HAL 模块中与你修改的 HAL 接口对应的子集。例如修改 camera HAL 时,执行 vts-tradefed run vts -m VtsHalCameraProviderV2_4TargetTest 即可快速验证。
1.5 VTS 测试执行流程
一次完整的 VTS 测试执行遵循以下步骤,理解该流程有助于定位失败原因:
- 环境准备:设备刷入 userdebug 或 eng 版本,开启 adb root,关闭 verity。
- 测试调度:TradeFed 加载 VTS 测试计划(.xml),解析测试模块与依赖。
- 测试推送:将测试二进制(如
VtsHalAudioV7_0TargetTest)push 到设备/data/local/tmp。 - 接口探测:测试程序通过
hwservicemanager获取 HAL 服务句柄,验证服务注册状态。 - 契约验证:按 .hal 定义依次调用接口方法,检查返回值、回调、异常码是否符合预期。
- 结果上报:每个测试用例输出 PASS / FAIL / SKIP,TradeFed 汇总生成 XML 报告。
- 日志收集:失败用例自动抓取 logcat、dmesg、tombstone 到 host 端。
关键注意点:VTS 测试要求设备处于 无锁屏、无 SIM 卡、飞行模式 状态。若测试过程中出现 ANR 或 crash,请先检查 SELinux denials,而非直接怀疑 HAL 实现。