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包进行优化的;

相关推荐
chlk1231 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
舒一笑1 天前
Ubuntu系统安装CodeX出现问题
linux·后端
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
改一下配置文件1 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读