Android16 系统每月Google安全补丁导入说明

Android16 系统每月Google安全补丁导入说明

文章目录

一、前言

Android 每月安全补丁是 Google 为修复系统漏洞、提升设备安全性而发布的重要更新。

出口的Android大屏需要通过 EDLA 协议;EDLA协议里面就有Google补丁的要求;

Google的补丁是三个月的有效期;一般两-三个月左右更新一次。

如果没更新过Google补丁可能会感觉比较麻烦;

我之前只是导入过一些Git补丁,但是好像命令是不通用的。

「Google 官方的安卓安全补丁」和「日常开发的普通 Git 补丁」是完全不同维度的补丁,

从本质、内容、合规性、导入方式上都有天壤之别 ,而且二者的导入命令 / 流程完全不一样,甚至出错的后果也天差地别。

本文是Google 安全补丁的导入过程记录。有需要的可以收藏看看。

导入补丁前是必须要看看当前运行系统已经导入补丁的版本:

复制代码
console:/ # getprop | grep patch
[ro.build.version.security_patch]: 2025-11-05 //Google patch 的补丁版本
[ro.vendor.boot_security_patch]: 2025-11-05
[ro.vendor.build.security_patch]: 2025-11-05
console:/ # 

这个是为了确认当前系统需要更新多少个各版本的补丁;

这里是25年11的版本,26年2月前后就要更新补丁了,;

如果当前系统版本是24年12月的补丁就要到十二个月的补丁文件了,那就非常麻烦了。

二、下载和导入补丁过程

下载Google安全补丁是需要连接VPN网络和登录专用Google账号的。

1、补丁下载

Google 安全补丁的获取网址:

https://drive.google.com/drive/folders/1oR2iXLeT7T2hFRwtIH88y4QDpFLGheL9

安全补丁下载文件,如下图所示:

上面根目录下的XXX.patches.zip就是一般手机、平板用的patch;

如果是穿戴设备就用,WEAR里面的补丁;

如果是TV设备就用TV文件夹里面的补丁;

如果是车载设备就用AUTO里面的补丁;

点击"2025"前面的字符串可以选择年份时间。目前最新的有2026年1月的补丁了。

一般是一个月一个月的下载补丁文件,并且不下载其他不要的目的文件,否则会比较大;

如果需要下载整年的安全补丁文件也是可以的;一般是没啥必要的。

把补丁文件成功下载到本地后就可以执行下一步操作了。

2、解压查看一下补丁文件是否正常

下面是2025-12月的补丁解压后的文件夹:

压缩包解压后得到一个patch文件夹,里面包含不同Android版本的patch和patch对应的编号文件夹。

比如我这里的Android16系统,只需要导入android-16.0.0_r1里面的XXX.patch 文件。

下面的issue-mapping 里面包含了当前补丁的不同问题单编号和问题单的对策patch相关文件。

如下图所示issue-mapping 文件夹的内容:

打开某个问题单编号的文件可以看到里面可能对应一个或者多个patch文件:

如果测试EDLA的STS报错,并且提示缺少了某个PocBug_XXX数值的问题,

XXX一般就是指上面的问题单的编号,就可以这样寻找是哪里的文件修改导致异常。

上面可以看到patch是有在framework目录的,系统其他目录也是会有补丁文件,比如:package、vendor等重要目录;

下面是25-12月framework/base目录下的补丁,如下图所示:

使用文本编辑工具打开补丁某个补丁文件,可以看到里面有字段Bug: XXX, 这个XXX就是对应的问题单的编号。

每个月Google上面的补丁数量都是不定的,有时候只有一两个,有时候有上百个。

所以说有时候打补丁也是件麻烦事。特别是年底的补丁会多一点。

不同目录的补丁是针对不同目录的文件修改,下面看看不同目录的Google补丁如何打入吧。

3、具体补丁导入操作

补丁导入的思路一般是,把XXX.patch文件复制到对应的目录,然后执行命令导入就可以。

(1)单条补丁打入
①把补丁复制到系统源码目录下
②执行命令合入单条补丁

主要命令:

复制代码
git status . //查询当前目录的修改
patch -p1 < 0001XXX.patch //导入单条patch
git diff XXX //查看某个文件的修改

合入示例图:

git diff 看看到修改的文件内容;后续就可以git add XXX 上库,或者可以编译验证后再上库。

上面就是单条patch文件导入的情况,下面是某个目录多条补丁导入的情况。

