GMS服务,Google Mobile Service(谷歌移动服务),GMS是谷歌应用集合包,以支持设备的功能。
Google Search 、Google Chrome、YouTube 、Google Play Store 等应用。这些应用完美协作,以确
保设备提供良好的用户体现。
Android 系统是开源的,但是google 针对GMS 所提供的Search、Search by Voice、Gmail/Google
Mail、Contact Sync、Calendar Sync、Talk、Maps、Street View、YouTube、Google Play服务却是
收费的,需要授权(即厂商需要获得).
国外许多运营商都要求供应商通过GMS认证,在国外一些运营商主导手机市场的地方,没有GMS认证走运营商渠道是寸步难行。同时在近期的安卓会议上谷歌一次性砍掉了没有前来参加会议的和出货量不及格的各大MADA(Mobile Application Distribution Agreement)厂商,更为强硬的是在2017第三季度将会开始强制进行GMS认证,否则一律不予以使用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R0ulTMcl-1663657556028)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905171521402.png)]
首先给大家介绍一个规范名字CDD(Compatibility Definition Document),这个是Android 开发的规范,注意开发的时候按这些要求开发。其次我们设计的产品还需要满足GMS Requirements 需求。
一、MTK平台
目前mtk平台默认express基本,我们可以选择express or express plus送测两种方案其中需要注意的是express plus对很多google应用布局的位置及是否为default 有强制要求,要求较多,具体可参阅GMS EXPRESS PLUS 相关的文档,此外google还提供了express plus 的python 脚本来check 是否满足express plus 的要求
二、高通平台
目前有MSM8917 & QM215 P-Go & Qualcomm SD 662项目支持express,QM215 Q已经向google提交了express申请,还在开发中
三、展锐、瑞芯、全志,这三家平台,我们项目做到时再确认,本身市场上用的并不多
CTS-Verifier.是一个测试 apk,主要处理一些不能自动化测试和需要借助仪器配合的测项,如
cameraITS, audio,sensor cv crosscheck。
异常分析(一)
当我们收到 CV 异常,我们首先需要确认以下事项。
1.工具的版本是否正确。
2.使用的机器版本及硬件配置是否正确( sensor ,camera 是否对应)
3.确认测试方法是否按要求执行,具体可参照右图,点击?查看每条的说明。
4.确认对比机(pix or 友商机)是否能 pass
5.如果 1~4 都 ok,下面我们结合 fail 项目抓取 pass or fail 的 log,对比确认异常点结合原码分析原码可以用工程内部代码路径
/home/android/work1/work/P710/LA.UM.8.15/LINUX/android/cts/apps/CtsVerifier 这部分代码不是最新,可到 google 原始地址
https:landroid.googlesource.comiplatform/cts/+/refs/tags/android10.0.0_r39/apps/Ctsverifierlsrclcomlandroid/ctslverifier
下载和测试工具对应的代码,针对异常部分,可以添加 log 确认 fail 原因,再编译CtsVerifier 模块调试
异常分析(二)
常见的 fail 也可以参照 MTK FAQhttps:/lonline.mediatek.com/_layouts/15/mol/topic/ext/TopicContentFrame.aspx?id=2
caf9a70-1913-4ec4-900c-b289b31ffc7d如果分析过程中确认是 CTS-Verifier 上具的回题,请计时联系各 site TAM 下载最新的工具验
证
常见的 fail 项:
CTS:是一个测试套件,主要是兼容性相关的测试,确认是否满足 CDD 的要求
异常分析(1)
1.首先我们需要在本地复测,GMS 测试小组用的 MTS 工具,我们建议用本地环境 run cts -m Xx -t xx 重新跑一次,如果仍然 fail 可以 check 报告同目录下 hots_log & test log 确认异常点。
2.查看 MTK online 确认是否芯片厂家已经申请了 wavie
异常分析(2)
比如说,目前在 CtsAlarmManagerTestCases 出现 fail 对就的代码在
/homelandroid/work1/work/P710/LA.UM.8.15/LINUX/android/cts/tests/AlarmManager 对应工具的代码在
https:llandroid.googlesource.com/platform/cts/+/refs/tags/android-cts10.0_r4/tests/AlarmManagerl根据 host & test log 中的提示找到 fail 异常的地方,如果是 apk 的问题可以尝试回退apk 或者删除 apk 来定位,或者从 framework 层加 log,定位异常,想从根本上解决,加 log编译对应的测试 apk。常见的 fail
1.CtsOmapiTelstCases/CtsCarrierApiTestCases 用错测试白卡
2.网络异常引起的 media fail
3.机器没有校准引起的 sensor fail4
4.Camera 光线弱引起的 fail
GTS:主要是测试权限、mada 等和 google 交互性相关及不同出货地区如 EEA,RU 特殊需求 测试。
异常分析(1)
GTS 因为没有原码,我们只有根据现有 host log & test log 查看具体的 fail 原因
1.首先我们需要确认一下,测试时配置的 APE_APl_KEY 的环境变量是不是正确
2.确认当前网络情况是否稳定,是否需要翻墙,测试的 sim 卡是否需要漫游
3.确认 mtk online 是否有对应该版本的 wavie 项
4.出不同地区 google app 有不同的要求,去除后会有 gmscore app 相关的 fail,这部 分可以申请 wavie。
CTS-on-GSI 表示通用系统映像上的兼容性测试套件(CTS )。大多数 CTS-on-GSI 测试都是一种 SDKAPI 测试,可以间接测试 VINTF(Vendor Test Infrastructure)。它由 CTS 测试用例的子集和一些专门为 VINTF 设计的新测试用例组成。
异常分析( 1)
GSI 相关的 fail,我们处理时需要注意,因为刷了 google 的 system image,我们分析问题时只需要看 vendor 及其它分区的修改即可。
分析方法同 CTs,原码下载路径repo init -u https://android.googlesource.com/platform/manifest -b android10-gsiGoogle 代码查看地址∶https:/landroid.googlesource.com/platform/test/vts/+/refs/headslandroid10-gsi正常情况,如果发现是 google 自身的问题,请联系我取得最新的 gsi image 验证。举例
1.之前我司发现默认的 rro 资源放在 vendor 下面,因为刷了 google gsi image 导致资源找不到报错
⒉.默认 apk 放 vendor 分区产生 fail
VTS ( Vendor Test Suite ) VTS 本身是指 Android 供应商接口(VINTF )的一致性测试套件,目的是提高 Android 设备生态系统的工程效率,启动速度,安全性和可靠性。主要测试以下部件
1.the Android system (e.g., Core HALs and libraries) and
2.low-level system software (e.g., kernel, module, and firmware).
分析VTS 这部分涉及 lib 库及驱动相关的,需要请对应的硬件厂家协助
测试原码地址
https:llandroid.googlesource.com/platform/testlvts/+/refs/tagslandroid
STS ( Security Test Suite ))主要是测试安全补丁的,google 会每月释放安全相关的补丁给厂商,厂商必须在有效期内尽快打上对应日期的 SPL.补丁的级别分为两种 1 号和 5 号,高通用 1 号,MTK 用 5 号(5 号补丁是 1 号的基础上+厂商的修改)
异常分析
根据 host & test log 中查看具体 fail 是因为哪条 CVE 引起的,确认项目中是否已经打了对应的 CVEpatch,如果没有,应及时向对应的芯片厂家申请。
BTS(The Build Test Suite)主要功能是扫描系统是的应用是否非 PHA ( Potentially Harmful Application)在项目需求完成且客户 apk 全部内置 ok 后进行。
异常分析
fail 项分析,应用有危险权限,暴力内容等等,需要联系对应的 apk 负责人进行修正
需要事项如果需要我这边去向 google 申请 wavie,需要提供单条 report &对应 log &bugreport给我,dailybuild 能通过的尽量用 dailybuild 验证,因为申请 wavie 需要耗时很久,最终是否 wavie 还取决于 googQA 团队。
Approve 后我们需要确认手机 GooglePlay 中显示是否已显示认证,需要刷送测版本,正常生效时间是 24 小时,注意需要用 lock 的手机确认。
GMS 包的版本一般有认证时间要求,超过时间会过期,GMS 认证会失败
GMS 的版本及时间要求参考文件路径
ftp:/192.168.33.8/SW_DOC/Platform/Android/GMS_Certification/GMS 版本及 CTS 版本到期时间表
GMS 包到期后需要我们更新 GMS 包,最新的 GMS 包的版本一般放在\htsvr8\SW_DOC\PlatformlAndroid\GMS_CertificationIGMS Packages!
不过更新 GMS 包一般不需要我们手动更新,通知配置切换 gms 的分支就行了,gms 仓库是一个单独的仓库管理的,切换 gms 版本后,以前的仓库和修改就都不在了,所以需要我们手动合入之前 gms 仓库的一些修改。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxmuqaLl-1663657556028)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905182422451.png)]
安全补丁更新也是必要的,一般更新时候 spm 都会通知你,或者 jira 上会创建相关的 case补丁可以在服务器上获取,比如 MTK 的 V500 项目:ftp://192.168.33.8/SW_DOC/Platform/MTK/BASE/6761/android/alps-mp-r0.mp1-V8.67/
1、 补丁如果获得的是一份差异文件,像这样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3GuqqwN5-1663657556029)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905181612048.png)]
2、在差异文件钟执行 diff 命令生成一个 google-11.patch
文件命令如下:diff -Naur alps_pre alps > google-11.patch
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrjaYiqE-1663657556029)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905181655653.png)]
3、上面生成的 google-11.patch 相当于是 android 目录下一个整的补丁文件,我们需要把他们打入我们需要的项目里面,可以将其拷贝到需要合入的项目 android 目录,执行 patch 命令将其分别打入对应的目录。最后会生成日志 patch.log 那些打入成功,那些打入失败,打入失败的需要自己手动解冲突命令如下:patch -p1 <google-11.patch 2>&1 |tee ./patch.log
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aCWMWyiZ-1663657556030)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905181733077.png)]
4、解决冲突
应用 patch 到时候会有一些输出,注意看是否有错误信息。应用完成以后记得查找一下.rej 文件,如果有这种文件表示应用失败,一般的原因就是代码冲突。不要慌,打开这个.rej 以及相应的.orig 文件对比一下你就知道冲突在哪了,解决掉冲突就可以了。如下图,打开该文件,将最 alps 最新的代码复制进去,删除 rej 和 orig 文件就 OK 了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lKbJftV-1663657556031)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905181746201.png)]
5.最后以几个大仓库(vendor、kernel-4.19、frameworks、external)进行提交代码,如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifirAxr2-1663657556031)(C:\Users\linglong.luo\AppData\Roaming\Typora\typora-user-images\image-20220905181815952.png)]
6.注意上面的补丁并没有修改build / make/core/version_defaults.mk里面的补丁日期,因此最后还需要手动进来修改为对应的日期,如下提交:http://gitcode.tinno.com/#/c/130922/
diff命令:生成patch文件
-a或–text diff预设只会逐行比较文本文件
-r或–recursive 比较子目录中的文件
-u,-U或–unified= 以合并的方式来显示文件内容的不同
补丁日期,因此最后还需要手动进来修改为对应的日期,如下提交:http://gitcode.tinno.com/#/c/130922/
diff命令:生成patch文件
-a或–text diff预设只会逐行比较文本文件
-r或–recursive 比较子目录中的文件
-u,-U或–unified= 以合并的方式来显示文件内容的不同
-N或–new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。