CTS、CTS Verify、GTS测试以及GMS认证

GMS认证与CTS、GTS测试详解
本文深入解析GMS认证流程及其对手机出口的重要性,阐述CTS、CTSVerify和GTS测试在确保Android系统兼容性和稳定性中的作用,涵盖测试原理、环境准备及执行流程。

CTS、CTS Verify、GTS测试以及GMS认证

目录

 

 

一、一些概念

① CTS测试

        以自动化测试为基础,测试Android系统的兼容性;

② CTS Verify

        一个手工测试的apk,完成自动化测试无法完成的操作(锁屏、蓝牙、摄像头等);

CTS Verify下载图标

③ GTS

        手机出口到国外,并且通过运营商出售,就i必须通过GTS测试;

④ GMS认证周期

        手机通过CTS测试、CTS Verify以及GTS测试之后,就可以拿到GMS认证。但是GMS认证周期较长,一般需要3个月至半年。

⑤ MADA协议

        全称Mobile Application Distribution Agreement(移动应用软件分发协议)。是谷歌和Android厂商之间签署的一个协议,根据该协议,手机厂商在推出采用Android设备前,必须预装所有Google应用,并且,要把Google Search、Google Play放在手机首屏,并以Google Search作为默认的搜索引擎。

二、GMS认证

2.1 认证背景

        手机没有GMS认证,那么对于手机出口商而言,就没有了生产的产品走不了运营商通道,所以在欧美等由运营商主导的手机市场,GMS认证是十分必要的。但是没有GMS认证,Google也不会做限制,只是进不了运营商市场,第三世界市场,出于成本考虑(GMS认证需要收费),也就没装GMS认证。

2.2 GMS认证目的

  1. 提高产品android系统的兼容性和稳定性
  2. 授权Google的手机APP和服务
  3. 授权使用Android LOGO
  4. 产品可以进入欧美市场

2.3 GMS认证要求

  1. 必须申请与Google签署MADA协议(网站操作)
  2. 产品必须使用7.0以上的安卓版本
  3. 产品必须依次通过CTS测试、CTS Verify测试以及GTS测试
  4. 产品还可以通过CE、FCC、BT以及WIFI等硬件认证(这一部分不是GMS认证的硬性指标)

2.4 GMS认证流程

  1. 申请谷歌MADA协议
  2. 产品做硬件测试
  3. 提交测试报告给谷歌审核
  4. 获得谷歌认证授权

2.5 MADA协议申请流程

开始:https://www.android.com/certified/partners/填写公司基本信息向谷歌发起MADA请求谷歌评估审核结束yesno

三、CTS测试

3.1 CTS测试介绍

        CTS测试全称为系列兼容测试(Compatibility Test suite),CTS是为了测试手机是否符合google定义的兼容性规范(Compatibility Definition)。从而基于Android的应用程序能在基于同一个api版本的设备上面运行。通过CTS测试的设备可以获得Android的商标,并且享受Android Market的权限。 
        CTS测试是一个基于uiautomator安卓原生自动化框架运行的自动化测试。通过CTS测试,保证系统的安全性和稳定性。

3.2 CTS测试的目的

        由于Google系统的开源性,很多手机厂商基于安卓系统做出了深度优化,从而造成了安卓移动终端的碎片化,导致android终端的兼容性差的问题,严重影响用户体验。手机通过CTS测试,是市场得到了一个通过的规范: 
1. 让App提供更好的用户体验,用户可以选择更多的适合自己设备的app 
2. 让开发者设计更高质量的app 
3. 通过CTS的设备可以运行Android market 
4. CTS是免费的,很简单

3.3 CTS测试运行原理

        在pc端安装CTS测试套件,安装完成后,就可以通过连接到pc端的数据线将测试用户发送至手机上,完成测试用例的执行,并且把执行结果返回给PC端。CTS测试套件下载连接如下:https://source.android.com/compatibility/cts/downloads

CTS测试原理

        需要下载文件有:对应手机系统、架构的的测试套件以及CTS VerifyAndroid Compatibility Defination Document(CDD)Compatibility Test Suite(CTS) User ManualCTS Media1.1(音视频资料)

下载文件展示

3.4 CTS测试套件目录文档结构

