Android16 系统每月Google安全补丁导入说明
文章目录
- [Android16 系统每月Google安全补丁导入说明](#Android16 系统每月Google安全补丁导入说明)
-
- 一、前言
- 二、下载和导入补丁过程
-
- 1、补丁下载
- 2、解压查看一下补丁文件是否正常
- 3、具体补丁导入操作
-
- (1)单条补丁打入
- (2)多条补丁导入
- (3)导入patch对策后Hunk提示说明:
-
-
- [看到Hunk succeeded是不用修改的,看到Hunk FAILED是需要需要修改的](#看到Hunk succeeded是不用修改的,看到Hunk FAILED是需要需要修改的)
- 冲突解决示例
-
- (4)更新补丁版本
- 三、其他
-
- 1、Google安全补丁导入小结
- [2、 Google 补丁官网各目录 patches.zip 文件区别](#2、 Google 补丁官网各目录 patches.zip 文件区别)
-
- [(1)Google 补丁目录 各类patches 文件区别](#(1)Google 补丁目录 各类patches 文件区别)
- (2)详细说明与技术细节
-
- [① 根目录 patches.zip 核心作用](#① 根目录 patches.zip 核心作用)
- [② 设备特定目录 patches.zip 补充作用](#② 设备特定目录 patches.zip 补充作用)
- [3、查询某个Google 安全补丁的问题单的修改](#3、查询某个Google 安全补丁的问题单的修改)
- [4、 Google 安卓安全补丁 & 普通 Git 补丁 【核心区别 + 导入方式全差异】](#4、 Google 安卓安全补丁 & 普通 Git 补丁 【核心区别 + 导入方式全差异】)
-
- [(1)核心重点:Google 安全补丁 VS 普通 Git 补丁 【全维度核心区别】(必看,9 大核心差异)](#(1)核心重点:Google 安全补丁 VS 普通 Git 补丁 【全维度核心区别】(必看,9 大核心差异))
- [(2)普通Git补丁命令和Android patch安全补丁命令](#(2)普通Git补丁命令和Android patch安全补丁命令)
-
- [①Git 补丁主要命令](#①Git 补丁主要命令)
- [②Google Patch补丁主要命令](#②Google Patch补丁主要命令)
- [(3)终极总结(精华提炼,3 句话记住所有重点,无冗余)](#(3)终极总结(精华提炼,3 句话记住所有重点,无冗余))
- [✅ 核心区别(一句话)](#✅ 核心区别(一句话))
- [✅ 导入方式(一句话)](#✅ 导入方式(一句话))
- [✅ 开发建议(一句话)](#✅ 开发建议(一句话))
一、前言
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 安全补丁,再合入所有普通的功能 / 定制补丁,
这是行业标准流程,既能保证系统安全合规,又能满足功能需求。