2024年Android13工业平板GMS认证记录
进行GMS认证,原则上免费的。但是具体操作起来要收费。收费价格一般在8万~20万之间,甚至更贵,经过多轮谈判和协商预算15万以内搞定。
譬如,高通设计了一款芯片。对应的在上面集成并跑通了Android13。高通提供给你方案,你在解决方案上,换上自己的各类芯片, 然后你拿着集成好的系统去给google说,我要过GMS。Google有个实验室,这个实验室就是用来跑GMS各种测试的。假如任何人都可以去跑GMS测试,Google可不这样考虑,如果大家一拥而上无意义的跑,从Google的角度有些太费神耗精力了。Google会让客户联系3PL,3PL就是一个设备商和Google之间的一个协调者。市面上有各种提供GMS服务的中介,他们是不是真正有Google给的官方认证的3PL就不好说了。可能是官方认证的,也可能是挂着一个3PL名头去找活而已。
开始认证的时候一定要和芯片提供商确认下,它们开发的芯片和解决方案是否支持GMS认证。譬如,咨询高通,MTK,瑞芯微等芯片商,是否支持你现在用的这款。最好他们以前已经做过了GMS,如果你这款芯片解决方案是第一个做的,那些芯片商也是非常乐意看着你去前方踩雷的。
过GMS测试,就是根据Google提供的测试用例(这个测试用例很庞大,用例有数万条,跑一次需要1天到2天的时间)来进行测试。这些测试用例全部跑过后,便代表了GMS通过。理想情况下跑一次就全部跑过了,那样的花费最少。如果跑了3次才全部跑过,那你付出的价格就更贵了。假如:Google跑一次收费5000刀,3PL再给你加1000刀,那你要付6000刀。具体Google跑一次收费多少刀,不得而知。类似于模拟考和正式考试。正式考试一次6000刀。最后,模拟考全部通过后再去正式考试。
当你通过了GMS,会给你Google Key 。Google Key 里包含者 公钥和私钥。一般设备要处于user-debug情况下,把Google Key 导入到设备里即可。真是出厂需要刷成 user版本。
以上便是过GMS的基本流程。
我是作为项目经理的角色,参与并管理团队,进行GMS的测试。3PL给提供给你最新的GMS包。包含 安全补丁,最新的Google软件(Gmail,Google Play,Google Clander,YouTube等),MainLine。
一、集成GMS包:
1、在 Android 根目录下创建 vendor/ 子目录。
2、下载并解压缩适用于您的 Android 版本的 GMS 软件包,并将其放入新建的 vendor/ 子目录中。解压后的结构类似于以下结构:
vendor/partner_gms
apps/
frameworks/
products/
具体高通是在 qssi下面创建。
3、. 如需添加所有 Google 应用,请在给定设备的产品 makefile(例如 device/<company>/<device>/<device.mk> )中添加以下行:
$(call inherit-product, vendor/partner_gms/products/gms.mk)
例如,Nexus 5 (hammerhead) 设备 makefile ( device/lge/hammerhead/full_hammerhead.mk ) 如下所示:
# Inherit from the common Open Source product configuration
$(call inherit-product,$(SRC_TARGET_DIR)/product/aosp_base_telephony.mk)
PRODUCT_NAME := full_hammerhead
PRODUCT_DEVICE := hammerhead
PRODUCT_BRAND := Android
PRODUCT_MODEL := AOSP on HammerHead
PRODUCT_MANUFACTURER := LGE
PRODUCT_RESTRICT_VENDOR_FILES := true
$(call inherit-product, device/lge/hammerhead/device.mk)
$(call inherit-product-if-exists, vendor/lge/hammerhead/device-vendor.mk)
$(call inherit-product, vendor/partner_gms/products/gms.mk)
添加或移除软件包
如需在 build 中添加或移除软件包,请在 gms.mkconfiguration 文件的 PRODUCT_PACKAGES 列表中添加或移除产品包名称。示例:
# GMS optional application packages
PRODUCT_PACKAGES += \
AndroidForWork \
CalendarGoogle \
CloudPrint \
DeskClockGoogle \
EditorsDocs \
EditorsSheets \
EditorsSlides \
FaceLock \
GoogleCamera \
GoogleHome \
GoogleTTS \
Keep \
LatinImeGoogle \
NewsWeather \
TagGoogle \
talkback
如果从此列表中删除一行,会从设备上的 GMS 中排除相应的应用。
二、集成MainLine:
需要更新和修改MainLine。
vendor/partner_modules and prebuilts/module/sdk
./prebuilts/module_sdk/AdServices
./prebuilts/module_sdk/AppSearch
./prebuilts/module_sdk/Bluetooth
./prebuilts/module_sdk/Connectivity
./prebuilts/module_sdk/IPsec
./prebuilts/module_sdk/Media
./prebuilts/module_sdk/MediaProvider
./prebuilts/module_sdk/OnDevicePersonalization
./prebuilts/module_sdk/Permission
./prebuilts/module_sdk/Scheduling
./prebuilts/module_sdk/SdkExtensions
./prebuilts/module_sdk/StatsD
./prebuilts/module_sdk/Uwb
./prebuilts/module_sdk/Wifi
./prebuilts/module_sdk/art
./prebuilts/module_sdk/conscrypt
./vendor/partner_modules/AdbdPrebuilt
./vendor/partner_modules/AdServicesPrebuilt
./vendor/partner_modules/AdServicesTvpPrebuilt
./vendor/partner_modules/AppSearchPrebuilt
./vendor/partner_modules/ArtPrebuilt
./vendor/partner_modules/CaptivePortalLoginPrebuilt
./vendor/partner_modules/CellBroadcastPrebuilt
./vendor/partner_modules/ConscryptPrebuilt
./vendor/partner_modules/DnsResolverPrebuilt
./vendor/partner_modules/DocumentsUiPrebuilt
./vendor/partner_modules/DynamicCommonLibrariesPrebuilt
./vendor/partner_modules/ExtServicesPrebuilt
./vendor/partner_modules/IKEPrebuilt
./vendor/partner_modules/MediaFrameworkPrebuilt
./vendor/partner_modules/MediaProviderPrebuilt
./vendor/partner_modules/MediaSwCodecPrebuilt
./vendor/partner_modules/ModuleMetadataGooglePrebuilt
./vendor/partner_modules/NetworkStackPrebuilt
./vendor/partner_modules/NNApiPrebuilt
./vendor/partner_modules/OnDevicePersonalizationPrebuilt
./vendor/partner_modules/PermissionControllerPrebuilt
./vendor/partner_modules/SchedulingPrebuilt
./vendor/partner_modules/SdkExtensionsPrebuilt
./vendor/partner_modules/StatsdPrebuilt
./vendor/partner_modules/TelemetryTvpPrebuilt
./vendor/partner_modules/TetheringPrebuilt
./vendor/partner_modules/TimezoneDataPrebuilt
./vendor/partner_modules/UwbPrebuilt
./vendor/partner_modules/WiFiPrebuilt
./vendor/partner_modules/build
低于Android13版本的 product.mk :
# Mainline partner build config - updatable APEX
# define per-module options here if needed
# # MAINLINE_COMPRESS_APEX_ADBD := true
# # MAINLINE_INCLUDE_UWB_MODULE := false
# # MAINLINE_INCLUDE_WIFI_MODULE := false
$(call inherit-product, vendor/partner_modules/build/mainline_modules.mk)
Android13+ 的 product.mk :
# Mainline partner build config - low RAM
# define per-module options here if needed
# # MAINLINE_INCLUDE_UWB_MODULE := false
# # MAINLINE_INCLUDE_WIFI_MODULE := false
$(call inherit-product, vendor/partner_modules/build/mainline_modules_low_ram.mk
product.mk 例子:
# Mainline partner build config - updatable APEX
# define per-module options here if needed
# MAINLINE_COMPRESS_APEX_ADBD := true
# MAINLINE_INCLUDE_WIFI_MODULE := false
$(call inherit-product, vendor/partner_modules/build/mainline_modules.mk)
# Mainline partner build config - flatten APEX, non low RAM
OVERRIDE_TARGET_FLATTEN_APEX := true
PRODUCT_PROPERTY_OVERRIDES += ro.apex.updatable=false
# define per-module options here if needed
# MAINLINE_INCLUDE_DOCUMENTSUI_MODULE := true
$(call inherit-product, vendor/partner_modules/build/mainline_modules_flatten_apex.mk)
# Mainline partner build config - low RAM - Android 10, 11, 12
# OVERRIDE_TARGET_FLATTEN_APEX := true
# PRODUCT_PROPERTY_OVERRIDES += ro.apex.updatable=false
# $(call inherit-product, vendor/partner_modules/build/mainline_modules_low_ram.mk)
# Mainline partner build config - low RAM - Android 13+
#Integrating Module Releases | Mainline | Android Partners
# define per-module options here if needed
# MAINLINE_INCLUDE_UWB_MODULE := false
# MAINLINE_INCLUDE_WIFI_MODULE := false
$(call inherit-product, vendor/partner_modules/build/mainline_modules_low_ram.mk)
以上资料不完整,只是一个大概的配置。随着Android版本的更新,具体整合方式需要3PL提供最新的集成方式。
三、打补丁。
打补丁的话有2方面的补丁要打。一个是 3PL的提供的补丁 ,一个是 芯片供应商(高通)提供的补丁。你拥有的代码很可能已经打了好多补丁。需要查看补丁的日期。一般补丁是以月为单位进行打补丁的。过GMS认证,一般需要打到最近3个月补丁。优先打芯片供应商提供的补丁。供应商提供的补丁可以直接兼容本地代码,不需要费时间整合。
以上是GMS认证的工作方式。然后,就是搭建测试环境了。有的3PL为了提高信息的安全性。用户只能在3PL上的机器上跑测试。开明的3PL直接把搭建环境的文档和安装方式,打包发给你。你可以直接在自己公司的本地搭建即可。本地搭建,本地跑,本地验证。验证通过后发给3PL验证。CTS,VTS等测试。
项目经理的职责:
按说,应该没什么问题,项目可以很顺利的通过GMS认证。实际却是步步惊心。
1、我们和高通通过了,对方是否已经把MainLine集成到了源码里。高通反馈,已经集成成功了。
我们把3PL 提供的 GMS 和 高通提供的最新的 安全补丁全部搞定了。第一次模拟跑。跑下来不尽如意。有大量的错误。3PL说没集成MainLine。向高通反馈高通说要再确认下。后来,应该是没有集成进去,我们重新集成了下才OK。
2、譬如遇到一个具体的用例总是不过,我们向高通反馈,高通说解决不了,让3PL给你解决。向3PL反馈,3PL说不负责这个用例,需要高通提供解决方案。最后,是问题还是解决不了,把士气搞的很差。沟通问题,最后开了个联合大会,我方,3PL,高通三方来解决。并把对方的领导一起参加。
3、前期,验证问题效率太低了。需要发给3PL,3PL在深圳。来回压缩和上传,下载费了好多时间。后来和3PL沟通,通过沟通技巧,施展人格魅力,本地安装和部署一套测试平台。提高了开发效率。
4、GMS遇到的问题,具体什么思路都不知道。找了好多认识的人,相互帮忙,不停地请教。解决了若干问题。
5、通过对GMS认证的大量研究。我们通过EDLA的方式过GMS,并且把Camera给去掉。Camera的测试用例太庞大了,而且要求极严厉。很多参数,不是我们的Camera提供商可以解决的。通过大量的走访和调研,只要把Google Key搞定手,就可以为所欲为了。
6、把设备想办法变成EDLA很不好搞,除非是大屏的,或者是POS机,我们定义的是工业级别,防水,防摔,防尘,而且看起来很笨重。申请成EDLA非常合理。
7、3PL提供的支持不够给力,我们旁敲侧击让3PL的换掉了原来技术支持。新的技术支持给了我们非常全面的支持。我们便稳稳的过了GMS认证。
8、对于我们的设备已经有些落后了,譬如设备的Linux内核已经低于Google要求的了。原则上不能申请GMS了。但是,我们高通这个大腿啊,Google专门出了个文件,把高通的某款芯片给豁免了。类似我们还是可以用低版本的Linux内核来送测。对于几个问题,实在解决不了,我们解决不了,高通也解决不了。高通给Google打个招呼,Google就可以免掉。前提,是我们不会再额外付费,如果要付费解决,高通是很乐意的你付费,但是我们没那实力。
9、有个问题很严重,就是GPS测试的时候精度不行,但是我们在室外测试定位速度和响应时间,和精度都符合要求。经过大量的比对和测试后发现,如果用u-hub3.0的测试线就会影响GPS信号,用u-hub2.0的线就没问题了。GMS测试是一直需要设备和计算机通过数据线连接。换成u-hub2.0解决了这个问题。后期,咨询了专业的GPS天线厂家,才彻底解决了这个问题。

本地安装的一套测试环境。就装在笔记本上。笔记本要可以访问Google,需要使用VPN。自己在想,自己缺少Google的官方认证,如果可以给其他人跑测试,我这里收费合理一次500刀就可以了。不知道,是否有人是否需要?但是也只能测试工具部更新的情况下测试。现在都2025年底了,测试工具应该已经更新了。
个人提议Google应该把测试工具和测试方法开源公布出来,可以降低过GMS的费用。另外,Google应该是怕被破解了。
更多推荐



所有评论(0)