看起来还是比较简单的,没导入过Google 安全补丁以为用以前的Git命令就能导入,

但是发现不行,导入失败,所以需要寻找另外的命令导入了。

(2)多条补丁导入
①把补丁文件复制到系统源码目录

非常多的patch 的情况,不一定要像上面那样导入到源码目录,可以新建一个目录,放入这些patch文件。

②执行命令合入多条补丁
复制代码
# 遍历补丁目录下所有.patch文件,逐个执行patch -p1导入,自动跳过已打过的补丁
for patch in *.patch; do patch -p1 --forward < $patch; done

导入多个补丁后的代码,git status 查看:

但是这样有个问题,就是修改后需要一个一个add 文件,或者git add *.Java之类的;

不能使用git add . --all 全部添加文件,否则会报XX.patch 也add进去。

另外目录执行导入多条补丁命令示例:

上面是在framework目录下面新建了一个base-patch文件夹,把安全补丁的base的对策放到里面了;

这样打入补丁后,就可以在framework/base 目录下执行git add . --all 命令了;

其实也可以把整个解压的patch目录文件放到release目录,然后 in 后面把目录写对就可以了;

导入patch的时候,有时候会有冲突或者其他警告,可以看看具体代码是否冲突;

Hunk是提醒需要关注的地方。上面就有四个Hunk的提醒。

(3)导入patch对策后Hunk提示说明:

比如上面补丁导入DisassociationProcessor.java出现了四个Hunk,说明有四处冲突的地方?

可以看到上面291行左右是有个四行修改,并且添加了注释,这个新的注释是不影响功能的;

如下图所示;

patch正常导入了,没有冲突代码。

所以Hunk 并不一定是冲突只是一个提醒。

Hunk(代码块) 的提示一般是因为实际代码有一定偏远,比如多了空行,多了注释,但是并不影响功能的情况;

所以看到Hunk是不一定需要修改的。

看到Hunk succeeded是不用修改的,看到Hunk FAILED是需要需要修改的
复制代码
Hunk #1 succeeded  XXX //这种是不用修改的;
...
Hunk #4 FAILED at XXX //这种事需要修改的;
冲突解决示例

如果冲突是什么样的呢?

下面是参考示例:

  • ①查看异常代码位置

比如我预先修改了DisassociationProcessor.java文件然后导入patch的结果,如下图所示:

可以看到也出现了Hunk提醒,并且有个FAILED的情况,并且生成了一个冲突文件.rej

打开对比工具查看DisassociationProcessor.java文件修改情况:

我预先修改了291行附近的代码,patch命令就无法识别和修改这段代码了;

并且只是修改的地方并未导入新对策,上面未修改的地方的对策是导入了的。

  • ②查看具体冲突代码

DisassociationProcessor.java.rej 查看内容:

上面是显示了无法导入对策的具体剩余代码;

这个还是比较智能的,并没有整个文件的对策都需要手动导入;

  • ③手动修改未合入代码

这种情况需要手动把.rej修改的内容合入到对应的代码文件中;之后把.rej文件删除即可。

注意既要包含补丁对策,也不能影响定制的功能逻辑。

上面是一种冲突解决的情况,因为冲突处理的比较少,所以只简单列举的一种情况。

(4)更新补丁版本

补丁打完后,要更新补丁版本,不然下次就不知道需要打入哪些版本了;

补丁版本定义在:build目录下的 RELEASE_PLATFORM_SECURITY_PATCH.textproto 文件

复制代码
+++ b/release/build/release/flag_values/bp2a/RELEASE_PLATFORM_SECURITY_PATCH.textproto
@@ -1,4 +1,4 @@
 name: "RELEASE_PLATFORM_SECURITY_PATCH"
 value {
-  string_value: "2025-09-05"
+  string_value: "2025-11-05"
 }

修改这里后,系统编译就会生成patch的pro属性,通过prop属性就可以查询到当前系统的patch版本。

所以如果没有运行环境,也是可以在源码中查看当前系统的Google安全补丁的版本的。

三、其他

1、Google安全补丁导入小结

复制代码
(1)查看当前系统的补丁版本,运行环境或者源码环境都可以查看;
(2)从官网下载需要导入的补丁压缩包;
(3)使用命令单个或者多个Google补丁导入,最后修改补丁版本文件;
(4)编译系统查看是否正常,之后就可以上库了;

导入很多补丁肯定会遇到一些问题,或者导致系统启动不了,这个就需要根据logcat日志分析了。

