从零开始的Magisk模块制作教程

释放双眼,带上耳机,听听看~!

前言:这是一篇面向零基础小白的基础向教程,Let's jam!警告:本文所有涉及文本编辑的操作建议使用代码编辑器完成(Windows推荐使用Notepad++,Android推荐使用QuickEdit)。切忌使用Windows的记事本和写字板,这会导致模块安装失败!第一部分-下载安装模板&完善模块信息1、打开magisk-module-installer(移动端用户请切换到桌面版网页),依次点击“Clone or download”、“Download ZIP”即可下载Magisk模块的安装模板(也可以点击这里直接下载)

从零开始的Magisk模块制作教程插图
2、解压下载下来的magisk-module-installer-master.zip,你会看到如下文件
从零开始的Magisk模块制作教程插图(1)
其中,以下文件可以删除

  • .gitattributes无用,可以删掉
  • 如果你想将你做的模块提交到Magisk-Modules-Repo(即Magisk官方的模块存储库)的话,那么需要修改README.md,否则可以删掉
  • system文件夹里有一个placeholder,这是一个无用的文件,可以删掉

3、打开META-INF/com/google/android/update-binary,你会发现里面写了一些文字说明。简单的说,如果你将模块提交到了Magisk-Modules-Repo,那么就可以跳过这步(因为Magisk Manager在下载模块时会自动完成这步的操作),否则请用module_installer.sh替换update-binary原本的内容。以下是完整的操作说明:I.打开这个页面后点击Raw(或者点击这个直达链接

从零开始的Magisk模块制作教程插图(2)
II.复制全文 III.打开META-INF/com/google/android/update-binary,将你刚刚复制的内容替换这个文件里原本的内容 IV.保存文件 4、打开module.prop,你会看到如下内容
从零开始的Magisk模块制作教程插图(3)

  • id即模块ID,如果说module.prop是模块的身份证的话那这个就是身份证号。只有模块ID相同时才能更新/覆盖安装模块。id应满足以下正则表达式“^[a-zA-Z][a-zA-Z0-9._-]+$”,简单的说就是id必须以英文字母开头(大小写均可),之后才能有数字和符号(当然,也可以继续使用英文),并且符号只能用._-这三个。由于id是模块唯一的标识符,因此发布模块后就不应该更改了
  • versionCode用于比较版本,必须为整数。一般不用改这个

剩下的name、version、author、description都没有特殊的要求,只要是单行字符串就行按照你的喜好修改module.prop,之后保存即可以上就是第一部分的全部内容了。总之,恭喜你跨出了制作模块的第一步:D第二部分-为模块添加功能1、进入common文件夹,你会看到以下三个文件

从零开始的Magisk模块制作教程插图(4)

  • post-fs-data.sh、service.sh的作用都是在开机时执行里面的shell脚本,不过前者发生在Zygote启动之前。由于本教程是基础向的,因此不讨论post-fs-data.sh。一般来说请将shell脚本放在service.sh里面
  • system.prop的作用是修改build.prop,这样一来可以实现修改DPI、机型等功能

以下是修改service.sh的示例,代码的意思是延迟30秒后将zRAM大小设为1 GB

从零开始的Magisk模块制作教程插图(5)
2、仅修改以上三个文件的话,模块是不会生效的,还需要在install.sh里开启对应的功能才行。由于install.sh包括大量的描述,因此这里我就不细讲了
从零开始的Magisk模块制作教程插图(6)
SKIPMOUNT一般情况下不用动 下面三个从上到下依次为:是否加载system.prop、是否执行post-fs-data.sh、是否执行service.sh 将你想要的功能后面的false改为true即可。例如如果我想要Magisk执行service.sh里面的脚本的话,那就把LATESTARTSERVICE=false改为=true即可
从零开始的Magisk模块制作教程插图(7)
这里的功能是将对应的文件夹替换为空文件夹,效果等同于删除文件夹。如果你想这么做的话,根据上面的示例将文件夹的路径填入下面即可
从零开始的Magisk模块制作教程插图(8)
这里是安装模块时显示的文本,我这种懒人是不会改的:P
从零开始的Magisk模块制作教程插图(9)
这里是安装模块时会执行的脚本
从零开始的Magisk模块制作教程插图(10)
这里的作用是修改权限,格式如下
从零开始的Magisk模块制作教程插图(11)
例如,如果我要将/vendor/bin/thermal-engine的权限改为0755的话,只需要将set_perm $MODPATH/vendor/bin/thermal-engine 0 0 0755添加到set_perm_recursive $MODPATH 0 0 0755 0644下方即可
从零开始的Magisk模块制作教程插图(12)
3、如果你想往/system、/vendor、/product分区里面添加、删除、替换文件,那么把相应的文件放在模块system文件夹里对应的路径即可 PS:如果想要修改/vendor和/product分区的话,请将文件夹放在system里面,详情请参考例二 例一:如果我想把文件A放到/system/bin里面,那么在模块system文件夹里新建一个bin文件夹,之后把A放入bin文件夹里即可 例二;如果我想把文件A放到/vendor/etc里面,那么在模块system文件夹里新建一个vendor文件夹,之后再在vendor文件夹里面新建一个etc文件夹,最后把文件A放入最里层的etc文件夹里即可 如果目录下已存在同名文件的话,那么目录下的文件会被Magisk模块里的文件替换。如果你想要删除某个文件的话,只需新建一个同名空文件替换掉你想删除的文件即可 以上就是第二部分的全部内容了 最后把修改好的文件压缩为zip就行了,这样一来你就成功的制作了一个Magisk模块>_< 第三部分-简单的实战教程 1、开机执行脚本 比较常见的用法是调整内核参数,大多数内核参数都能用echo命令调整,格式为“echo 数值 > 路径” 将相关命令添加到service.sh即可,不过在此之前最好使用sleep命令延迟执行,以确保所有参数都能成功应用
从零开始的Magisk模块制作教程插图(13)
某些MOD(特别是音频MOD)不生效怎么办?这时可能需要关闭SELinux(准确的说是将SELinux切换到permissive状态) 在post-fs-data.sh或service.sh里加上setenforce 0即可
从零开始的Magisk模块制作教程插图(14)
2、添加、替换或删除文件 比较常见的用法就是删除温控,这其中最简单粗暴的方法就是手动新建同名空文件以替换掉原文件
从零开始的Magisk模块制作教程插图(15)
不过要是温控文件比较多的话,用这个方法就会比较麻烦,这时就可以在install.sh里面用for循环优雅的完成同样的操作
从零开始的Magisk模块制作教程插图(16)
另一个较为常见的用法是将应用安装到system
从零开始的Magisk模块制作教程插图(17)
3、对build.prop的修改 将你想要修改的参数添加到system.prop里即可 I.修改机型
从零开始的Magisk模块制作教程插图(18)
II.开启HAL3
从零开始的Magisk模块制作教程插图(19)
第三部分就到此为止吧。总之,恭喜你学会了制作Magisk模块^_^ 还没学会?不要紧,多看几遍,多问问的话总能学会的>.< https://t.me/VaultAE

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