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 的覆盖范围:

VTS 在 Android Treble 架构中的测试边界 Android Treble 架构与 VTS 测试边界 应用层(Apps) 应用框架层(Java API Framework) 系统服务层(System Services) HAL 接口定义(.hal / AIDL)—— VTS 测试边界 Vendor 实现层(HAL / 内核驱动) Linux 内核层(Kernel + 驱动) VTS CTS GTS 说明:VTS 聚焦于 HAL 接口定义层与 vendor 实现之间的契约验证,不涉及上层应用逻辑

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 测试执行遵循以下步骤,理解该流程有助于定位失败原因:

  1. 环境准备:设备刷入 userdebug 或 eng 版本,开启 adb root,关闭 verity。
  2. 测试调度:TradeFed 加载 VTS 测试计划(.xml),解析测试模块与依赖。
  3. 测试推送:将测试二进制(如 VtsHalAudioV7_0TargetTest)push 到设备 /data/local/tmp。
  4. 接口探测:测试程序通过 hwservicemanager 获取 HAL 服务句柄,验证服务注册状态。
  5. 契约验证:按 .hal 定义依次调用接口方法,检查返回值、回调、异常码是否符合预期。
  6. 结果上报:每个测试用例输出 PASS / FAIL / SKIP,TradeFed 汇总生成 XML 报告。
  7. 日志收集:失败用例自动抓取 logcat、dmesg、tombstone 到 host 端。
关键注意点:VTS 测试要求设备处于 无锁屏、无 SIM 卡、飞行模式 状态。若测试过程中出现 ANR 或 crash,请先检查 SELinux denials,而非直接怀疑 HAL 实现。