本页面介绍了Magisk的高层架构和核心系统。它概述了Magisk的组件如何协同工作,为Android设备提供root权限、系统修改和模块支持。有关特定子系统的详细信息,请参阅相应页面:启动过程、模块系统和文件系统操作。
Magisk采用一种专门的架构,允许它在不修改实际系统文件的情况下修改Android系统。相反,它结合了启动镜像打补丁、init劫持和挂载命名空间,以创建一个“无系统”的环境,通过挂载操作在运行时进行修改。
来源:native/src/core/lib.rs24-44 native/src/core/daemon.cpp15-25 native/src/init/init.hpp1-41
Magisk的架构包含多个相互依赖的组件,共同提供其功能
Magisk守护进程(magiskd)是启动后管理所有Magisk功能的中心组件。它在Rust中实现为单例,并协调所有其他系统。
该守护进程在Android启动过程中启动并保持运行,以
来源:native/src/core/daemon.rs14-220 native/src/core/daemon.cpp15-492
magiskinit是启动时第一个运行的Magisk组件。它取代了原始的Android init并
来源:native/src/init/init.hpp1-41 native/src/init/lib.rs1-124 native/src/init/selinux.rs15-122
管理应用程序的超级用户访问请求,实施一个权限系统来决定哪些应用程序可以获得root权限
来源:native/src/core/su/db.rs1-134 native/src/core/su/daemon.rs1-300 native/src/core/su/connect.cpp1-234
拒绝列表(以前称为MagiskHide)可防止选定的应用程序检测到Magisk的存在
来源:native/src/core/deny/utils.cpp18-441
Zygisk是Magisk的代码注入框架,通过Zygote进程注入应用程序进程
来源:native/src/core/zygisk/entry.cpp1-121
Magisk 的初始化遵循 Android 启动过程中的精心编排的顺序
来源:native/src/core/daemon.rs182-214 native/src/init/mount.cpp146-211 native/src/init/rootdir.cpp46-148
模块系统允许通过标准化格式扩展Magisk的自定义修改
模块被组织为目录,其中包含决定其行为的特定文件
| 文件 | 目的 |
|---|---|
module.prop | 包含模块的元数据 |
system.prop | 要设置的系统属性 |
service.sh | 在late_start阶段执行的脚本 |
post-fs-data.sh | 在post-fs-data阶段执行的脚本 |
uninstall.sh | 卸载模块时执行的脚本 |
system/ | 包含要覆盖挂载到system目录下的文件 |
zygisk/ | 包含Zygisk原生库的目录 |
来源:native/src/core/module.cpp28-130 native/src/core/module.cpp280-324 native/src/core/node.hpp30-260
Magisk实现了一个复杂的挂载系统,可以在不修改实际文件的情况下修改Android文件系统
挂载系统使用多种节点类型来表示不同的文件系统元素
tmpfs_node:创建一个可写的tmpfs覆盖层module_node:表示要挂载的模块文件root_node:分区的节点树根节点magisk_node:Magisk二进制文件的特殊节点来源:native/src/core/module.cpp127-186 native/src/base/mount.rs1-78
Magisk维护一个SQLite数据库来存储各种设置和状态信息
数据库存储
来源:native/src/core/db.rs1-360 native/src/core/sqlite.cpp1-100
Magisk 组件通过各种 IPC 机制相互以及与客户端应用程序通信。
来源:native/src/core/socket.rs1-258 native/src/core/daemon.cpp401-440
Magisk 的架构设计充分考虑了模块化、灵活性和安全性。无系统(Systemless)的方法允许它在不修改实际系统文件的情况下修改 Android 的行为,与传统的 root 解决方案相比,它更安全且更易于更新。各个组件协同工作,为 root 访问、系统修改和模块支持提供完整的解决方案。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(c8a16b)