本文档详细介绍了 Magisk 如何在系统通过 OTA(空中下载)更新后保持其在设备上的存在。内容涵盖了 Magisk 用于应对系统更新的机制,包括适用于自定义 ROM 的自动化方法以及适用于原生 Android 更新的程序。
有关初始启动镜像打补丁的信息,请参阅 启动镜像打补丁。
当设备接收到系统更新时,启动镜像(Magisk 驻留之处)通常会被新的原生版本替换。如果没有干预,这将导致 Magisk 从系统中移除。Magisk 实施了两种主要策略来应对这些更新:
来源:scripts/addon.d.sh1-129 scripts/util_functions.sh530-541
现代 Android 设备通常使用 A/B 分区方案来实现无缝更新。Magisk 的 OTA 续存机制同时支持传统分区和 A/B 分区设备。
来源:scripts/util_functions.sh274-305 scripts/addon.d.sh100-107
对于支持 addon.d 框架的自定义 ROM,Magisk 提供了一个自动续存脚本。该脚本安装到 /system/addon.d/99-magisk.sh,并在 ROM 更新过程中执行。
addon.d 框架在更新过程的不同阶段调用特定的函数:
| 功能 | 目的 | 时间点 |
|---|---|---|
pre-backup | 从现有分区保存配置 | 备份阶段之前 |
backup | Magisk 中无操作(在其他地方处理) | 备份阶段期间 |
pre-restore | Magisk 中无操作 | 恢复阶段之前 |
post-restore | 系统更新后重新安装 Magisk | 系统恢复后 |
来源:scripts/addon.d.sh128-168 scripts/flash_script.sh80-88
对于采用 A/B 分区方案的设备,Magisk 必须识别并适应插槽切换。
来源:scripts/util_functions.sh274-282 scripts/addon.d.sh100-107
Magisk 必须在更新后识别正确的启动镜像进行打补丁。
来源:scripts/util_functions.sh370-392
Magisk 维护原始启动镜像的备份,以便在需要时进行 OTA 续存和恢复。
来源:scripts/util_functions.sh532-587
当 Magisk 以可刷写模式安装时,如果系统支持,它会自动安装 addon.d 脚本。
来源:scripts/flash_script.sh80-88
OTA 更新后重新安装 Magisk 的核心功能。
来源:scripts/util_functions.sh419-441
当 addon.d 脚本未能找到 Magisk 二进制文件时(通常由于数据被擦除或未解密),它会显示错误消息以指导用户。
这种全面的 OTA 续存方法确保用户在设备接收系统更新时,无论设备采用何种更新机制或分区方案,都能保持 root 访问权限和 Magisk 功能。
来源:scripts/addon.d.sh1-169 scripts/util_functions.sh419-441 scripts/util_functions.sh532-587
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(c8a16b)