GMS认证总结

来到一家新公司,除了解决系统稳定性的系列问题,还主要负责产品的GMS认证方面的工作。在GMS认证的过程中,还是遇到一些困难的,也有一些问题耗时比较久才得以解决。

在Android8.0之后,GMS认证除了CTS,GTS,CTS-verifier还多了VTS,STS。其具体含义可以查询官网。下面来讲解下

主机环境搭建

  1. 请安装64位的ubuntu版本
  2. 环境配置

Ubuntu下可以加载到~/.bashrc或者编辑以下内容到文件中如env,测试前source env
export JAVA_HOME=/home/
你的用户名/Software/jdk1.8.0_77
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
export PATH=/home/
你的用户名/Software/android-sdk-linux/tools:$PATH
export PATH=/home/
你的用户名/Software/android-sdk-linux/platform-tools:$PATH
export PATH=/home/
你的用户名/Software/android-sdk-linux/build-tools/19.0.0:$PATH

android-sdk-linux.tar.gz可以从网上下载

注意请确保android-sdk-linux/build-tools/19.0.0目录下有appt程序,否则会报相应的提示错误,若出现请相应修改对应的路径即可。

如果出现aapt不可用,请安装c++兼容库:
sudo apt-get install lib32stdc++6 lib32z1
2.
安装Python开发包
$ sudo apt-get install python-dev
3.
安装 Protocol Buffer工具
$ sudo apt-get install python-protobuf
$ sudo apt-get install protobuf-compiler
4.
安装 Python 虚拟环境相关工具
$ sudo apt-get install python-virtualenv
If you use python3, you can try this:
$ sudo apt install virtualenv
$ sudo apt-get install python-pip

机器环境

  1. 由于集成了GMS包,烧写结束后第一次启动会比较慢,请耐心等待,开机启动后完成GMS
  2. Setup Wizard中的设置,设置默认语言为United States Englishwifi部分请先跳过,时区可选择+8上海,设置用户信息,进入Home主界面;
  3. 确保机器按以下配置,Settings-\>Wi-Fi连接wifi,连接vpn网络环境,主机也要连接vpn
  4. 开始测试CTS GTS之前,切记不要登录GMS账号,否则会有fail
  5. 测试GTS前,请烧写Key,请仔细阅读第六章第1节,否则会有fail,具体项参见第八章。
  6. Settings-\>Security-\>Screenlock选择None
  7. 如果产品(如laptop类产品)带物理键盘,Languages & input-\>Physical
  8. keyboard-\>Show virtual keyboard,勾选该选项;
  9. 连续点击Settings-\>About tabletphone-\>Build
  10. Number,使被隐藏的Developer Options显示出来;
  11. Settings-\>Developeroptions-\>Stayawake,勾选该选项;
  12. Settings-\>Developeroptions-\>Force GPU rendering,不要勾选该选项;
  13. Settings-\>Location打开定位服务;
  14. Settings-\>Display-\>Sleep设置成最长时间,将亮度调节到最暗(测试时间较长节省电量);
  15. 测试CTS,首先需要打开一次Chrome,并把欢迎界面点掉,确保测试 Chrome
  16. 的时候不会让弹出的账号登陆窗口影响了测试的进行。
  17. 拷贝媒体资源文件,需使用android-cts-media-version新版的媒体资源包。
  18. 执行媒体包下的脚本source copy\_media.sh&& source copy\_image.sh拷贝媒体文件。
  19. Settings-\>Security-\>Unknownsources不勾选;
  20. 查看Sensor校准状态,校准状态永久有效,如果该机器做过校准则不需要再做。测VTS前务必要确认校准状态,查看方法:cat
  21. /sys/class/sensor\_class/accel\_calibration,如果有值打印,类似accel calibration: -604, 131,535,则说明校准成功。未校准的机器将其水平静止放置,输入命令echo 1 \>/sys/class/sensor\_class/accel\_calibration即可校准,校准后请确认是否校准成功;
  22. 物理竖屏的机器要竖屏放置,物理横屏的机器横屏放置;
  23. 通过音量键调整设备音量适中,不要设置为最大音量;
  24. 开始测试前,请保证设备满电状态;
  25. 启动浏览器,并清除任何浏览器启动界面、设置界面或是登陆账户界面;
  26. 确保相机不被遮挡,相机对着对比度高,容易对焦的物体,同时确保有足够的亮度。
  27. 运行测试设备时,不得用于任何其他任务,必须放在一个固定位置,避免触发sensor
  28. 每次重新测试,都要将机器进行如上配置。