有时候导入不了补丁一般是因为定制化修改了这个文件导致,也有可能是前面某个月打的补丁漏了打入等情况。

2、 Google 补丁官网各目录 patches.zip 文件区别

从每月的补丁官网可以看到,根目录有补丁文件,但是WEAR、AUTO和TV也是有补丁文件;

下面是他们的区别理解:

(1)Google 补丁目录 各类patches 文件区别
目录位置 适用设备类型 补丁内容说明 核心特性
根目录 所有 Android 设备(手机、平板、基础 Android 设备) 包含 Android 平台核心安全补丁,覆盖 framework、libcore、media、kernel 等通用模块Android Open Source Project 必须应用,是所有 Android 设备安全更新的基础,用于声明标准安全补丁级别(如 2025-09-05)
WEAR 目录 Wear OS 智能手表 包含针对 Wear OS 的专属补丁,补充根目录补丁未覆盖的手表特定组件和功能Android Open Source Project 需与根目录补丁一起使用,解决手表特有的 UI、传感器、续航等安全问题Android Open Source Project
TV 目录 Android TV/Google TV 包含电视平台专属补丁,针对电视 UI、媒体播放、遥控器交互等特定模块 需与根目录补丁一起使用,解决电视特有的安全漏洞
AUTO 目录 Android Automotive OS (AAOS) 车载系统 包含车载系统专属补丁,针对汽车信息娱乐系统、车载网络、驾驶安全相关组件Android Open Source Project 需与根目录补丁一起使用,解决车载环境特有的安全挑战Android Open Source Project

所以一般的手机和平板设备都是使用根目录下的patch文件;

有些Tv大屏设备也是平板类型,需要用根目录的patch文件,而不是TV目录的patch,这个是需要和供应商沟通的;

(2)详细说明与技术细节
① 根目录 patches.zip 核心作用
  • 提供 Android 平台基础安全修复,是所有 Android 设备声明安全补丁级别的必要条件Android Open Source Project
  • 包含通用漏洞修复:如远程代码执行 (RCE)、权限提升 (EoP)、信息泄露 (ID) 等核心安全问题Android Open Source Project
  • 补丁内容来自 AOSP、上游 Linux 内核和 SOC 制造商提供的通用修复程序Android Open Source Project
  • 适用于所有运行标准 Android 系统的设备,包括智能手机、平板电脑等传统移动设备
② 设备特定目录 patches.zip 补充作用
  • 这些目录下的补丁是设备类型专属的安全修复,不包含在根目录通用补丁中Android Open Source Project

  • 针对特定设备类型的独特硬件、软件架构和使用场景设计Android Open Source Project

  • 例如:

    • WEAR 目录:解决 Wear OS 手表的小屏幕交互、健康传感器数据保护等问题Android Open Source Project
    • TV 目录:解决 Android TV 的大屏显示、媒体流传输、语音控制等安全问题
    • AUTO 目录:解决车载系统的车联网安全、驾驶数据保护、车载应用权限管理等问题Android Open Source Project

3、查询某个Google 安全补丁的问题单的修改

这个还是比较实用的,因为EDLA 有些报错会提示某个具体问题单的补丁未导致导致的问题;

这种情况就需要找到补丁修改的文件,导入补丁或者查看是哪些定制化修改影响到了补丁的逻辑。

查询补丁的网址入口(需要VPN网络):https://source.android.com/docs/security/bulletin

具体步骤示例如下:

比如查询上面25-12的问题 266433089 的修改代码的具体步骤。

(1)打开网址如下图所示:

(2)右上角搜索编号,显示关联的信息,如下图所示:

(3)点击进去能关联到具体某个月份的问题单编号列表,如下图所示:

Ctrl+F搜索当前界面的 266433089 数值,找到具体的位置。

(4)点击超链接,就可以看到修改的代码内容,如下图所示:

这里只能看到大致修改的文件,看不到具体的修改内容。

点击 "parent XXX [diff]"就可以看到diff的信息,如下图所示:

到这里就能看到某个具体的Google 安全补丁问题单的具体修改内容了。

当然你也可以下载所有的补丁,然后在里面进行遍历寻找补丁的问题单号,这种就比较麻烦了。

最后两步查看具体的问题单内容,好像要登录Google账号,才能看到内容。

4、 Google 安卓安全补丁 & 普通 Git 补丁 【核心区别 + 导入方式全差异】

