GMS认证
1.什么是GMS
GMS全称Google Mobile Service,谷歌移动服务。
为什么要通过GMS认证
Android 系统是开源的,但是 Google 针对GMS所提供的服务却是收费的,比如Google Map,Google Play,Youtube,Gmail,Chrome等,厂商必须通过GMS认证,取得授权,才能使用这些服务。而我国是禁止使用Google服务的,因此,GMS认证只有针对海外客户才需要,国内是不存在GMS认证的。
国内手机厂商之所以不使用鸿蒙系统,很大一部分原因跟GMS有关。如果采用鸿蒙系统,那么手机就不存在GMS服务,这对米OV的海外市场将是毁灭性的打击。
2.GMS认证协议
针对不同的产品,Google会有三种认证协议
- MADA:Mobile Application Distribution Agreement,针对手机平板移动设备,屏幕尺寸在3.3~18英寸之间,且必须带电池;
- EDLA:Enterprise Device Licensing Agreeement,MADA协议的补充,设备可以不带电池,且屏幕尺寸最大可以到70英寸,也就是说,设备不带电池或者屏幕大于18英寸的,必须使用EDLA协议;
- GAS:Google Automotive Services,车机设备申请GMS认证所需要的协议,目前使用较少,很多3PL都不做GAS认证,关于3PL,下文会说明;
3.GMS认证流程
首先产品要符合GMS-CDD(Compatibility Definition Document)的要求;
填写申请表,针对不同的产品,向Google申请对应的认证协议;
取得协议授权,准备样机测试;
产品做软硬件测试;
提交测试报告给Google审核;
获得Google认证授权;
在国内,有一帮专门搞GMS认证的代理机构,他们是Google授权的第三方实验室,俗称3PL(Third-Party-License),如果你想省事儿,可以花钱找他们帮你搞定。
4.GMS注意事项
认证版本:MADA协议分四个版本:欧盟、土耳其、俄罗斯、其他地区(亚洲美洲)。EDLA协议分两个版本:俄罗斯和其他地区;
Android版本要求:截止到2023年9月,MADA的最低要求为Android13,EDLA是Android12;
窗口期:GMS认证在每年都设有窗口期,必须在窗口期内完成认证,否则只能再等一年了。截止到2023年09月,Android12的认证截止时间为2024年1月31日,过了这个时间,Android12的设备就做不了GMS认证了;
认证周期:GMS认证的平均周期为8-12周;
认证费用:3-4万美金,MADA比EDLA要便宜一点;
维护:认证通过后,MADA不需要维护,除非收到Google通知。EDLA必须打补丁(SMR),并可能升级大版本(LR);
5.GMS测试环境搭建
在上述GMS认证流程的六个步骤中,本文主要介绍第四步,如何进行软硬件测试。
首先是搭建测试环境:
1、准备一台装有Ubuntu系统的电脑,至少是18.04版本
2、配置adb,至少是1.0.41版本
3、配置多版本jdk,GMS测试会因为Android版本的不同,导致测试期间JDK的版本也不同。所以,我们本地一般会配置三个版本的JDK(8、9、11),再结合切换命令,随时切换
4、网络环境
测试期间,电脑和测试设备都要能够正常访问Google服务器。
5、安装python开发工具包
sudo apt-get install python-dev sudo apt-get install python-protobuf sudo apt-get install protobuf-compiler sudo apt-get install python-virtualenv sudo apt-get install python-pip
6、安装AAPT
sudo apt-get install aapt
7、其他环境依赖
pip install virtualenv & pip install future & pip install futures & pip install enum & pip install concurrent & pip install protobuf & pip install setuptools & pip install requests & pip install httplib2 & pip install google-api-python-client & pip install google-cloud-pubsub
8、手机设置
- 打开开发者选项,并打开“USB Debugging”
- 打开开发者选项中的“Stay awake”(屏幕常亮)
- Display 中设置休眠时间为“30min”(最大的休眠时间)
- Security 中设置锁屏方式为“None”
- 打开 WIFI,并连接翻墙网
- 打开蓝牙和 Location
- 测试期间,可能会要求更改时区(视情况而定)
- 插入SDCard,SIM卡,白卡
6.GMS测试套件
GMS认证包含一下几项测试
- CTS:Compatibility Test Suite,兼容性测试套件,设备需要通过 Android 的兼容性测试,以确保在 Android 上开发的应用程序在手机设备上都能正常运行,包括API和非API系统行为;
- VTS:Vendor Test Suite,供应商测试套件,确保Vendor层实现的前向兼容性。在Android 8.0,Google推出了Project Treble计划,主要为厂商节省Android版本的的适配工作,其思路就是将原生(Android Framework)代码和厂商适配(Vendor Implementation,主要指hal)代码分离,Android新版本出来后,厂商只需要对Android Framework代码适配即可,无需更改Vendor Implementation代码,这就要求同一Vendor Hal要适配Android各个版本,同时,同一Android Framework版本要兼容多个Vendor Hal,因此就有了VTS;
- CTS-ON-GSI:Compatibility Test Suite On Google System Image,在 Android 原生镜像上的兼容性测试,主要针对硬件测试;
- CTS-VERIFIER:CTS的一部分,需手动进行,主要用于测试自动测试系统无法测试的功能;
- GTS:Google Mobile Services Test Suite,谷歌移动服务测试套件,该测试需要连接到 Google 服务器,并进行媒体流的下载与播放,其主要内容是 widevine(数字版权相关)功能的测试;
- STS:Security Test Suite,安全测试套件,谷歌关于Android安全补丁安装情况的一个测试套件,用于测试Security patch;
- CTS-INSTANT:测试Instant app兼容性;
- BTS:Build Test Suite,编译测试套件,提供 Image 给 Google,他会扫描 Image 中是否有预装恶意软件或潜在有害的应用程序(PHA);
7.测试套件获取
CTS可直接在官方网站下载:source.android.google.cn/compatibili…
其他测试套件必须登录Google网站获取,或者从3PL获取,注意,只有拥有谷歌协议用户账号才能从官网下载测试包,测试包具有有效期,必须在有效期内完成测试。
8.测试流程
以CTS为例:
1、 用户从官网下载CTS
2、 搭建CTS测试环境
3、 将设备连接到PC
4、 运行CTS。CTS会陆续将相应测试用例(即一个APK文件)传送到设备上,并通过instrumentation运行,然后记录运行结果,最后删除测试用例。所有的测试用例执行完毕后,可以参照测试结果重新调整或优化系统。建议再次运行CTS测试检查结果
9.测试用例
以CTS为例,CTS主要包含以下三种类型测试:
-
单元级:测试Android平台上的代码单元。比如,一个java.util.HashMap类;
-
功能级:测试多个API组合而成一个高级功能;
-
程序级:通过运行一个简单的APP来测试一个API集合功能和Android运行时的服务;
CTS测试项数目总数约9.5万,Android13甚至达到惊人的260万。主要包含两个组件:一是运行在PC上的测试框架组件,主要用来管理测试用例的执行;二是运行在设备或模拟器上的测试用例,这些用例是用Java写成的APK文件。
10.测试范围
目前,为了确保设备产品兼容,测试用例覆盖了以下范围:
- Signature:测试Android产品XML文件中描述的API,检测这些API是否被系统支持;
- Platform:测试SDK文档中描述的平台API,比如core libraries和Android Application Framework等。要求提供API分类、属性、签名、方法行为、错误参数处理方式等信息;
- Dalvik VM:专门针对Dalvik VM的测试;
- Platform Data Model:测试平台通过ContentProvider提供给用户使用的数据,比如:Contacts、Browser、Settings等;
- Platform Intents:测试平台提供的用于核心功能的Intent;
- Platform permission:测试平台提供的一些重要APP权限;
- Platform Resources:测试simple values、drawables、nine-patch、animations、layouts、styles and themes、loading alternate resources等;
11.测试命令
测试命令:
命令 | 说明 |
---|---|
run cts | 执行CTS测试 |
run cts-on-gsi | 执行GSI测试 |
run gts | 执行GTS测试 |
run sts-engbuild | 执行STS测试 |
run vts | 执行VTS测试 |
run cts-instant | 执行INSTANT,Android 10版本已经合入到CTS测试中 |
控制台命令:
命令 | 说明 |
---|---|
list devices | 查看已连接的设备的状态 |
list results | 查看测试的所有结果 |
list invocations | 查看当前测试的执行状态 |
list modules | 查看当前有效的测试模块 |
run cts --subplan sub-cts | 执行当前cts的子计划测试 |
12开始测试
以CTS为例,一切准备就绪后,进入CTS所在的目录,执行./cts-tradefed
出现上述截图内容说明测试环境已经OK,此时可以执行list devices
查看连接设备
设备连接OK,开始执行CTS
测试过程中设备不停的跳动和重启,这是正常现象,期间可能需要手动设置的,需要隔段时间观察一下。此过程需要很长时间,毕竟CTS测试项有上万条,一台设备要全部跑完,大概需要十天,因此,实际会用多台(一般3台)设备同时跑,每个设备跑的测试项不同,这样能大大减少测试时间。测试是全自动的,测试期间尽量不要操作主机和测试设备。
13.获取测试报告
等待测试跑完,测试报告自动生成在工具所在的根目录,命名格式为开始执行测试的日期和时间
打开test_result.html
文件,即可查看测试结果,该文件较大,性能不好的pc可能会报oom
可以看到Android13的CTS测试项目总共有266万多条,并且下面展示了每一个module的测试结果,点击module可以查看该module所有的测试项。其中大部分都pass了,只有337条失败了,失败项可在test_result_failures_suits.html
文件中查看,里面会显示测试项名称和错误原因
14.测试问题分析方法
新手对于GMS测试问题是一脸懵逼的,它不像一般的开发问题,具体给你报哪个文件哪一行的错误,但我们可以反向思考问题的解决方法,就是探索GMS认证测试的基本逻辑,了解测试pass的条件,然后想办法去满足条件。上面说过,测试套件就是一些apk工具,那么我们可以借助反编译工具(推荐jadx),查看工具的源码,结合测试Log,分析问题原因。
当然老司机一般都会总结各种fail项对应的解决方案,新手完全可以站在巨人的肩膀上解决问题。实在找不到解决方案的,就向厂商提工单吧。
总结
GMS认证是一项大工程,需要花费大量的人力(至少3人负责)、物力(标配:3台设备+3台主机)、财力(20万RMB左右)、时间(周期最低2个月),不建议新手去接手这件差事,最好是有老司机全程带着搞一遍。测试期间很轻松,基本不需要干啥,都是全自动化的,但是测试结束就有得忙了,随随便便成千上万个fail项就让人头皮发麻,所以,这个烫手山芋很多人都难以下咽,但作为一个合格的framework开发者,很有公司都要求有GMS认证的经验。