模块基本结构

首先下载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,那么最后读取的idxiao 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
2
3
4
5
6
7
id=包名
version=版本号
versionCode=版本代号
name=APP名称
author=无
description=无
minMagisk=Sdk最小兼容版本

模块的维护与安装

从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,可以尝试将管理器固化,部分机型需要关闭省电优化模式

刷入模块出现的问题

模块的刷入过程

  1. 选择文件-将文件URL信息转化为完整路径并复制到缓存目录暂时改名为install.zip
  2. 解压验证install.zip内容文件,判断是否是magisk模块(通过判断META-INF/com/google/android/updater-script文件中是否含有#MAGISK关键字)
  3. META-INF/com/google/android/update-binary为执行脚本刷入install.zip文件
  4. 将解压后的文件复制到镜像分区里并创建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.shpost-fs-data.sh
系统路径:/proc
系统路径:/sys

无法映射修改的用户路径,以下特殊路径使用(shell脚本改)
执行脚本写入模块文件:service.shpost-fs-data.sh
用户路径:/storage/emulated/0/Android(源路径)=/data/media/0/Android(处理模块脚本路径)
用户路径:/storage/emulated/(源路径)=/data/media/(处理模块脚本路径)