相关的测试工具包请向认证机构获取。有最新的就需要用最新的测试包,有一些问题可能和测试包相关。

CTS

Cts常用命令:

命令是死的,人是活的,命令时有更新,具体请用run cts –help-all查看当前版本的测试命令!

Cts一般都用多台机器同时测试,以数量换时间。

run cts –o --shards 3 -s SN1 -s SN2 –s SN3 ...

-o 可以跳过下载android-cts-media-version媒体资源包,对于已经拷贝过媒体资源的机器就很有用。

--shards 3 表示用三台机器同时测试

SN1,SN2,SN3要换成机器里面的具体SN

l d命令查看当前挂载了多少台设备

l r命令查看可以查看session id

对于CTS测试一遍大多数情况是过不了的,需要多次测试。

run cts –o –r session id --retry-type NOT_EXECUTED/FAILED --shards 3 -s SN1 -s SN2 –s SN3 ...

每轮测试完后都会生成测试报告,通过 l r命令可以查看具体的session id,以便通过上述命令再次进行测试

--retry-type指的是进行未测试项的测试还是Fail项的测试

当然也可以用子项plan测试那些未通过的测试项。步骤如下:

- 添加fail子项plan
help add查看
add subplan --session xx -n plan_name --result-type type
-
按新建的子项plan测试:
run cts -o -a arm64-v8a --skip-all-system-status-check --subplan xxxx

其中subplan可以通过l p命令查看

还有更多详细命令还请执行run cts –help-all查阅

单测报告必须执行命令:run cts -m CtsSystemCurrentApiSignatureTestCases -t android.signature.cts.api.SignatureTest#testSignature

GTS

  1. 在进行gts测试时最好把机器格式化,重新弄下机器的环境。不要再进行完cts测试继续执行gts测试,否则可能会有一些测试项过不了
  2. gts的命令和cts类似,基本上可以通用。若出现不能执行的情况,还请执行run gts –help-all自行查阅。
  3. gts测试请确保主机已经连接VPN,并且可以连上谷歌
  4. gts测试工具还请用最新的进行测试,可能会遇到一些最新的工具包可以过,旧版本的死活过不了的情况。
  5. android8.0之后gts有些测试项需要烧写谷歌的keybox才能过。

Gts测试要正确配置gts-pegatron-public.json文件。在~/.bashrc文件末尾添加

export APE_API_KEY='/home/tim/Software/gms/gts-pegatron.json'(路径要和文件所在一致)

STS

  1. STS请用最新的STS测试工具测试。
  2. STS测试请用userdebug的软件测试
  3. STS测试关闭wifi否则会有失败项
  4. STS测试工具解压需要密码:sts
  5. 测试命令 run sts

VTS

VTS测试需要替换谷歌的system.img。

比如将system-aosp_arm_a-2018-09-05.img烧入我们系统,烧入的时候选择user版本的软件,将我们的system.img直接替换为谷歌的,选择烧入全部的镜像文件,注意不要只烧入system.img文件,否则会出现进入系统要输入密码的“友好提示”!

  1. VTS测试请确保机器有连接VPN
  2. VTS分为两部份测试,对应有两个测试命令,run vts 和run cts-on-gsi

总结