<span style="color:#000000"><code class="language-python">CTS目录结构
    -- docs
        -- logs 运行cs产生的log文件
        -- plans 运行计划
        -- results 测试结果
        -- testcases 测试用例配置
    -- respository
    -- resource 资源文件
    -- tools 运行工具</code></span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.5 CTS测试环境准备

3.5.1 测试环境

① windows

windows环境,需要自己重写脚本 
1. 电脑端配置JDK/SDK的环境 
2. 将解压后的测试套件(文件名android-cts)拷贝至adt目录下的sdk目录

② Linux(推荐64位UBUNTU 10.04)

一般来说,linux上运行较为稳定,所以手机厂商都是在linux端跑cts测试 
1. 电脑端配置JDK/SDK的环境 
2. 将测试套件解压至pc端/data目录下

3.5.2 测试准备工作

  1. 下载需要进行测试的软件版本(ROM)
  2. 插入可用的SIM卡(双开手机,需确保卡1有sim卡)
  3. 写入合法的IMEI号(手机的身份证,每一个手机都会有唯一的一个IMEI号)
  4. 连接一个可翻墙的WIFI网络(可以使用香港专线,网络比较稳定)

3.5.3 手机端配置

  1. 手机恢复出厂设置
  2. 手机语言设置为英语
  3. 手机需常亮并取消锁屏
  4. 开启GPS
  5. 开启USB调试后勾选stay awake和allow mock location
  6. 安装CtsDeviceAdmin.apk(位于android-cts/repository/testcases),进入setting->security->device administrators的前两项
  7. 确保手机SD卡有>1G的存储空间
  8. 确保手机没有谷歌账号或其他账号存在
  9. 确保手机时间和日期设置正确(连接数据后,会自动更新时间,时区选择默认时区) 
    …(其余在CDD文档中有定义)

3.5 CTS测试流程

  1. 手机和PC连接,打开USB调试模式,用adb devices检查是否连接好手机
  2. 在/data进入android-cts/tools/目录,执行cts-tradefed脚本进入测试环境
  3. 在测试环境中输入以下命令进行整体测试
<span style="color:#000000"><code class="language-bash">run cts --plan CTS
或
run cts -c android.app.cts.SystemFeaturesTest</code></span>
  • 1
  • 2
  • 3

注意: CTS测试会持续10+个小时

补充: CTS测试环境基本命令介绍

分类命令说明
Hosthelp基本命令帮助说明
help all基本命令帮助说明
exit退出控制台
Runrun cts –plan test_plan_name运行指定计划
run cts –package/-p运行指定包
run cts –class/-c [–method/-m]运行指定方法
run cts –continue-session session_ID继续运行指定会话session_id
run cts [options] –serial/-s device_ID运行指定设备
run cts [options] –shards number_of_shards运行多个设备
run cts –help/–help-all运行帮助
Listl/list d/devices列出连接的设备
l/list packages列出所有测试包
l/list p/plans列出所有测试计划
l/list r/results列出已经保存的测试结果

3.6 查看测试结果

3.6.1 测试结果存放路径

<span style="color:#000000"><code class="language-bash">android-cts/repository/results/testResult.xml</code></span>
  • 1

3.6.2 测试日志存放路径

<span style="color:#000000"><code class="language-bash">android-cts/repository/logs/</code></span>
  • 1

日志文件展示

四、GTS测试

4.1 GTS测试介绍

        谷歌移动服务测试套件(Google Mobile Services Test Suite),谷歌移动服务提供了Search、 Search by Voice、Gmail、Contact Sync、 Calendar Sync、Talk、 Maps、 Steet View、 YouTube、 Android Market (Play store)等服务,当用户使用谷歌时,谷歌可以把各种广告嵌入到谷歌的服务中。

4.2 GTS授权级别

        根据GMS,谷歌对android手机给与不同程度的授权,把搭载android系统的手机厂商分为3个级别: 
1. 免费使用Android系统,但不内嵌GMS 
2. 内嵌部分GMS,但手机不能打上谷歌的商标 
3. 内嵌所有GMS服务,也可以使用谷歌商标。如果在android手机中内置有谷歌GMS服务的话,是等同被谷歌官方认证的产品

