当前位置:   article > 正文

Android 之 GMS 认证知多少?_android gms是什么

android gms是什么

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版本

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卡,白卡

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测试检查结果

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

cts-tradefed

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

list-devices

设备连接OK,开始执行CTS

run-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认证的经验。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号