在GMS测试中,很难有一次通过的情况,第一遍通常都是有一堆failed项。只能通过多次测试,得到最终结果。对于那些没能测试通过的就必须通过单项测试来解决相应的问题。当遇到公版软件可以通过,而我们的不能过的时候,这就让我们很郁闷。解决的方法:

  1. 测试整个模块看是否通过
  2. 横屏单项测试看是否通过
  3. 看竖屏单项测试是否通过
  4. 机器格式化之后,重新测试那一项
  5. 测试的过程中也遇到过单项测试死活不过,run –retry也不能过,但整个模块测试可以通过,出现这个情况就说明是测试包的问题了,很无耐此时我们只能重新测试
  6. 分析测试Log,从log找到解决方案
  7. 查看cts目录下的代码,分析其测试流程

当解决完一系列问题后,我们公司由于VPN网络太差和没有IPV6环境,导致一些测试项测试不过:

1.CTS

CtsLibcoreTestCases_libcore.java.net.SocketTest#testSocketTestAllAddresses

CtsNetTestCases_android.net.cts.DnsTest#testDnsWorks

这两个文件都需要IPV6的网络环境测试,只要3PL那边能过就可以

2.GTS

GtsExoPlayerTestCases

com.google.android.exoplayer.gts.DashTest#testH265Adaptive

 

GtsMediaTestCases

com.google.android.media.gts.WidevineH264PlaybackTests#testClearWith1080P30

com.google.android.media.gts.WidevineH264PlaybackTests#testClearWithUHD30  

com.google.android.media.gts.WidevineH264PlaybackTests#testL3With1080P30     

com.google.android.media.gts.WidevineH264PlaybackTests#testL3WithUHD30        

com.google.android.media.gts.WidevineHEVCPlaybackTests#testClearWithUHD30  

com.google.android.media.gts.WidevineHEVCPlaybackTests#testL3WithUHD30       

com.google.android.media.gts.WidevineHLSPlaybackTests#testL3With360P30

这些问题与VPN网络的好坏有关,有时可以过有时过不了,保证3PL那边能过就行

GMS认证有关网站

谷歌可以查到的CTS-bug

https://issuetracker.google.com/issues/111853144

认证有关资料的网站:

https://ressrc.com/category/android/gms/

STS有关patch这里有:

https://source.android.com/security/bulletin/2016-08-01

https://source.codeaurora.org/quic/la/kernel/msm-3.10/commit/?id=e758417e7c31b975c862aa55d0ceef28f3cc9104

VTS测试相关介绍:

https://codelabs.developers.google.com/codelabs/android-vts-8/#0

CTS官网:

https://source.android.com/compatibility/cts?hl=zh-cn

vts官网:

https://source.android.com/compatibility/vts/systems?hl=zh-cn

CtsVerifier源码(当然Android源码里面也有):

https://android.googlesource.com/platform/cts/+/7542792/apps/CtsVerifier