Google 安全补丁 ≠ Git 补丁

Google 安全补丁是「安卓系统级的官方安全修复合集」,底层是基于 Git 管理的,

但它是特殊的、合规性的、高优先级的 Git 补丁包

而普通 Git 补丁是「通用代码级的增量修改包」,是 Git 工具的基础功能,适用于所有代码场景。

(1)核心重点:Google 安全补丁 VS 普通 Git 补丁 【全维度核心区别】(必看,9 大核心差异)

这是最关键的部分,所有差异一目了然 ,按优先级排序,也是你最关心的核心,99% 的疑问都能在这里解答,表格形式清晰易懂,适配 Android 源码开发场景:

对比维度 Google 安卓安全补丁 (Android Security Patch) 普通 Git 补丁 (Git Patch)
✅ 本质定位 安卓系统级、官方合规的「安全漏洞修复合集」 通用代码级、Git 工具的「增量 diff 修改包」
✅ 发布方 / 来源 唯一来源:Google 官方 AOSP 团队,部分芯片厂商(高通 / 联发科)会基于谷歌补丁适配 vendor 层补丁 无固定来源:开发者自己、同事、第三方,任何人都能生成
✅ 内容范围 内容固定且严格:只修复安全漏洞 + CVE 高危问题 + 系统核心稳定性 BUG,无功能新增 / 定制化修改,修复点都是谷歌官方确认的高危点 内容无任何限制:一行代码修改、功能新增、bug 修复、定制化需求、逻辑调整等,任意代码 diff 都能打包成 Git 补丁
✅ 格式规范 有严格的官方规范:本质是一系列有序的 Git Commit 合集 ,每个补丁都有唯一的 Commit ID、完整的提交信息(含 CVE 编号、修复说明),补丁包是.patch格式 + 有序的 commit 序列 无规范,2 种主流格式:① 纯 diff 补丁(git diff生成,无提交信息);② 带提交信息的 patch(git format-patch生成),都是.patch文本文件
✅ 合规性要求 强制合规,必须合入 :安卓设备要通过 CTS/GMS 认证、上架 Google Play、量产销售,必须合入到指定版本的安全补丁,否则认证失败、合规不通过 ❌ 无任何合规要求:只是代码同步的手段,合入与否完全看开发需求,无强制约束
✅ 版本绑定关系 强绑定:一个安全补丁只对应一个 Android 大版本(如 2026-01 补丁只适配 Android14,不能合入 Android13),跨版本合入会直接编译失败 / 系统崩溃 弱绑定:只要代码文件的上下文一致,一个 Git 补丁可以合入到不同分支 / 不同版本的源码,跨版本合入最多只是「冲突」,不会直接崩溃
✅ 优先级 最高优先级:安全补丁的合入优先级 > 所有功能补丁 / 定制补丁,谷歌要求安全补丁必须优先合入,且不能被后续修改覆盖 无固定优先级:按开发需求定优先级,功能补丁、bug 补丁的优先级按需调整
✅ 完整性 完整性极强:谷歌的安全补丁是「累积式」的,比如 2026-01 的补丁包含了 2025-12 及之前所有的安全修复,合入一个最新补丁 = 合入所有历史安全修复 完整性极弱:单个 Git 补丁只记录「单次修改的 diff」,多个修改需要多个补丁,无累积性
✅ 出错后果 后果严重:合入失败 / 合入不完整 → 系统存在安全漏洞、CTS/GMS 认证失败、设备无法量产;合入错误 → 系统启动失败、内核 panic、关键服务崩溃 后果轻微:合入失败 → 代码冲突,解决冲突即可;合入错误 → 代码逻辑异常,回滚补丁即可,不会导致系统级崩溃

上面看起来是可以导入最新的补丁就行,以前的补丁可以不用导入;

其实不是这样的,Android 的安全补丁是累计式的,必须足月打入,否则会错过一些补丁或者导致补丁打入失败;

上面只是说累计合入最新补丁后是会修复之前所有问题,比如累计导入26-1的补丁后,25-11的问题都是修复了的。

(2)普通Git补丁命令和Android patch安全补丁命令

①Git 补丁主要命令
复制代码
//方式1 :git apply 导入 patch
# 步骤1:进入要合入补丁的目录(Android源码任意模块,如frameworks/base、packages/apps/Settings)
cd aosp-root/packages/apps/Settings/