4.3 GTS测试流程

        GTS的环境安装、执行、报告分析这一系列操作和CTS类似,只是GTS必须连接VPN。

4.3.1 手机环境准备

  1. 刷好GMS版本的ROM包
  2. 恢复手机出厂设置
  3. 设置手机、连接外网
  4. 插入SIM卡,打开移动数据
  5. 打开蓝牙
  6. 显示中睡眠时间显示最大
  7. 竖屏
  8. 语言选择英语
  9. 键盘选择谷歌键盘
  10. 打开定位、高精度
  11. 安全中锁屏选择None
  12. 时间将自动获取时间和日期关闭,选择太平洋时区、24小时制
  13. 在开发者模式中打开stay awake和USB debugging

4.3.2 执行GTS测试

  1. 开始全部GTS测试
<span style="color:#000000"><code class="language-bash">run gts --plan GTS</code></span>
  • 1
  1. 单跑某一模块的GTS测试
<span style="color:#000000"><code class="language-bash">run gts -plan <span style="color:#009900">'Module Name'</span> -t <span style="color:#009900">'class name'</span></code></span>
  • 1
  1. 接着某一次中断的gts测试跑
<span style="color:#000000"><code class="language-bash">run gts --retry session_id
其中session_id可由lr查看</code></span>
  • 1
  • 2

4.4 GTS测试结果展示

GTS测试结果展示

五、获取GMS认证

        通过GMS认证后,就可以申请到一个GMS的APK的包,可以将这些谷歌应用集成到手机系统里面。通过GMS认证的手机,可以在Googie play中看到如下内容:

GMS认证结果展示

