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 测试套件采用 分层 + 模块化 架构,由测试框架、测试用例、测试配置和测试工具四部分组成。其整体结构如下图所示:

VTS 测试套件结构图 VTS 测试框架(TradeFed) HAL 接口测试 Camera / GPS / Audio 系统服务测试 Power / Storage / USB 内核与驱动测试 SELinux / Kconfig / Fuzzing 性能与压力测试 Memory / Latency / Stress 测试配置层(Test Config / Test Mapping) AndroidTest.xml / VtsHalTargetTest / 测试参数与过滤器 测试工具 VtsHalHidlTargetTestEnv / VtsRunner / VtsReport 测试库与依赖 libvtshal / libhwbinder / libfmq / libbase 测试输出(Test Report / Logcat / Bugreport) VTS 测试报告 XML / 日志文件 / 崩溃转储

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 测试的执行流程分为 准备 → 部署 → 执行 → 报告 四个阶段,具体步骤如下:

  1. 准备阶段: 编译 VTS 测试套件(make vts),生成测试二进制文件和测试配置文件。
  2. 部署阶段: 通过 vts-tradefed 将测试用例推送到设备,并启动 HAL 服务测试环境。
  3. 执行阶段: 测试框架调用 HAL 接口方法,验证返回值、回调、事件是否符合预期。
  4. 报告阶段: 生成 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 授权