本指南面向想要使用 Magisk 的开发者,无论是为 Magisk 本身做贡献,开发模块,还是构建自定义 Magisk 发行版。它从开发者的角度概述了 Magisk 的架构,解释了构建系统,并详细说明了如何开始开发。
有关创建 Magisk 模块的详细信息,请参阅 模块开发。有关完整的构建说明,请参阅 从源码构建。
在开发 Magisk 之前,您需要设置好您的环境。
Magisk 可以在以下平台上构建:
ANDROID_HOME:设置为您的 Android SDK 文件夹ANDROID_STUDIO:可选,用于使用捆绑的 JDK来源:docs/build.md4-26 build.gradle.kts1-8 buildSrc/build.gradle.kts1-35
Magisk 使用 Python 构建脚本和 Gradle 的组合作为其构建系统。理解这个架构对于开发者至关重要。
magisk.versionCode=28103
magisk.stubVersion=40
magisk.ondkVersion=r29.1
来源:buildSrc/src/main/java/Setup.kt1-497 gradle.properties1-35 docs/build.md28-40
Magisk 模块使开发者能够自定义 Android 系统。理解它们的结构和生命周期至关重要。
Magisk 模块是 /data/adb/modules 下的一个文件夹,具有以下结构:
/data/adb/modules/$MODID/
├── module.prop # Module metadata
├── system/ # Files to be mounted
├── zygisk/ # Zygisk native libraries (optional)
├── post-fs-data.sh # Post-fs-data stage script (optional)
├── service.sh # Late start service script (optional)
├── system.prop # System properties (optional)
├── sepolicy.rule # Custom SEPolicy rules (optional)
├── uninstall.sh # Uninstallation script (optional)
└── skip_mount # Flag to disable mounting (optional)
来源:docs/guides.md16-117 docs/guides.md141-242
理解 Magisk 的原生组件对于开发核心功能至关重要。
magisk:主二进制文件,具有多种功能
magiskinit:启动初始化
magiskboot:启动镜像操作
magiskpolicy:SELinux 策略修改
来源:docs/tools.md1-234 native/build.gradle.kts1-33
理解 Magisk 的启动流程对于开发模块和集成至关重要。
Magisk 以两种不同的模式执行脚本:
post-fs-data 模式 (阻塞式)
/data/adb/post-fs-data.d/ 或模块的 post-fs-data.shlate_start service 模式 (非阻塞式)
/data/adb/service.d/ 或模块的 service.sh所有脚本都在 Magisk 的 BusyBox ash shell 中运行,并启用“独立模式”。
来源:docs/guides.md243-269 docs/details.md76-95
Magisk 修补 SELinux 策略以启用 root 功能
Magisk SELinux 域:
magisk 域 (permissive)magisk_file 类型 (所有域可访问)magisk_client 用于使用 root 的进程模块中的 SEPolicy:
sepolicy.rule 文件中添加自定义规则magiskpolicy 语法resetprop 工具允许进行高级属性操作
特性:
ro.*) 属性在模块中使用:
system.prop 文件进行简单修改resetprop 命令处理高级情况来源:docs/details.md96-113 docs/tools.md306-317
调试模式:
./build.py debug日志位置:
/cache/magisk.log 或 /data/cache/magisk.log模拟器测试:
./build.py emulator <APK路径> 在模拟器中进行测试模块开发:
构建问题:
来源:docs/faq.md1-30 docs/build.md75-81
为 Magisk 做贡献时
代码质量:
Pull requests:
翻译贡献:
app/core/src/main/res/values/strings.xmlapp/stub/src/main/res/values/strings.xml