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

相关推荐
Huanzhi_Lin2 小时前
验证apk签名
android·apk签名·apksigner
li星野2 小时前
OpenCV4X学习—图像平滑、几何变换
图像处理·学习·计算机视觉
世人万千丶2 小时前
鸿蒙跨端框架 Flutter 学习 Day 3:性能进阶——Iterable 延迟加载与计算流的智慧
学习·flutter·ui·华为·harmonyos·鸿蒙·鸿蒙系统
独自破碎E2 小时前
【大顶堆+小顶堆】数据流中的中位数
android
haluhalu.2 小时前
深入理解Linux信号机制:中断、用户态与内核态
linux·运维·服务器
二哈喇子!2 小时前
Linux系统配置jdk
linux·运维·服务器·jdk
dddddppppp1232 小时前
linux 块设备驱动程序之helloworld
linux·服务器·网络
得一录3 小时前
Android AIDL 在智能体和IOT设备中的使用
android·人工智能·物联网·aigc
一颗青果3 小时前
DNS | ICMP
linux·网络