Magisk模块开发教程
模块基本结构
首先下载Demo模板:https://lesskiss.lanzoum.com/b00rmcg8b 密码:1kkp,下载后解压
模板文件分为3个文件夹和3个文件

文件夹:
- common:里面放置附加东西
- 包含两个sh脚本文件,在里面加入内容,开机会自动执行
common/system.prop文件:映射/system/build.prop文件
当模块中system和系统system分区文件同时存在时候
模块中的文件优先使用,当common/system.prop里面内容和/system/build.prop存在时候,模块优先使用common/system.prop内容
- META-INF:签名刷机脚本,刷机包和apk文件都有的,支持shell部分命令
META-INF/com/google/android/update-binary:刷机脚本META-INF/com/google/android/updater-script:辅助脚本
- system:映射
system分区
文件:
- customize.sh:模块刷入配置脚本,支持shell命令
- module.prop:模块基本信息,就好像一个apk,有他的版本号,名称,ID,模块就是这个
module.prop文件详解

id
控制模块的最终生成文件夹方案,也是唯一识别码,同ID会覆盖,也控制其映射目录(在APP中对应包名)

安装路径:/sbin/.magisk/img/+id
开机映射路径:Magisk/+id
注意事项:id必须英文,如果使用中文/其他,那么最后安装完毕后就是这样,并且无法卸载,因为此id控制其映射路径,而此时id和映射文件夹已经不符合了,所以你的卸载只是卸载一个不存在的东西,这也就是为何有的模块就是无法卸载的原因

id不允许空格存在,例如:xiao baiyang,那么最后读取的id是xiao baiyang,而文件夹是xiao/xiaobaiyang,上面已经说了,id其文件夹,所以最终不一致,也会导致无法读取,正确修改xiao-baiyang(真要分开可以用-连起来)
name
模块的名字

version
版本号
versionCode
版本代号,数字类型(只允许非0正整数),如果你的模块需要在仓库或其他地方更新,那么此代号就是判断模块是否最新版的依据,如果仓库数字大于本地模块数字,提示更新
author
作者的大名,版权问题,不能草率
description
描述模块的作用,这什么模块?看了描述我懂了
minMagisk=1600
v16版本后强制需要的,没有此代码模块无法刷入,数字类型,只允许非0正整数,表示模块最低兼容版本。模块最低兼容版本计算minMagisk/100=最低兼容,如果我想让模块兼容17.3版本,那么举例:17.3*100=1730,填1730就行
总结

