2025年出海必经之路-GMS认证

出海必经之路-GMS认证什么是 GMS GMS 全称 Google Mobile Service 谷歌移动服务 为什么要通过 GMS 认证 Android 系统是开源的 但是 Google 针对 GMS 所提供的服务却是收费的 比如 Google Map Google Play Youtube Gmail

大家好,我是讯享网,很高兴认识大家。
什么是GMS

GMS全称Google Mobile Service,谷歌移动服务。

为什么要通过GMS认证

Android 系统是开源的,但是 Google 针对GMS所提供的服务却是收费的,比如Google Map,Google Play,Youtube,Gmail,Chrome等,厂商必须通过GMS认证,取得授权,才能使用这些服务。而我国是禁止使用Google服务的,因此,GMS认证只有针对海外客户才需要,国内是不存在GMS认证的。

国内手机厂商之所以不使用鸿蒙系统,很大一部分原因跟GMS有关。如果采用鸿蒙系统,那么手机就不存在GMS服务,这对米OV的海外市场将是毁灭性的打击。

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,下文会说明;
GMS认证流程
  • 首先产品要符合GMS-CDD(Compatibility Definition Document)的要求;
  • 填写申请表,针对不同的产品,向Google申请对应的认证协议;
  • 取得协议授权,准备样机测试;
  • 产品做软硬件测试;
  • 提交测试报告给Google审核;
  • 获得Google认证授权;

在国内,有一帮专门搞GMS认证的代理机构,他们是Google授权的第三方实验室,俗称3PL(Third-Party-License),如果你想省事儿,可以花钱找他们帮你搞定。

注意事项
  • 认证版本: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);
测试环境搭建

在上述GMS认证流程的六个步骤中,本文主要介绍第四步,如何进行软硬件测试。

首先是搭建测试环境:

1、准备一台装有Ubuntu系统的电脑,至少是18.04版本

2、配置adb,至少是1.0.41版本

adb版本查询
讯享网

3、配置多版本jdk,GMS测试会因为Android版本的不同,导致测试期间JDK的版本也不同。所以,我们本地一般会配置三个版本的JDK(8、9、11),再结合切换命令,随时切换

切换jdk版本

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卡,白卡
测试套件

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);
测试套件获取

CTS可直接在官方网站下载:source.android.google.cn/compatibili…

其他测试套件必须登录Google网站获取,或者从3PL获取,注意,只有拥有谷歌协议用户账号才能从官网下载测试包,测试包具有有效期,必须在有效期内完成测试。

测试流程

以CTS为例:

1、 用户从官网下载CTS

2、 搭建CTS测试环境

3、 将设备连接到PC

4、 运行CTS。CTS会陆续将相应测试用例(即一个APK文件)传送到设备上,并通过instrumentation运行,然后记录运行结果,最后删除测试用例。所有的测试用例执行完毕后,可以参照测试结果重新调整或优化系统。建议再次运行CTS测试检查结果

CTS测试流程

测试用例

以CTS为例,CTS主要包含以下三种类型测试:

  • 单元级:测试Android平台上的代码单元。比如,一个java.util.HashMap类;
  • 功能级:测试多个API组合而成一个高级功能;
  • 程序级:通过运行一个简单的APP来测试一个API集合功能和Android运行时的服务;

CTS测试项数目总数约9.5万,Android13甚至达到惊人的260万。主要包含两个组件:一是运行在PC上的测试框架组件,主要用来管理测试用例的执行;二是运行在设备或模拟器上的测试用例,这些用例是用Java写成的APK文件。

测试范围

目前,为了确保设备产品兼容,测试用例覆盖了以下范围:

  • 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等;
测试命令

测试命令:

命令 说明
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的子计划测试
开始测试

以CTS为例,一切准备就绪后,进入CTS所在的目录,执行./cts-tradefed

cts-tradefed

出现上述截图内容说明测试环境已经OK,此时可以执行list devices查看连接设备

list-devices

设备连接OK,开始执行CTS

run-cts

测试过程中设备不停的跳动和重启,这是正常现象,期间可能需要手动设置的,需要隔段时间观察一下。此过程需要很长时间,毕竟CTS测试项有上万条,一台设备要全部跑完,大概需要十天,因此,实际会用多台(一般3台)设备同时跑,每个设备跑的测试项不同,这样能大大减少测试时间。测试是全自动的,测试期间尽量不要操作主机和测试设备。

获取测试报告

等待测试跑完,测试报告自动生成在工具所在的根目录,命名格式为开始执行测试的日期和时间

测试报告

打开test_result.html文件,即可查看测试结果,该文件较大,性能不好的pc可能会报oom

查看测试报告

可以看到Android13的CTS测试项目总共有266万多条,并且下面展示了每一个module的测试结果,点击module可以查看该module所有的测试项。其中大部分都pass了,只有337条失败了,失败项可在test_result_failures_suits.html文件中查看,里面会显示测试项名称和错误原因

测试失败项

测试问题分析方法

新手对于GMS测试问题是一脸懵逼的,它不像一般的开发问题,具体给你报哪个文件哪一行的错误,但我们可以反向思考问题的解决方法,就是探索GMS认证测试的基本逻辑,了解测试pass的条件,然后想办法去满足条件。上面说过,测试套件就是一些apk工具,那么我们可以借助反编译工具(推荐jadx),查看工具的源码,结合测试Log,分析问题原因。

当然老司机一般都会总结各种fail项对应的解决方案,新手完全可以站在巨人的肩膀上解决问题。实在找不到解决方案的,就向厂商提工单吧。

写在最后

GMS认证是一项大工程,需要花费大量的人力(至少3人负责)、物力(标配:3台设备+3台主机)、财力(20万RMB左右)、时间(周期最低2个月),不建议新手去接手这件差事,最好是有老司机全程带着搞一遍。测试期间很轻松,基本不需要干啥,都是全自动化的,但是测试结束就有得忙了,随随便便成千上万个fail项就让人头皮发麻,所以,这个烫手山芋很多人都难以下咽,但作为一个合格的framework开发者,很有公司都要求有GMS认证的经验

招聘要求.png

如果能掌握这一技能,那必定能立于Android圈不败之地。

作者:小迪vs同学
链接:https://juejin.cn/post/
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

小讯
上一篇 2025-01-04 18:08
下一篇 2025-01-04 16:11

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/11117.html