1. 概述:什么是 GTS/为什么要测
GTS(GMS Test Suite,GMS 测试套件)是自动化测试工具,用于验证:
- GMS 应用集成是否正确
- 与 Google 签订合同条款相关的系统配置是否一致
- 典型测试项包括:GMS 集成验证、部分系统 API 校验、Widevine 集成、用户体验要求(例如 launcher 必需放置 Google Search)、分销协议要求(如 MADA/EMADA 条款)等
注意:GTS 测试在 Linux 环境执行(无 Windows 版本)。
2. 测试环境搭建(PC 端:Linux)
2.1 PC 基本要求
- 支持 64bit Linux 系统
- Android 11 及以上需要在 Ubuntu 14.04 及更高版本上测试
2.1.1 ADB 和 AAPT
开始 GTS 测试前确认:
- 已安装最新版本的
adb(Android Debug Bridge)与aapt(Android Asset Packaging Tool) - 工具路径已加入环境变量
PATH
步骤概览:
- 从 Android SDK 下载工具包
- 解压后运行 tools 目录下的 Android 工具
- 在 SDK Manager 更新:Android SDK Tools、Platform-tools、Build-tools
- 将
Tools、Platform-tools、Build-tools三个目录加入PATH - 重新加载环境变量(如
source)
另外:Android 14 及以上 GTS 需要配置 AAPT2,否则可能出现部分 APK 解析/安装失败。
- AAPT2 下载:https://developer.android.google.cn/studio/command-line/aapt2?hl=en#download_aapt2
- 配置要点(文档描述):将 AAPT2 复制到
/usr/bin,并赋予可执行权限(如sudo chmod 777 aapt2)
2.1.2 JDK 版本
- Android 11 及以上:OpenJDK 11
2.1.3 GTS 文件(测试包)
下载需匹配待测设备的内容:
- 与待测设备 Android 版本匹配的 GTS
- 与待测设备支持的 ABI(Application Binary Interface)匹配的 GTS 测试包
目录结构要点:
logs/、results/在测试执行后才会出现
2.1.4 Device detection(USB 设备识别:udev)
Ubuntu 下如无法识别通过 USB 连接的终端,需要创建 udev 规则:
sudogedit /etc/udev/rules.d/51-android.rulesSUBSYSTEM=="usb", ATTR{idVendor}=="1782",MODE="0666",GROUP="plugdev"# 参数按实际配置sudochmod777/etc/udev/rules.d/51-android.rulessudoserviceudev restart
idVendor/GROUP等参数需按你实际厂商/用户组环境调整。
2.1.5 定制化 GTS 能力测试(可选)
Google 增加了定制化 GTS 能力:可为特定合作伙伴增加额外测试集(限制在授权范围内)。
关键步骤:
- 从 Google Account Manager 或第三方实验室获取
authentication key文件 - 将 key 文件放到 PC 可访问目录
- 将 key 文件绝对路径配置到环境变量
APE_API_KEY
示例(文档形式):
exportAPE_API_KEY='path_to_key.json'进入 GTS 测试包执行一次探测测试:
run gts-mGtsPlacementTestCases--conditional-business-logic-tcom.google.android.placement.gts.DefaultIntentTest#testDefaultIntentHandlers若通过该测试项,表示定制环境配置成功;否则需要检查 key、上传状态等。
3. 待测设备配置(Device 端)
3.1 User builds
GTS 需要在User版本构建上进行测试(不要用 engineering/userdebug)。
3.2 Attestation Keybox 部署(Android 16 适配要点)
文档要求:GTS 测试前需要对测试设备进行Attestation Keybox 部署,否则部分测试项会失败。
但同时给出关键更新:Android 16 开始不需要部署 Attestation Keybox。
结论:面向 Android 16 的目标机型,可跳过 Attestation Keybox 部署步骤;但如果你仍在做低版本回归/兼容测试,仍需按文档要求部署。
3.3 Widevine Keybox 部署
GTS 测试前需要进行Widevine Keybox部署,否则部分测试项会失败。
若支持 Provisioning 4.0,则无需单独部署 Widevine Keybox。
3.4 Device ID 部署(Android 13+)
对于 Android 13 及以上版本,GTS 测试前需要对测试设备进行 Device ID 部署,否则部分测试项会失败。
3.5 CSR 部署(Android 13+)
对于 Android 13 及以上版本,需要提取测试设备 CSR 信息并上传到 Google 服务器,否则部分测试项会失败。
3.6 屏幕
若待测设备无嵌入式屏幕,需要外接一个屏幕。
3.7 SD 卡
若设备存在存储卡槽:
- 插入一张空SD 卡
- SD 卡建议支持 UHS,或写入速度至少 Class 10(10MB/s),用于确保能通过 GTS 测试
3.8 SIM 卡
若设备存在 SIM 卡槽:
- 每个卡槽插入激活的 SIM 卡
- 如设备支持 SMS,需要在
Setting中显示每张 SIM 卡对应的电话号码
Android 12 及以上:
- 所有 SIM 卡必须支持存储 ADN(Abbreviated Dialling Numbers)
- 带
telecom dedicated file (DTelcom)的 GSM/USIM 卡满足该要求
文档提醒:部分模块可能因 Google 测试要求变化,使用普通 SIM 卡无法通过;此时需要更换可国际漫游的流量卡再次测试。
当且仅当待测设备不支持 Modem 功能时,该项配置可忽略。
3.9 Developer UICC(Carrier API 测试)
为运行 GTS 中的 carrier API 测试用例,待测设备需要一张支持carrier privilege规则的 SIM 卡。
4. 待测设备预置条件(运行前准备)
文档列出的关键预置条件如下:
- 烧写待测版本或恢复出厂设置
- 恢复出厂:
Settings > System > Reset options > Erase all data (factory reset)
- 恢复出厂:
- 连接 Wi‑Fi 并确保能访问 Internet
- 入口:
Settings > Network & internet > internet
- 入口:
- 系统语言设置为英语(United States)
Settings > System > Language & region
- 如支持 GPS 或网络定位能力,打开 Location
Settings > Location > On
- 取消屏幕锁/密码
Settings > Security & privacy > Device unlock > Screen lock > None
- 开启 USB debugging
Settings > Developer options > USB debugging- 若 Developer options 被隐藏:
Settings > About phone,点击Build number7 次
- 开启 USB 调试后,需进行额外设置
Stay Awake:OnVerify apps over USB:Off(文档提醒 Android 4.2+ 需要此项)
- 取消浏览器 startup/setup:Google 浏览器打开后选择
No thanks - 设置系统时间为 12 小时制
Settings > System > Date & time > Use 24-hour format > Off
- 使用 USB 线连接 PC 与设备:当弹出“是否接受一个 RSA Key”对话框,选择允许 USB debugging
5. 网络环境要求
GTS 测试需要一个“可访问 Google 服务器”的代理 Wi‑Fi,并保证:
- 能访问 Google 服务器
- 没有任何限制(文档表述为没有限制)
6. 测试方法
6.1 单机测试(Single Device)
单机流程可参考下图(PC/Linux 端准备 → 解压测试包 → tradefed 执行 → 输出 results/logs 用于定位)。
命令步骤:
- PC 端命令行窗口
- 查看设备:
adb devices - 进入解压后的 GTS 测试包并执行:
cdandroid-gts/tools ./gts-tradefed run gts# 整体测试run gts-m<ModuleName># 测试某个 module 的所有 Caserun gts-m<ModuleName>-t<TestCaseName># 测试某个 module 中指定 Case6.2 分布式测试(Distributed / Sharding)
分布式测试把测试任务分发到多个待测设备并行执行,从而缩短整体测试时间。
示例(3 台设备):
cdandroid-gts/tools ./gts-tradefed run gts --shard-count3
--shard-count对应待测设备数。
6.3 Token sharding 指令测试(Android 10+)
Token sharding 目标:
- 自动把“需要特殊设置的测试”匹配到“支持的设备”,避免为所有设备配备 SIM
- 支持 Android 10 及以上版本
- 支持第一次测试与 retry
Token sharding 原理图:
执行前文档要求先启用命令能力:
run gts --enable-token-sharding<...other flags...>若待测设备不支持 Modem 功能,则无需使用 Token sharding 指令测试。
7. 测试问题分析(以testValidSysConfigPresent为例)
当某些测试项失败时,文档建议按“results → host log → device logcat → 进一步分析/修复 → 重测”的顺序定位。
7.1 分析results(test_result.html)
结果文件示例:
results/<date_time>/test_result.html
在页面中重点关注:
Summary:查看Suite/Build(判断 GTS 版本号是否正确)与Tests Failed(失败项数量)Details:查看失败原因(常见如缺少 YouTube Music 等应用)
7.2 分析 host log
若结果文件没有足够信息,需要进一步查看 host 日志:
logs/<date_time>/inv_<...>/host_log_<...>.txt
host log 往往包含:执行了哪些 apk、失败原因、以及测试项执行流程。
7.3 分析 device log(按 PID + 关键字)
若 host log 仍无法准确定位:
- 查看 device logcat 文件:
logs/<date_time>/inv_<...>/device_logcat_test_<serial>_<pid>.txt
做法:
- 用 PID(测试 apk 进程编号)与
TestRunner关键字搜索 - 观察失败发生前后的输出,确认是缺配置、缺应用、还是业务逻辑错误
7.4 反汇编/进一步分析(非开源场景)
GTS 非开源,文档建议可对相关 apk/jar 做反汇编:
- 使用
jadx反汇编 apk - 使用
jd反汇编 jar
并结合失败用例(如com.google.android.os.gts.SysConfigTest.assertSystemConfigEquals/testValidSysConfigPresent)推断具体比对逻辑。
7.5 修改配置文件并重测
修复路径:
- 打开
partner_gms/etc/sysconfig/google.xml - 按失败信息补齐缺失应用(示例:添加 YouTube Music)
- 重测直至通过
7.6 查找 Google 规范(Partner 站点)
你可以在 Google partner 网站查阅对应规范/要求,理解为什么某类测试对缺失应用敏感(例如特定配置要求包含 YouTube Music)。
8. 其他常见失败补充
8.1GTS Business Logic失败(业务逻辑/远程配置类)
推荐定位顺序:
- 先检查
APE_API_KEY是否设置正确 - 确认项目是否存在
APAportal - 若 portal 正确仍失败,错误通常会出现在 error log 中,常见包括:
Unable to execute because authorization failed, please ensure the service account key is properly installed.- 通常是
APE_API_KEY未正确配置,或 key 文件本身问题
- 通常是
Unable to execute because service account is not authorized to access information for this device...- 检查 APA portal 中的权限与设备属性配置
Cannot connect to business logic service for suite GTS...- 通常为 Google 服务器连接问题:可稍后重试
- 若持续,可联系 Google 支持或第三方实验室认证中心
文档还提到:如反复失败,可考虑使用--ignore-business-logic-failure使测试继续执行,但依赖远程配置的测试仍可能失败。
8.2waiver requests(豁免请求)
若 GTS 测试不通过:
- 可尝试使用 preview 包测试
- preview 测试通过:无需提交 waiver requests
- preview 测试不通过:需要咨询 FAE、第三方实验室认证中心或 Google 是否要提交 waiver requests
waiver 指引参考(文档链接):
- Reducing waiver requests / verify-dev-builds:
https://docs.partner.android.com/gms/testing/cts/test-improvement-request-guide?hl=en#verify-dev-builds - create-gts:
https://docs.partner.android.com/gms/testing/cts/test-improvement-request-guide?hl=en#create-gts