<think> 我们正在处理关于Android GMS认证中IR软件和SMR软件feature不一致的问题。根据引用[3]中提到的,GMS认证中有一个条件是关于Letter Upgrade(LR)的情况,其中要求同一个SKU在升级系统时(例如从Android12升级到Android13),需要保证ro.product.first_api_level的值与IR软件(初始发布版本)的first_api_level一致,并且ro.build.version.base_os不要赋值。 但是,用户的问题是关于IR软件和SMR软件(软件维护版本)的feature不一致。在GMS认证中,对于同一个设备型号(SKU),软件版本升级(如从IR升级到SMR)时,必须确保设备的功能特性(features)保持一致。如果IR和SMR的feature不一致,可能会导致GMS认证失败。 解决方法通常包括以下步骤: 1. **检查feature差异**:首先需要明确IR版本和SMR版本在哪些功能特性上存在差异。这些差异可能包括硬件支持的功能、预装的应用程序、系统属性等。 2. **确保功能集一致**:根据GMS认证要求,设备升级到新版本(SMR)后,不能减少或改变IR版本中已经存在的功能。如果SMR版本中增加了新功能,需要确保这些新功能不会影响原有功能的可用性,并且符合Google的要求。 3. **调整系统属性**:根据引用[3]的要求,确保系统属性`ro.product.first_api_level`在IR和SMR版本中保持一致。同时,注意`ro.build.version.base_os`属性不要设置(即不要赋值)。 4. **更新GMS包**:引用[4]中提到,要使用最新的GMS包,并打上对应的patch。确保GMS包的版本符合当前认证要求,并且指纹(fingerprint)值一致。 5. **测试与验证**:在完成上述调整后,进行全面的测试,包括使用引用[5]中提到的Google Play Protect认证检查方法,确保设备通过认证(显示“device is certified”)。 具体到操作步骤: - **获取IR版本的feature列表**:包括预装应用列表、系统属性、硬件支持的功能等。 - **调整SMR版本**:修改SMR版本的软件,使其在功能上与IR版本保持一致(如果IR版本中某个功能在SMR中不需要,也不能直接删除,而是需要隐藏或禁用,但最好咨询认证机构)。 - **修改系统属性**:确保在SMR版本中,`ro.product.first_api_level`与IR版本一致,并且`ro.build.version.base_os`为空。 - **更新GMS包**:使用认证机构提供的最新GMS包,并打上必要的补丁。 - **重新编译并刷机**:将修改后的SMR版本刷入设备。 - **进行GMS测试**:运行GMS测试套件(通常为GTS, CTS等),确保所有测试通过。 - **检查Play Protect认证**:按照引用[5]的方法,在Google Play商店中检查设备是否认证。 另外,建议与方案提供商或认证机构沟通,因为他们可能有具体的经验来解决这类问题。 注意:由于GMS认证的具体要求可能随时间和Android版本变化,以上步骤仅供参考,实际操作请以Google最新的认证要求为准。 §§相关问题§§ 1. 如何检查Android设备的GMS认证状态? 2. GMS认证中常见的失败项有哪些? 3. 如何更新设备的GMS包版本? </think> ### 解决Android GMS认证中IR软件与SMR软件Feature不一致的方法 在Android GMS认证过程中,IR(Initial Release)软件与SMR(Software Maintenance Release)软件出现feature不一致是常见问题。以下是具体解决方案: #### 1. **确保系统属性一致性** - 检查`ro.product.first_api_level`属性值: ```bash adb shell getprop ro.product.first_api_level ``` 必须保证IR和SMR版本中该属性值**完全相同**(引用[3])。 - 确认`ro.build.version.base_os`属性**未赋值**(引用[3]): ```bash adb shell getprop ro.build.version.base_os # 应返回空值 ``` #### 2. **统一GMS包版本** - 使用**相同版本的GMS包**: - 通过命令检查当前GMS版本: ```bash adb shell "getprop | grep ro.com.google.gmsversion" ``` - 若不一致,需更新至认证机构指定的最新GMS包(引用[4])。 - 应用GMS补丁: - 为GMS包打上对应的patch(如`gms-oem-U-14-202408`补丁包),确保指纹值一致(引用[4])。 #### 3. **功能集对齐** - **特性清单对比**: - 提取IR版本的`/system/etc/sysconfig`和`/product/etc/sysconfig`目录下的XML配置文件。 - 与SMR版本逐文件比对,重点检查: ```xml <!-- 示例:feature声明 --> <feature name="android.hardware.camera" /> ``` - **硬件抽象层(HAL)匹配**: - 验证`android.hardware.*`特性声明是否一致(如蓝牙、NFC等)。 - 使用测试命令: ```bash adb shell pm list features # 列出所有设备特性 ``` #### 4. **认证测试规避方法(临时方案)** - 若需快速通过测试: 1. 设备连接外网 2. 打开Google Play Store → 账户设置 → About 3. 确保显示 **"Device is certified"**(引用[5]) - **注意**:此方法仅用于验证,正式认证仍需解决根本问题。 #### 5. **系统升级规范(LR流程)** - 遵循Letter Upgrade(LR)规则: - SMR版本必须是IR版本的**直接升级路径**(Android 12→13) - 禁止在SMR中移除IR已声明的核心特性(引用[3])。 > **关键点总结**: > 一致性检查优先级:系统属性 > GMS版本 > 特性清单 > HAL实现。建议在编译阶段通过脚本自动化对比IR/SMR的`build.prop`和特性配置文件(引用[3][4])。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值