3. CTS 下载与编译:从 AOSP 源码到测试包
CTS(Compatibility Test Suite)测试包的获取与编译是搭建 CTS 测试环境的核心环节。本章将详细讲解如何从 AOSP 源码中下载 CTS 组件,并通过 make cts 命令完成编译,生成可用于设备测试的 android-cts.zip 包。
3.1 CTS 在 AOSP 源码中的位置
CTS 并非独立于 AOSP 的单独仓库,而是作为 AOSP 项目的一个 组件模块 存在。其源码与测试用例分布在以下关键路径中:
| 路径 | 内容说明 |
|---|---|
cts/ |
CTS 主目录,包含测试计划、测试用例、工具和配置文件 |
cts/tests/ |
所有 CTS 测试用例的源码,按模块(如 camera、wifi、telephony)组织 |
cts/tools/ |
CTS 运行所需的辅助工具,如 cts-tradefed、测试结果解析器等 |
cts/apps/ |
CTS 测试中使用的 APK 应用源码 |
cts/hostsidetests/ |
Host 端测试用例,需在 PC 上运行而非设备 |
repo init 阶段,CTS 模块默认会被包含在 manifest 中。如果为了节省空间而使用了自定义 manifest,请确保 cts 项目未被排除。
3.2 下载包含 CTS 的 AOSP 源码
下载包含 CTS 的 AOSP 源码与下载标准 AOSP 流程一致,但需要确保分支选择正确。以下是标准操作步骤:
- 安装 Repo 工具(如未安装):
mkdir ~/bin PATH=~/bin:$PATH curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo - 创建工作目录并初始化:
mkdir aosp-cts cd aosp-cts repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r30请根据实际测试目标选择对应的分支标签(如
android-13.0.0_r75、android-12.0.0_r46)。 - 同步源码:
repo sync -c -j8-c参数表示只下载当前分支代码,-j8表示使用 8 个并行任务加速下载。首次同步可能需要数小时,取决于网络环境。
repo sync -j32 等过高的并行数,容易导致服务器拒绝连接或本地 I/O 瓶颈。建议根据 CPU 核心数和网络带宽选择 -j4 到 -j16 之间的值。
3.3 编译 CTS 测试包
编译 CTS 需要先完成 AOSP 的整体编译环境初始化,然后使用 make cts 目标进行编译。具体流程如下:
3.3.1 初始化编译环境
source build/envsetup.sh
lunch aosp_arm64-userdebug
选择 aosp_arm64-userdebug 是通用做法,因为 CTS 编译不依赖具体设备硬件,只需生成通用的测试 APK 和工具。如果目标设备是特定平台(如 Pixel),也可以选择对应的 lunch 组合。
3.3.2 执行编译命令
make cts -j16
该命令会编译 CTS 主模块及其所有依赖项,包括:
- 所有 CTS 测试用例 APK
- cts-tradefed 测试框架
- 测试计划 XML 文件
- 配置文件与资源文件
编译完成后,输出产物位于 out/host/linux-x86/cts/ 目录下,其中最重要的文件是 android-cts.zip。
3.3.3 验证编译产物
ls -lh out/host/linux-x86/cts/android-cts.zip
一个完整的 CTS 包大小通常在 1.5GB ~ 3GB 之间,具体取决于 Android 版本和包含的测试模块数量。
make cts-camera -j16 仅编译 Camera 模块,大幅缩短编译时间。但首次编译仍建议使用 make cts 确保所有依赖完整。
3.4 CTS 编译流程架构
下图展示了从 AOSP 源码到最终 android-cts.zip 的完整编译流程:
3.5 常见编译问题与解决方案
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
cts module not found |
lunch 目标未正确选择,或 manifest 未包含 cts | 执行 lunch aosp_arm64-userdebug 后重试 |
Out of memory error |
Java 堆内存不足 | 设置 export JACK_SERVER_VM_ARGUMENTS="-Xmx4g" |
Missing dependencies: xxx |
未执行 repo sync 或同步不完整 |
执行 repo sync -c --force-sync 重新同步 |
Build failed: no rule to make target |
编译环境缺少必要库 | 安装缺失包:sudo apt-get install libxml2-utils xsltproc |
3.6 编译产物结构解析
编译完成后,android-cts.zip 内部包含以下关键目录结构:
android-cts/
├── testcases/ # 所有测试用例 APK 和测试数据
│ ├── CtsCameraTestCases.apk
│ ├── CtsMediaTestCases.apk
│ └── ...
├── tools/ # 测试工具和框架
│ └── cts-tradefed # CTS 运行主程序
├── plans/ # 测试计划 XML 文件
│ ├── cts.xml # 完整 CTS 测试计划
│ └── cts-camera.xml # Camera 专项测试计划
├── repository/ # 测试结果仓库配置
└── android-cts.xml # CTS 包描述文件
make cts-camera -j16。生成的 android-cts.zip 体积更小,解压和部署速度更快,适合频繁迭代调试。