什么是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版别
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卡,白卡
测验套件
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首要包括以下三种类型测验:
-
单元级:测验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
出现上述截图内容阐明测验环境现已OK,此刻能够履行list devices
检查衔接设备
设备衔接OK,开始履行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认证的经验
如果能掌握这一技术,那必定能立于Android圈不败之地。