# 步骤2:【核心】导入补丁(推荐加--stat预览,--check检查冲突,无问题再apply)
git apply --stat xxx.patch # 预览:查看补丁会修改哪些文件、多少行代码,无执行修改
git apply --check xxx.patch # 检查:校验补丁是否有冲突,无输出=无冲突,可安全合入
git apply xxx.patch         # 执行:正式导入补丁,合入代码修改

# 步骤3:如果有冲突,添加参数忽略轻微冲突(日常开发常用)
git apply --ignore-space-change --ignore-whitespace xxx.patch # 忽略空格/换行符冲突
git apply --reject xxx.patch # 强制合入:能合入的部分自动合入,冲突的部分生成.rej文件,手动解决

# 步骤4:合入完成后,查看修改,手动提交
git status # 查看合入的修改
后续git commit ,git push ...


//方式2 :git am 导入
# 步骤1:进入目标目录
cd aosp-root/frameworks/base/

# 步骤2:【核心】导入补丁,自动生成提交记录
git am xxx.patch # 无冲突则直接合入,自动生成commit
git am --continue # 解决冲突后,继续合入
git am --abort    # 合入失败,回滚

# 合入完成后,git log能看到自动生成的提交记录,无需手动操作
后续git push ...


# 步骤1:查看要合入的Commit ID(复制短ID即可)
git log --oneline -n 10 # 输出示例:a1b2c3 修复Settings跳转卡死bug

# 步骤2:进入目标分支/目录,精准合入
git cherry-pick a1b2c3 # 合入单个Commit
git cherry-pick a1b2c3 d4e5f6 # 合入多个Commit,按顺序排列

# 步骤3:冲突解决
git cherry-pick --continue # 解决冲突后继续
git cherry-pick --abort    # 放弃合入

后续git push ...

上面的普通Git命令不适用于Google 的Patch文件!

使用git apply 是无法导入Google patch文件的, 如下图所示:

其他几种git的命令也是无法合入Google patch 文件的;

Google Patch安全补丁文件的导入需要使用另外的 patch 命令。

②Google Patch补丁主要命令
复制代码
patch -p1 < 0001XXX.patch //单条合入
for patch in *.patch; do patch -p1 --forward < $patch; done  //多条合入

好像是普通patch 是包含了commit的,而Google Patch是不包含Commit的,所以格式上是有差异的;

但是不管是哪种patch,用文本编辑工具都是可以打开查看内容的,可以查看具体哪个文件哪行的修改差异。

(3)终极总结(精华提炼,3 句话记住所有重点,无冗余)

✅ 核心区别(一句话)

Google 安卓安全补丁是 「官方的、强制的、合规的、系统级的 Git 补丁合集」

普通 Git 补丁是 「通用的、灵活的、无约束的、代码级的增量修改包」

✅ 导入方式(一句话)

Google 安全补丁:用 repo cherrypick 安全Tag``patch 官方补丁包追求完整性和合规性

普通 Git 补丁:用 git apply``git am``git cherry-pick追求灵活性和精准性

✅ 开发建议(一句话)

在 Android 源码开发中,先合入最新的 Google 安全补丁,再合入所有普通的功能 / 定制补丁

这是行业标准流程,既能保证系统安全合规,又能满足功能需求。

相关推荐
Dxy12393102162 小时前
深度解析 Elasticsearch 8.13.4 范围查询 DSL
大数据·elasticsearch
PNP Robotics2 小时前
PNP机器人分享具身操作策略和数据采集
大数据·人工智能·学习·机器人
企业智能研究3 小时前
数据治理是什么?数据治理对企业有什么价值
大数据·人工智能
Zilliz Planet3 小时前
官宣 | Milvus 2.6云上GA:三层存储降本85% 、速度快ES 4-7 倍,多数据类型支持
大数据·elasticsearch·搜索引擎·全文检索·milvus
Dxy12393102164 小时前
Elasticsearch 8.13.4 地理范围查询实战指南
大数据·elasticsearch·jenkins
alin、m4 小时前
银河麒麟(Kylin) - V10 SP1桌面操作系统ARM64编译 draw.io 画图工具
大数据·kylin·draw.io
天草二十六_简村人4 小时前
ES索引检索课程名称时,同时支持模糊搜索和精准搜索
大数据·后端·elasticsearch·搜索引擎·全文检索
sld1685 小时前
S2B2B系统:多级分销与渠道管理的数字化利器
大数据·人工智能
irizhao5 小时前
高质量数据集从0到1系统化建设步骤
大数据·人工智能