Android16 EDLA中GMS导入和更新
文章目录
- [Android16 EDLA中GMS导入和更新](#Android16 EDLA中GMS导入和更新)
一、前言
出口的Android大屏需要通过 EDLA 协议:
因为Google对于无电池设备、屏幕尺寸超过 18 英寸、固定安装的企业级设备是有要求的!
设备属性声明:必须在系统中声明 EDLA 专属属性
com.google.android.feature.ENTERPRISE_DEVICE - EDLA设备标识
com.google.android.feature.large_display - 18寸以上设备
com.google.android.feature.batteryless_device - 无电池设备
Android 版本基线 :当前最低要求为Android 12(随 Google 政策更新)
合作伙伴权限:需通过 Google 合作伙伴门户获取 GMS 包与认证权限。
Android EDLA认证是必须是要导入GMS的。
GMS的有效期通常为 3 个月 ,但是一般是半年或者一年才更新一次。
Google的补丁才是三个月的有效期;一般三个月左右更新一次。
GMS偏Google应用主要包含Google 应用商店等重要应用;
mainline包偏系统应用,可能会导致系统流程异常;
理论上GMS和mainline包要同时跟新,但是mainline包一般是一年更新一次;
本文主要介绍导入GMS和更新GMS的主要过程。
二、GMS导入
GMS内容包含vendor/partner_gms下面的apps、apps_go、etc、overlay、products目录的信息。
1、登录Google网址下载GMS
网址(登录下载GMS的账号好像是要和Google合作的账号,不能是普通注册的账号。):
合作伙伴门户(核心入口)网址:https://partner.android.com/
GMS 包官方下载页面:
https://docs.partner.android.com/gms/building/integrating/gms-download
partner_gms 源码仓库:
https://partner-android.googlesource.com/platform/vendor/partner_gms/
要登录,否则查看是打开失败的:

点击右上角登录一下专用的Google账号就可以查看进入网页内容了。
在里面找一下,大概在下面界面是最新的GMS内容:

比如上面那个gms-oem-B-16-202512.zip是最新的GMS包。
点击下载,大概6多个G,解压后大概10多G;
主要内容是partner_gms/apps下面的应用,占80%左右大小,有8个多G;
2、把GMS内容覆盖到release/vendor/partner_gms
第一次配置基本是全覆盖:

正常情况没啥报错就OK了。
三、GMS更新
第一次覆盖所有GMS版本后,后续不定时更新的时候,主要更新差异的文件就可以了。
下面是GMS更新过程示例。
1、add命令
rk 给的对比合入建议命令:
Android_SDK$ unzip -o gms-oem-B-16-202512.zip -d vendor/
Android_SDK/vendor/partner_gms$ find . -name "*x86*apk" | xargs rm -rf ## 删除32-bit应用
Android_SDK/vendor/partner_gms$ find . -name "*.apk" | xargs git add
Android_SDK/vendor/partner_gms$ git status ./ ## 查到本地修改差异,手动比对再合入
主要是把下载的压缩包复制到release目录;
然后解压覆盖 vendor/partner_gms ,删除不用的apk,添加差异的apk;
其他文件也是要看情况查看是否需要git add ,比如有些mk修改了不同的配置信息,也是需要导入的。
主要修改相关的目录和文件:

比如Android16 冲9月份更新到12月份的差异是不会很多的,但是如果差异一年以上基本都是要覆盖替换的。
听比较有经验的同事说,一般是对比合入主要apk就行,有些xml会有差异是没啥影响的,但是可以看看具体差异做决定。
上面操作看起来会比较复杂;也可以通过对比工具进行覆盖修改,这样比较直观。
2、Beyond Compare工具对比查看
可以明显看到具体某个文件的差异。如下图所示:

这个更直观,如果确认需要合入,可以右键覆盖修改;
需要注意的是如果是对比大小,Beyond Compare 有些文件会遗漏;
比如:partner_gms\products\gms_package_version.mk 大小是一样的;
只是年份和月份不同,这个是每次更新GMS必须要必须更新的文件;
所以如果是比较久没有更新的GMS,需要导入的文件会很多、git add 会比较久的。
当然你如果有绝对把握也是可以只更新核心作用的apk就行,但是一般不建议。
四、其他
1、小结
下载、更新GMS主要工作:
(1)登录Google专用账号,下载最新的GMS 资源,比较大正常都要两三个小时,网速差可能要一天了;
(2)放到系统代码中解压覆盖或使用对比工具对比覆盖;
(3)主要是对比APK文件,和一些必要的文件;
(4)编译测试系统和GMS 应用是否正常启动。
没更新过GMS的人可能觉得更新GMS很难很麻烦,更新过很多次GMS的人就会熟悉流程和步骤了;
更新GMS看起来比较简单,但是实际上也会有出现问题,比如更新后系统启动失败,某些apk打开失败等等。
我也是刚接触这个,所以更新GMS出现bug是正常的。
2、更新GMS需要注意的地方
下面几个地方是我这次更新GMS遇到的问题解决思路
(1)导入了 AndroidAutoStub 应用导致GMS很多应用报错
Android Auto车载的一套逻辑,一般情况是不需要导入 AndroidAutoStub 应用的,因为这个是车载系统里面的;
可以在vendor/partner_gms/products设置编译apk的gms.mk里面删除该应用名称,让它不参与编译
其实除了AndroidAutoStub,还有一些比如通讯录、SIM卡应用都是在大屏设备不需要的。
(2)系统系统启动后,打开很多GMS 失败
报错内容:dlopen failed: library "libmonochrome_64.so" not found
这个是可能是系统缓存,导致有些应用和资源没有重新编译;
解决办法是在编译前make clean或者删除out源码后重新编就可以;
(3)系统起不来
情况很多种,根据logcat | grep AndroidR 查看报错日志即可;
这里遇到过一种情况是private权限没有需要赋予,可能是新的apk需要这个权限;
在vendor/partner_gms/etc/permissions/privapp-permissions-google-product.xml 添加对应权限就可以了。
3、Android patch、补丁、GMS、mainline包的区别
先明确核心概念归属:「补丁」是泛称,Android Patch 是 Android 系统的官方标准化安全补丁,
后两者是 Google 为 Android 系统设计的独立模块化包(Mainline 属 AOSP 开源体系,GMS 属 Google 闭源授权体系)。
这是最核心的对比表,覆盖所有关键差异点,后续所有拆解均围绕此表展开,建议你在集成 / 更新时对照校验:
| 对比维度 | 泛称「补丁」 | Android Patch(安卓官方补丁) | Mainline 包(主线模块包) | GMS 包(Google 移动服务包) |
|---|---|---|---|---|
| 核心属性 | 对系统漏洞 / 问题的修复程序泛称(无标准) | Android 系统官方标准化修复包(有强制规范) | AOSP模块化系统核心组件包(开源) | Google闭源授权服务 / 应用包(需 EDLA/MADA 协议) |
| 归属方 | 厂商 / 第三方 / Google 均可能发布 | Google 官方(AOSP 团队) | Google 官方(AOSP 团队) | Google 官方(GMS 团队) |
| 存在形式 | 无固定形式(单 so / 脚本 / 增量包 / 完整包) | 固定形式:SMR(安全补丁)/MR(维护补丁) | 固定形式:APEX 格式(核心)+APK 格式 | 固定形式:目录化合集(priv-app/apps/lib64/etc 等) |
| 核心作用 | 修复任意系统问题(漏洞 / 功能 bug / 兼容性问题) | 修复 Android 系统底层漏洞 / 核心功能 bug,保障系统基线安全 | 提供 Android模块化系统核心组件 ,支持独立更新,不依赖完整 OTA | 提供 Google闭源生态服务 / 应用,是 GMS 认证核心,实现 Play 商店 / 账号 / Chrome 等功能 |
| 开源性 | 可闭源 / 开源 | 核心补丁开源(AOSP 提交代码) | 完全开源(AOSP 核心模块) | 完全闭源(仅授权设备可获取 / 集成) |
| EDLA 设备更新要求 | 无强制要求 | 季度强制更新(SMR 安全补丁),5 年安全支持 | 1. 与 GMS 包版本严格匹配2. 随 Android Patch 同步更新3. 支持 Play 系统独立更新 | 1. 月度更新 ,有效期90 天 (认证必用未过期版本)2. 与 Mainline 包版本严格匹配3. 季度安全补丁同步更新 |
| 认证关联 | 无直接关联 | 无最新补丁→CTS/GTS 测试失败,认证一票否决 | 版本不匹配 / 缺失→GTS 测试失败,认证一票否决 | 过期 / 版本不匹配 / 组件缺失→GMS 认证直接失败,EDLA 核心要求 |
| 典型内容 | 厂商自定义修复包、第三方漏洞补丁等 | 内核漏洞修复、系统库(bionic/ART)修复、SELinux 策略修复等 | Conscrypt(加密)、ART(运行时)、TimeZoneData(时区)、MediaCodec(媒体)等系统模块化组件 | PrebuiltGmsCore(Play 服务)、GooglePlayStore(商店)、Chrome、Trichrome 内核、AICoreStub 等闭源应用 / 服务 |
| 依赖关系 | 无固定依赖 | 依赖 Android 系统大版本(如 Android12 补丁仅适用于 12) | 依赖 Android 系统大版本(Android10 + 支持),与 GMS 包强绑定 | 依赖 Android 系统大版本 + Mainline 包强绑定,依赖 Android Patch 安全基线 |
| 部署目录 | 无固定目录 | 集成到/system//kernel等 |
vendor/partner_gms | prebuild、vendor/partner_modules |
简单的说就是patch 是芯片供应商给的,一般也叫tag;安全补丁、GMS、mainline包都是Google给的;
供应商的tag,一般是基于比较新系统补丁和GMS、mainline包进行优化的;