CTS Camera Test用例分析与HAL适配问题排查 - 第1节

1.1 CTS 定义:Android 兼容性的“法律准绳”

CTS(Compatibility Test Suite,兼容性测试套件)是 Google 为 Android 生态系统制定的强制性测试集合。任何设备制造商(OEM)若想预装 Google 移动服务(GMS,如 Google Play、Gmail、Maps),其设备必须完整通过对应 Android 版本的 CTS 认证。

从技术角度看,CTS 是一组运行在设备上的可执行测试用例,覆盖了从应用框架层到 HAL 层的数百个 API 和功能点。它验证设备对 Android 兼容性定义文档(CDD,Compatibility Definition Document)的符合程度。

核心公式: CDD(规则) + CTS(验证) = Android 兼容性

1.1.1 CTS 与 CDD 的关系

维度 CDD(兼容性定义文档) CTS(兼容性测试套件)
性质 规范性文档(文字描述) 可执行测试(代码用例)
作用 定义“必须做什么” 验证“是否做到”
覆盖范围 硬件、软件、API、安全、性能 API 行为、功能正确性、性能指标
更新频率 随 Android 大版本发布 月度/季度补丁 + 大版本全量更新
对 OEM 的影响 设计参考依据 认证通过的唯一凭证

1.2 CTS 在 Android 生态中的作用

CTS 是 Android 开放生态的质量守门人。没有 CTS,碎片化将导致应用开发者无法依赖标准 API 行为,用户也无法获得一致体验。

  • 保障应用兼容性: 确保第三方应用在所有通过 CTS 认证的设备上行为一致。例如,Camera2 API 的 createCaptureSession 必须返回相同的行为模式。
  • 防止碎片化失控: 强制 OEM 遵循 CDD 规范,避免厂商随意修改框架层行为或裁剪必要 API。
  • GMS 授权前提: 未通过 CTS 的设备无法获得 Google 移动服务授权,直接影响海外市场销售。
  • 安全基线: CTS 包含安全测试项(如 SELinux 策略、权限模型),确保设备满足 Android 安全模型的最低要求。
Camera 专项视角: Camera CTS 测试覆盖了从 android.hardware.camera2 API 到 HAL 层的完整链路。一个典型的失败场景是:HAL 返回的 CameraMetadata 中缺少 ANDROID_SENSOR_INFO_PIXEL_ARRAY_SIZE,导致上层测试用例直接崩溃。

1.3 CTS 测试套件结构概览

CTS 测试套件采用分层架构,从顶层测试框架到底层硬件抽象层,形成完整的验证链路。下图展示了 CTS 测试套件的核心组件及其关系:

CTS 测试套件结构概览 CTS 测试框架 (TradeFed) 测试用例分类 CTS 核心测试 CTS 验证测试 CTS 参考测试 CTS 安全测试 关键测试模块(以 Camera 为例) Camera2 API 测试 HAL 一致性测试 性能基准测试 多摄像头测试 底层依赖 Android 框架层 HAL 接口层 内核驱动层 硬件设备层 说明:Camera CTS 测试从 TradeFed 框架发起,逐层穿透至 HAL 和硬件 任何一层的实现偏差都可能导致测试失败

1.3.1 测试套件物理结构

CTS 套件以 ZIP 压缩包形式发布,解压后包含以下核心目录和文件:

android-cts/
├── testcases/              # 测试用例 APK 和测试计划 XML
│   ├── CtsCameraTestCases.apk
│   ├── CtsMediaTestCases.apk
│   └── ...
├── tools/                  # 测试执行工具(TradeFed)
│   ├── cts-tradefed
│   └── ...
├── repository/             # 测试结果仓库
├── plans/                  # 测试计划定义
│   ├── cts.xml             # 全量 CTS 测试计划
│   └── cts-camera.xml      # Camera 专项测试计划
├── results/                # 测试结果输出目录
└── android-cts.xml         # 套件元数据配置文件

1.3.2 测试用例执行流程

  1. 测试调度: TradeFed 读取测试计划(如 cts-camera.xml),解析需要执行的测试模块和用例。
  2. 用例分发: 将测试 APK 安装到设备,通过 adb 启动 Instrumentation 测试。
  3. 结果收集: 测试用例执行完毕后,将结果(PASS/FAIL/IGNORE)回传给 TradeFed。
  4. 报告生成: TradeFed 聚合所有结果,生成 XML 格式的测试报告,存储在 results/ 目录。
常见误区: 很多 OEM 工程师认为 CTS 测试只是“跑一遍看结果”。实际上,CTS 测试需要配合 CTS 验证器(CTS Verifier) 进行手动测试,特别是 Camera 相关的预览、拍照、录像等主观体验测试,自动化测试无法覆盖所有场景。

1.3.3 Camera CTS 测试用例分类

测试类别 测试包名 测试重点 典型失败原因
Camera2 API 功能测试 CtsCameraTestCases API 调用正确性、参数校验、状态机转换 HAL 返回错误 metadata 或未实现必要 capability
HAL 一致性测试 CtsCameraHALTestCases HAL 接口行为是否符合 CDD 要求 HAL 未正确处理 configure_streams 或 process_capture_request
性能基准测试 CtsCameraPerformanceTestCases 预览帧率、拍照延迟、AE/AF 收敛时间 ISP 处理能力不足或驱动存在瓶颈
多摄像头测试 CtsCameraMultiCameraTestCases 多摄像头同步、逻辑摄像头切换、物理摄像头映射 HAL 未正确暴露物理摄像头 ID 或同步时间戳偏差过大
CTS 验证器(手动) CTS Verifier 应用 预览画面质量、闪光灯同步、变焦平滑度 硬件设计缺陷或驱动调优不足

1.4 本章小结

CTS 是 Android 生态兼容性的基石,它通过标准化的测试用例确保设备行为的一致性。对于 Camera 系统而言,CTS 测试覆盖了从上层 API 到底层 HAL 的完整链路,任何一层的实现偏差都可能导致认证失败。理解 CTS 的定义、生态作用和套件结构,是后续深入分析 Camera 测试用例和排查 HAL 适配问题的基础。