不改动系统分区获取 Root:Magisk 安装、OTA 保留与故障排查
【免费下载链接】MagiskThe Magic Mask for Android项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk
给解锁后的设备装系统级模块,常见做法是刷 ROM 或修改 /system。Magisk 的 Magisk Root 方案只修补 boot 分区,root 与模块都落在 /data 目录,系统其余部分保持原厂状态,OTA 更新也能按步骤保留 root。
它解决什么问题
Magisk 是一套面向 Android 6.0 及以上设备的开源定制工具集(支持 MagiskSU、模块、boot 镜像处理与 Zygisk),核心思路是"绕过系统分区而不是改写它"。与直接覆盖 /system 或刷自定义 ROM 的传统方案相比:
- 破坏面小:只有 boot(或 recovery)分区被改写,只读分区保持原厂内容,出问题时可以刷回原镜像恢复,不需要整包重刷。
- 模块可独立移除:模块存放在
/data/adb/modules,禁用或卸载模块不影响系统本身,重装也不残留。 - 权限来源独立:root 由 Magisk 自带的
magiskd守护进程统一签发,而不是依赖第三方超级用户应用,权限可以按应用粒度控制。
上手路径:从 boot 镜像修补到刷入
前置条件
- 设备 bootloader 已解锁(解锁会清空数据,先备份)
- 电脑上可用
adb与fastboot - 手头有设备官方固件,能从中提取
boot.img(存在init_boot.img时提取它) - 安装最新版 Magisk 应用
判断该修补哪个镜像
打开 Magisk 应用首页,查看 Magisk 卡片中的Ramdisk字段,它决定修补目标:
| 首页 Ramdisk 显示 | 需要修补的镜像 | 刷入分区 |
|---|---|---|
| Yes | boot.img(有init_boot.img则用它) | boot / init_boot |
| No | recovery.img | recovery,且每次开机需走 recovery 键组合激活 |
boot 镜像修补与刷入步骤
- 把镜像文件复制到手机存储。
- 在 Magisk 应用点Install → Select and Patch a File,选中该镜像开始修补。修补必须在目标设备本机上进行,不要使用他人共享的修补产物。
- 修补完成后把新镜像拉回电脑并刷入:
adb pull /sdcard/Download/magisk_patched_*.img fastboot flash boot magisk_patched_*.img fastboot reboot- 开机后按应用提示完成环境修复并再次重启,首页 Installed 显示版本号即安装成功。后续升级 Magisk 直接在应用内用 Direct Install 完成,无需重走修补流程。
核心能力与典型用法
按应用管理 root 权限
权限管理解决"哪些应用能用 su、用了多久"的问题。Magisk 把每个应用的 su 请求记录在日志中,可以逐条批准、拒绝或设置自动允许。例如:给终端类应用设为自动允许以便日常使用,对陌生应用的请求逐次确认,并在应用内查看完整的授权历史。
用模块扩展只读分区
模块机制让脚本与文件在不改 /system 的情况下生效,适合"加功能"而不是"改系统"。一个模块通常包含module.prop(描述信息)和两个可选脚本:post-fs-data.sh(/data 挂载后执行)与service.sh(开机服务阶段执行)。例如:用一个模块在开机时向系统注入自定义脚本或二进制文件;另一个模块定期清理日志。模块以 zip 形式在应用内安装,禁用后重启即完全移除。
处理 root 检测
检测问题要分两层理解:Magisk 本身已不再内置隐藏功能,是否被检测到取决于设备与应用两端的实现。常见做法是开启首页的Zygisk选项,再安装提供隐藏能力的 Zygisk 类模块,把银行、支付等应用加入其排除列表。如果某应用仍报检测到 root,先确认 Zygisk 状态为 Yes,再核对该应用是否在排除列表中。
维护与排错
OTA 更新后保留 Root
先做一项前置设置:在开发者选项中关闭"自动系统更新",避免系统在未确认时直接安装更新。
A/B 分区设备(流程可保留 root):
- Magisk 应用 → Uninstall →Restore Images,把 Magisk 改过的分区还原为原厂状态,用于通过更新前的完整性校验。此步之后先不要重启。
- 正常安装 OTA,等"正在安装更新"和"正在优化设备"两个阶段都完成,不要点"立即重启"。
- Magisk 应用 → Install →Install to Inactive Slot,把 root 装进更新后的槽位。
- 回到系统更新页面点重启,进入新槽位,root 即恢复。
非 A/B 设备:没有可靠的保留方案。按官方机制安装 OTA 后设备回到未 root 状态,需要连电脑重新走一遍镜像修补流程。
模块导致无法开机的排查
- 现象:装完新模块后设备卡在开机动画,反复重启。
- 排查:连电脑执行
adb devices确认设备是否还能被识别;能识别说明系统内核尚可响应。 - 处理:可执行
adb shell magisk --remove-modules一次性移除全部模块并自动重启,之后再逐个装回定位问题模块。若 USB 调试已关闭,在开机动画出现前数秒按住音量减键进入 Magisk 安全模式,模块会被禁用,进系统后在应用里卸载嫌疑模块。
更新后应用显示 Installed = N/A
- 现象:Magisk 版本号显示 N/A,但
su实际仍可用。 - 排查:多发生在曾使用"隐藏 Magisk 应用"功能后,系统里残留了一个伪装成 Settings 的 stub 应用,与完整应用冲突。
- 处理:在系统设置 → 应用中查找名为 Settings(或隐藏时自定义的名称)的残留应用并卸载;仍异常则卸载并重装与二进制版本一致的完整 Magisk 应用。
应用报告检测到 root
- 现象:特定应用(常见为支付、游戏)启动时提示 root 或环境异常。
- 排查:确认首页 Zygisk 是否为 Yes;未开启 Zygisk 时,大多数隐藏类模块不生效。
- 处理:开启 Zygisk 并重启,安装提供 DenyList 能力的模块,将该应用加入排除列表后重新测试。
进阶方向与资源
模块开发方面,从最小模块(一个module.prop加一个脚本)起步即可跑通;需要 hook 应用进程时使用 Zygisk 模块形式,参考 Zygisk 模块示例 对应的 upstream 样例仓库。系统级定制(SELinux 策略、属性修改)可直接调用resetprop与magiskpolicy工具,细节见 docs/tools.md。
仓库内相关文档与源码:
- 安装全流程:docs/install.md
- OTA 指南:docs/ota.md
- 高频问题:docs/faq.md
- 内部机制(启动流程、目录结构、SELinux):docs/details.md
- boot 镜像工具 magiskboot 源码:native/boot/
- root 守护进程实现:native/core/su/
- Zygisk 实现:native/core/zygisk/
下一步建议:先在模拟器或备用机上完整走一遍修补与刷入流程,验证magisk -v输出正常后再操作主力设备。安装完成后立刻按 A/B 流程演练一次 Restore Images,熟悉更新前操作。遇到问题优先对照 docs/faq.md 中对应条目收集日志再处理。
【免费下载链接】MagiskThe Magic Mask for Android项目地址: https://gitcode.com/GitHub_Trending/ma/Magisk
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考