1. CTS 概述:Android 兼容性测试套件

1.1 什么是 CTS?

Android 兼容性测试套件(Compatibility Test Suite,CTS)是 Google 提供的一套自动化测试工具集,用于验证设备制造商(OEM)的 Android 实现是否符合 Android 兼容性定义文档(CDD) 的要求。只有通过 CTS 认证的设备,才有资格预装 Google 移动服务(GMS),并被视为“兼容 Android 设备”。

核心目标: 确保不同厂商、不同硬件平台的 Android 设备在应用接口(API)、系统行为、权限模型、多媒体处理等方面保持一致性,从而为开发者提供统一的运行环境。

1.2 CTS 的目的与价值

维度 说明
生态统一 防止碎片化,保证应用在任意兼容设备上行为一致
质量门槛 强制 OEM 修复底层 HAL、框架、驱动的关键缺陷
安全合规 验证权限模型、加密、媒体编解码等安全相关实现
GMS 授权 未通过 CTS 的设备无法获得 Google 移动服务授权

1.3 CTS 与 Camera 模块的关系

Camera 是 CTS 中测试密度最高的子系统之一,覆盖从 HAL 层 到 应用框架层 的完整链路。Camera CTS 测试项超过 2000 个,主要分布在以下模块:

  • android.hardware.camera2 — 核心 Camera2 API 行为验证
  • android.hardware.camera2.cts — 多摄像头、闪光灯、对焦、3A 等场景测试
  • android.hardware.camera2.raw — RAW 图像输出与 DNG 合规性
  • android.hardware.camera2.cts.ExtendedCameraCharacteristicsTest — 特性声明一致性
  • android.hardware.camera2.cts.VideoTest — 视频录制、帧率、编码参数
经验提示: 在 CTS 测试中,Camera 模块的失败案例约 60% 源于 HAL 层实现与 CDD 要求之间的偏差,而非应用层问题。因此,HAL 层调试是 Camera CTS 认证的关键环节。

1.4 Camera CTS 测试架构

下图展示了 Camera CTS 测试在 Android 系统软件栈中的位置与数据流关系:

Camera CTS 测试架构与数据流 CTS 测试用例 (Camera2CTS) Android Camera Framework Camera HAL 接口 (HIDL / AIDL) Camera HAL 实现 (OEM 定制) Camera 硬件 (Sensor / ISP) 测试关注点 • API 行为一致性 • 特性声明匹配 • 3A 算法正确性 • 格式/分辨率支持 • 帧率稳定性 • 多摄像头同步 • 闪光灯/对焦 • RAW/DNG 合规 • 视频编码参数 • 错误处理与恢复 • 性能与功耗 • 权限安全模型 • 多进程并发 • 跨版本兼容性 常见失败根因 • HAL 返回错误特性 • 分辨率/格式缺失 • 3A 收敛超时 • 帧率低于声明值 • 缓冲区分配失败 • 元数据不完整 • 多摄 ID 冲突 • 闪光灯时序错误 • 视频编码参数越界 • 权限检查遗漏 • 并发访问死锁 • 内存泄漏 • 跨进程通信超时 • 驱动固件兼容性

1.5 Camera CTS 测试分类

根据测试对象与验证维度,Camera CTS 测试可分为以下四大类:

测试类别 典型测试项 验证重点
功能测试 CameraCharacteristicsTest、CaptureRequestTest API 行为、特性声明、参数范围
图像质量测试 RawTest、JpegTest、YuvTest 图像格式、色彩空间、DNG 合规
视频测试 VideoTest、VideoEncodingTest 帧率、码率、编码器参数
压力与并发测试 MultiCameraTest、ConcurrentCameraTest 多摄同步、资源竞争、异常恢复

1.6 CTS 测试流程概览

一次完整的 Camera CTS 认证测试通常包含以下步骤:

  1. 环境准备 — 搭建测试服务器、连接设备、安装 CTS 工具包
  2. 模块选择 — 仅运行 Camera 相关测试模块,节省时间
  3. 测试执行 — 使用 cts-tradefed run cts --module CtsCameraTestCases 启动
  4. 结果收集 — 自动生成 XML 报告与日志
  5. 失败分析 — 解析日志、定位 HAL 层或框架层根因
  6. 修复与回归 — 修改 HAL 代码后重新执行测试
常见误区: 许多工程师在 CTS 失败后直接修改框架层代码,但 Camera CTS 的失败案例中,约 70% 的根因在 HAL 层实现。建议优先检查 HAL 的 getCameraCharacteristics() 返回值、configureStreams() 参数校验以及 processCaptureRequest() 的元数据填充。

1.7 本章小结