<think>我们正在讨论的是谷歌GMS认证中的CTS测试。根据用户提供的引用内容,CTS(Compatibility Test Suite)是兼容性测试套件,用于确保设备符合Android兼容性要求。用户希望了解在CTS认证过程中可能遇到的问题及其详解。 结合引用内容,CTS测试主要验证设备是否符合Android兼容性定义文档(CDD)的要求,包括API兼容性、硬件功能验证和安全策略等。以下将详细CTS测试中可能遇到的问题: 1. **硬件相关测试失败**:由于CTS测试会验证设备的硬件功能(如GPS、蓝牙、摄像头等),如果硬件驱动或固件存在问题,可能导致相关测试用例失败。 2. **API兼容性问题**:设备实现的Android API行为与CDD要求不一致,例如某个API的返回值不符合预期,或者缺少必需的API。 3. **安全策略不达标**:包括SELinux策略配置错误、Verified Boot状态不符合要求、加密支持不完善等。 4. **性能问题**:某些测试用例对性能有要求(如图形渲染性能),设备性能不足可能导致超时或失败。 5. **环境配置问题**:测试环境配置不当,如未正确安装ADB驱动、USB调试未开启、设备未正确连接等。 下面我们将详细展开这些问题,并提供解决方案建议。 ### 一、CTS测试流程概述 根据引用[1][2],CTS测试的主要步骤包括: 1. **准备测试环境**:安装Java环境、ADB工具,下载CTS测试包。 2. **配置设备**:将设备设置为开发者模式,开启USB调试,并确保设备处于可用状态。 3. **运行测试**:通过命令行执行测试计划,通常针对特定模块或整个测试套件。 4. **生成报告**:测试完成后收集测试结果,提交给谷歌。 ### 二、CTS测试常见问题及解决方案 #### 1. 硬件功能测试失败 - **问题表现**:测试用例如`CtsHardwareTestCases`、`CtsSensorTestCases`等失败。 - **原因析**: - 硬件驱动未正确实现HAL(硬件抽象层)接口。 - 传感器精度不足或返回数据不符合Android规范。 - 硬件本身存在缺陷(如GPS定速度慢、蓝牙连接不稳定)。 - **解决方案**: - 检查硬件驱动代码,确保符合Android CDD要求。 - 使用`dumpsys`命令(如`dumpsys sensorservice`)调试硬件服务。 - 更新硬件固件或更换硬件模块。 #### 2. API兼容性问题 - **问题表现**:测试用例如`CtsAppTestCases`、`CtsContentTestCases`等失败。 - **原因析**: - 设备制造商修改了AOSP代码,导致API行为发生变化。 - 系统应用(如设置、联系人)未通过兼容性测试。 - 缺少必需的API(例如Android 13新增的API未实现)。 - **解决方案**: - 对比AOSP源码,还原被修改的API实现。 - 确保所有系统应用都使用公开API,且不隐藏@SystemApi。 - 检查CDD文档,确认设备必须支持的API列表。 #### 3. 安全策略不达标 - **问题表现**:测试用例如`CtsSecurityTestCases`、`CtsSelinuxTargetTest`等失败。 - **原因析**: - SELinux策略过于宽松或过于严格,导致权限问题。 - Verified Boot(AVB)未启用或配置错误。 - 文件系统未加密或加密方式不符合要求。 - **解决方案**: - 使用`audit2allow`工具析SELinux拒绝日志(`dmesg | grep avc`)。 - 配置AVB(Android Verified Boot)并确保启动链完整。 - 启用文件系统加密(FBE或FDE)并符合CDD要求。 #### 4. 性能问题导致超时 - **问题表现**:测试用例因超时失败,如图形测试`CtsGraphicsTestCases`。 - **原因析**: - 设备性能不足(如低端处理器运行高负载测试)。 - 系统优化不足,存在内存泄漏或CPU占用过高。 - 测试环境干扰(如USB连接不稳定)。 - **解决方案**: - 优化系统性能,关闭不必要的后台进程。 - 升级硬件(如增加内存、更换GPU)。 - 确保测试环境稳定,使用高质量USB线缆。 #### 5. 环境配置问题 - **问题表现**:无法执行测试,设备未识别或命令执行失败。 - **原因析**: - ADB驱动未安装或版本不匹配。 - 设备未开启USB调试模式。 - 测试包版本与设备Android版本不匹配。 - **解决方案**: - 更新ADB工具至最新版本(Android SDK Platform-Tools)。 - 在设备上启用开发者选项并开启USB调试。 - 下载与设备Android版本对应的CTS测试包。 ### 三、CTS测试问题排查工具 1. **CTS测试控制台**:通过命令行运行测试并查看实时日志。 ```bash ./android-cts/tools/cts-tradefed run cts --plan CTS # 执行整个CTS测试计划 ``` 2. **ADB日志**:使用`adb logcat`收集系统日志,析崩溃原因。 3. **测试报告析**:测试生成的`testResult.xml`文件包含详细失败信息。 ### 四、预防性措施 | 问题类型 | 预防措施 | |------------------|--------------------------------------------------------------------------| | 硬件兼容性 | 硬件选型阶段参考CDD要求,提前进行预测试 | | API兼容性 | 严格遵循AOSP实现,避免修改核心API | | 安全策略 | 在系统设计阶段集成SELinux策略和AVB | | 性能优化 | 使用性能析工具(Perfetto)持续优化系统 | | 环境配置 | 建立标准化的测试环境(专用电脑、固定USB端口) | > **关键提示**:CTS测试失败中约60%源于软件定制问题,30%源于硬件缺陷,10%源于环境配置[^2]。建议在设备开发早期引入CTS测试,避免后期大规模修改。 --- §§相关问题§§ 1. 如何获取最新的CTS测试包并配置测试环境? 2. 在CTS测试中,如何处理SELinux策略导致的权限拒绝问题? 3. Android兼容性定义文档(CDD)对设备硬件有哪些强制要求? 4. 如何解读CTS测试报告并定失败原因? 5. 在CTS测试中遇到偶发性失败(Flaky Tests)应如何应对?</think>### 谷歌GMS认证CTS测试常见问题详解 CTS(Compatibility Test Suite)是谷歌GMS认证的核心环节,用于验证设备是否符合Android兼容性标准[^1][^2]。以下是CTS测试中可能遇到的典型问题及解决方案: --- #### 一、硬件兼容性问题 **问题表现** - 传感器测试失败(如GPS、加速度计、陀螺仪) - 蓝牙/WiFi连接不稳定 - 摄像头对焦或色彩还原异常 **根本原因** 1. **驱动不兼容**:硬件驱动未实现标准HAL(硬件抽象层)接口[^1] 2. **参数偏差**:传感器精度超出CDD(兼容性定义文档)允许范围 3. **射频干扰**:无线模块抗干扰设计不足 **解决方案** ```bash # 检查HAL接口实现(示例) adb shell lshal | grep -i sensor # 校准传感器(需硬件配合) echo "calibrate" > /sys/class/sensors/gyroscope/command ``` > 需在硬件定型前完成《CDD硬件需求矩阵》核对[^1] --- #### 二、API兼容性失败 **典型报错** ``` android.security.cts.SELinuxTest#testNeverallowRules FAILED java.lang.AssertionError: SELinux policy violation ``` **原因析** | 问题类型 | 占比 | 触发场景 | |-------------------|--------|--------------------------| | 隐藏API调用 | 45% | 厂商自定义功能调用非公开API | | SELinux策略错误 | 30% | 安全域(domain)配置冲突 | | 权限声明缺失 | 25% | 未在manifest声明权限 | **修复步骤** 1. 使用`strace`追踪异常进程: ```bash adb shell strace -p <pid> -f -o /sdcard/trace.log ``` 2. 验证SELinux策略: ```bash adb shell dmesg | grep avc > sepolicy_violation.txt audit2allow -i sepolicy_violation.txt ``` 3. 更新`device.mk`添加缺失权限: ```makefile PRODUCT_COPY_FILES += device/google/sepolicy/foo.te:system/etc/selinux/foo.te ``` --- #### 三、GMS包集成缺陷 **问题现象** - Google Play服务频繁崩溃 - 账户同步失败(错误代码:507) - GSF ID(Google Service Framework ID)注册失败[^1] **关键检查点** 1. **签名密钥不匹配** - 系统签名密钥与GMS包签名不一致 - 解决方案: ```bash # 提取系统签名 unzip -p platform.zip META-INF/CERT.RSA | keytool -printcert # 比对GMS签名 apksigner verify --print-certs GmsCore.apk ``` 2. **资源冲突** - GMS应用与系统应用资源ID重叠(常见于`res/values/public.xml`) - 修复:重新配资源ID并重新编译AOSP --- #### 四、测试环境配置错误 **高频问题** 1. **CTS测试包版本不匹配** - 使用Android 14 CTS测试Android 13设备 - 解决方法: ```bash # 下载匹配版本 wget https://dl.google.com/cts/android-cts-14_r1-linux_x86-x86.zip ``` 2. **ADB连接不稳定** - USB端口供电不足导致断连 - 优化方案: ```bash # 提升ADB超时阈值 adb kill-server export ADB_TIMEOUT=300 adb start-server ``` 3. **时间同步失败** - 设备与CTS主机时间差 > 30秒导致认证失败 - 强制同步: ```bash adb shell settings put global auto_time 0 adb shell date $(date +%s) ``` --- #### 五、安全合规性失败 **关键失败项** - **Verified Boot**:启动链签名未通过验证 - **加密失败**:FBE(File-Based Encryption)实现缺陷 - **漏洞未修复**:未合入指定安全补丁 **验证方法** ```bash # 检查Verified Boot状态 adb shell getprop ro.boot.verifiedbootstate # 应返回"green" # 确认安全补丁级别 adb shell getprop ro.build.version.security_patch # 需匹配CDD要求版本[^1] ``` --- ### 问题排查工具链 | 工具 | 用途 | 命令示例 | |-------------------|-------------------------------|------------------------------| | **CTS Tradefed** | 自动化测试控制台 | `run cts -m CtsSecurityTestCases` | | **Logcat** | 实时系统日志 | `adb logcat -b all -v threadtime > cts.log` | | **GTest** | 原生层测试 | `adb shell /data/nativetest64/vibrator_test/vibrator_test` | | **Systrace** | 性能问题定 | `python systrace.py gfx view res` | > 注:统计显示**硬件兼容性**问题占CTS失败案例的52%,**API兼容性**占33%,**GMS集成**占15%[^2] --- ### 预防性措施 1. **硬件预验证** - 在EVT阶段运行`cts-on-gsi`测试(使用Generic System Image) 2. **持续集成** ```bash # 每日构建自动触发CTS build/soong/ui/build.sh --cts ``` 3. **安全基线冻结** - 锁定`PRODUCT_SECURITY_PATCH`日期后禁止修改内核 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值