1. VTS 测试概述
1.1 VTS 定义
VTS(Vendor Test Suite,供应商测试套件) 是 Google 为 Android 生态系统提供的一套自动化兼容性测试框架。它运行在 Android 10(API 29) 及更高版本上,用于验证设备供应商(SoC 厂商、OEM 厂商)实现的 HAL(硬件抽象层)、内核驱动以及系统服务是否符合 Android 兼容性定义文档(CDD)和 Treble 架构要求。
核心定位: VTS 是 Android Treble 项目的关键组成部分,其测试对象是 Vendor 分区 与 System 分区 之间的接口(HIDL / AIDL HAL),确保供应商实现与 Android 框架的向前兼容性。
1.2 VTS 在 Android 生态中的作用
VTS 在 Android 生态系统中扮演着 质量守门人 的角色,其作用贯穿设备开发、认证和系统升级的全生命周期:
| 作用维度 | 具体说明 | 影响对象 |
|---|---|---|
| 接口兼容性验证 | 确保 Vendor 实现的 HAL 接口(如 Camera、GPS、Audio、Sensors)严格遵循 Google 定义的 HIDL/AIDL 契约,不修改、不删除、不重载标准方法。 | SoC 厂商、OEM 厂商 |
| Treble 架构合规性 | 验证设备是否满足 Treble 要求:Vendor 分区与 System 分区解耦、VNDK(Vendor Native Development Kit)使用正确、HAL 服务独立运行。 | 设备制造商 |
| 系统升级保障 | 通过 VTS 的设备在 Android 大版本升级(如 Android 13 → Android 14)时,Vendor 实现无需修改即可在新 System 镜像上正常工作,降低碎片化风险。 | 最终用户、Google |
| CTS 前置条件 | 设备必须通过 VTS 测试后,才能进行 CTS(兼容性测试套件)认证。VTS 失败将直接导致设备无法获得 Google 移动服务(GMS)授权。 | OEM 厂商 |
| 安全与稳定性基线 | VTS 包含对 SELinux 策略、内核配置、权限模型、内存安全(如 fuzzing 测试)的检查,确保 Vendor 实现不引入安全漏洞或系统不稳定因素。 | 安全团队、系统稳定性团队 |
实践提示: 在 HAL 层开发中,VTS 测试失败通常意味着 HAL 接口实现与 Google 的 HAL 定义文件(.hal / .aidl) 存在偏差。日志分析的第一步就是定位失败的测试用例对应的 HAL 服务和方法签名。
1.3 VTS 测试套件结构
VTS 测试套件采用 分层 + 模块化 架构,由测试框架、测试用例、测试配置和测试工具四部分组成。其整体结构如下图所示:
1.4 测试用例组织方式
VTS 测试用例按照 HAL 服务 → 接口版本 → 测试方法 的层次进行组织。一个典型的 VTS 测试用例路径如下:
# 测试用例路径示例
VtsHalCameraProviderV2_4TargetTest
└── android.hardware.camera.provider@2.4
└── ICameraProviderTest
├── testOpenCamera
├── testGetCameraIdList
└── testSetTorchMode
# 对应的测试配置文件
test/vts-testcase/hal/camera/VtsHalCameraProviderV2_4TargetTest/AndroidTest.xml
测试用例的命名规则遵循 VtsHal + HAL 名称 + 接口版本 + TargetTest 的格式,便于快速定位特定 HAL 的测试集。
1.5 测试执行流程
VTS 测试的执行流程分为 准备 → 部署 → 执行 → 报告 四个阶段,具体步骤如下:
- 准备阶段: 编译 VTS 测试套件(
make vts),生成测试二进制文件和测试配置文件。 - 部署阶段: 通过
vts-tradefed将测试用例推送到设备,并启动 HAL 服务测试环境。 - 执行阶段: 测试框架调用 HAL 接口方法,验证返回值、回调、事件是否符合预期。
- 报告阶段: 生成 XML 格式的测试报告,包含每个测试用例的通过/失败状态、日志和错误信息。
常见误区: 很多开发者误以为 VTS 测试失败一定是 HAL 代码逻辑错误。实际上,测试环境配置错误(如 SELinux 权限不足、HAL 服务未注册、依赖库版本不匹配)也是导致 VTS 失败的常见原因。日志分析时需优先排除环境问题。
1.6 VTS 与 CTS 的关系
在 Android 兼容性测试体系中,VTS 和 CTS 各有侧重,相互补充:
| 对比维度 | VTS(供应商测试套件) | CTS(兼容性测试套件) |
|---|---|---|
| 测试对象 | Vendor 分区实现(HAL、内核、VNDK) | System 分区实现(Framework、API、应用层) |
| 测试接口 | HIDL / AIDL 接口、内核接口 | Android SDK / NDK API、系统行为 |
| 关注点 | 接口兼容性、Treble 合规性、向前兼容 | 应用兼容性、API 正确性、用户体验一致性 |
| 执行顺序 | 先于 CTS 执行 | 在 VTS 通过后执行 |
| 失败影响 | 直接阻断 CTS 认证 | 阻断 GMS 授权 |