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 上运行而非设备
关键提示: 在 AOSP 的 repo init 阶段,CTS 模块默认会被包含在 manifest 中。如果为了节省空间而使用了自定义 manifest,请确保 cts 项目未被排除。

3.2 下载包含 CTS 的 AOSP 源码

下载包含 CTS 的 AOSP 源码与下载标准 AOSP 流程一致,但需要确保分支选择正确。以下是标准操作步骤:

  1. 安装 Repo 工具(如未安装):
    mkdir ~/bin
    PATH=~/bin:$PATH
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo
  2. 创建工作目录并初始化:
    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)。

  3. 同步源码:
    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 版本和包含的测试模块数量。

编译加速技巧: 如果只需要 Camera CTS 相关测试,可以使用 make cts-camera -j16 仅编译 Camera 模块,大幅缩短编译时间。但首次编译仍建议使用 make cts 确保所有依赖完整。

3.4 CTS 编译流程架构

下图展示了从 AOSP 源码到最终 android-cts.zip 的完整编译流程:

CTS 编译流程架构 AOSP 源码 (cts/) source build/envsetup.sh make cts -j16 out/host/linux-x86/cts/ android-cts.zip 关键说明 • 分支需与设备版本匹配 • userdebug 版本包含 root 权限 • 编译时间约 30min ~ 2h

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 包描述文件
调试建议: 在 HAL 层调试阶段,建议只编译 Camera 相关模块:make cts-camera -j16。生成的 android-cts.zip 体积更小,解压和部署速度更快,适合频繁迭代调试。