1 | id=包名 |
模块的维护与安装
从Maisk-v7-v19,几个比较特殊的版本(稳定版)
- V12.00:最后一个支持在SU的存在下刷入,最后一个不验证内核的版本,可以共存也可以取代SU,管理器版本必须为4.3.1才能识别状态,利用此版本,可以将Magisk安装在副系统/官改包上
- V16.00:最后一个将模块直接挂载在根目录
/Magisk下,方便开发者和其他APP调用,也是兼容性比较好的一个,可惜,最高支持安卓7.12 - V17.1/V17.2:最后一个广播机制比较好的玩意,兼容性也比较高,不会出现授权弹窗问题
- V18.1:最后一个拥有
Magisk.img的分区,总体来说,授权不灵敏,不如17.2。如果你的Magisk管理器经常不弹出授权,可以尝试将Magisk锁后台。如果您有强迫症,忍受不了后台运行的APP,可以尝试将管理器固化,部分机型需要关闭省电优化模式
刷入模块出现的问题
模块的刷入过程
- 选择文件-将文件URL信息转化为完整路径并复制到缓存目录暂时改名为
install.zip - 解压验证
install.zip内容文件,判断是否是magisk模块(通过判断META-INF/com/google/android/updater-script文件中是否含有#MAGISK关键字) - 以
META-INF/com/google/android/update-binary为执行脚本刷入install.zip文件 - 将解压后的文件复制到镜像分区里并创建
module.prop为信息模块,删除缓存文件
验证并提示刷入成功/失败
第一种常见问题:Magisk一选模块闪退,由于Magisk调用原生文件管理器,所以对于国内魔改系统,兼容性有很大的问题,推荐不要在最近和下载两个地方选择文件

第二种常见问题:刷入模块出现卡死
答:复制文件需要耗时间,解压文件需要耗时间,所以导致了延迟现象,耐心等待即可
常见错误日志代码
错误日志代码:Copying zip to temp directory
答: 顾名思义,复制文件错误,也就是刷入模块第一步骤错误,解决方法,重启手机试试,可能缓存被占用了导致文件无法复制Invalid Uri
答:路径出错,顾名思义,模块文件的路径没取到Cannot copy to cache,cache分区出问题了,重启试试解决Unzip error
答:解压模块出问题了,重启试试解决问题This zip is not a Magisk Module!
答:这个zip文件不是模块,提示很清楚了Please install Magisk v16.0+!
答:提示你的magisk要升级16.0才能刷入本模块,如果你的magisk已经是16.0了,那么可以推断,magisk分区异常了,解决方法,重刷一遍magisk解决,如果几个模块无法刷入,那么是模块问题,如果所有模块无法刷入,各种方法都试过了,可以尝试修改magisk核心文件/sbin/.magisk/busybox
答:这里都是magisk核心文件工具包,你可以用其他busybox工具替换了它,如果安装了busybox工具,可以尝试卸载该模块,避免冲突
之前可以刷入模块,现在死活刷不上
如果是之前可以刷入模块,现在死活刷不上,那么就是部分模块引起的异常
删除/data/adb整个文件夹并重启手机两次
维护
经常很多人模块安装50多个,觉的模块越多越好,其实这种就好比计算1+1=?三个模块同样的作用,结果就是123,可是正确答案只有一个,模块多了反而容易引起异常,假设我的手机开机速度是50秒,最慢开机速度是120秒,那么我安装50个模块也要在这120秒内加载完,就像考试,一个小时的考试给你三十分钟,势必有做不完的(不生效),而且模块在开机第二屏之前必须全部挂载好,所以多了就会容易引起不必要的问题。例如,重启XP框架掉了,重启我连magisk都掉了,why,我挂载不过来啊,系统给的时间不够啊
模块救砖
rec下:magisk18.1以下使用mm/可视化救砖,这是因为关机状态下无法访问magisk模块分区,只能用终端命令挂载
18.2以上直接rec进入文件管理器,找到/data/adb/Models,里面文件夹如图

ID就是文件夹名称,卸载就是直接删除,特别方便
玄学优化
机型模块制作
伪装一个机型:我们需要修改,品牌、制造商、型号、设备代号(可不改)

下面构建一个小米8UD机型伪装,百度获取小米8UD的信息,修改模块文件:common/system.prop即可!

修改MIUI版本号及信息


更多玄学优化可以百度system.prop修改,然后放在模块下面即可!
各路径修改方法不一样
magisk模块在处理路径遵循:
只允许映射修改的系统路径,以下特殊路径使用特殊方法
系统路径:/system_ext/app(源路径)=/system/system_ext/app(模块路径)
系统路径:/system_ext(源路径)=/system/system_ext(模块路径)
系统路径:/product(源路径)=/system/product(模块路径)
系统路径:/vendor(源路径)=/system/vendor(模块路径)
只允许映射修改的系统路径,但是增量生成,使用模块文件直接添加属性:system.prop
系统路径:/system/build.prop
无法映射修改的系统路径,以下特殊路径使用(shell脚本改)
执行脚本写入模块文件:service.sh;post-fs-data.sh
系统路径:/proc
系统路径:/sys
无法映射修改的用户路径,以下特殊路径使用(shell脚本改)
执行脚本写入模块文件:service.sh;post-fs-data.sh
用户路径:/storage/emulated/0/Android(源路径)=/data/media/0/Android(处理模块脚本路径)
用户路径:/storage/emulated/(源路径)=/data/media/(处理模块脚本路径)