Magisk 20.3+模块模板地址:Pinkdoge/magisk-module-template
制作一个简单的Magisk模块
目录结构
一个完整的模板例子架构如下:
其中:
-
META-INF
中包含刷机脚本- 其中默认含有通用代码,可以按照自己的需求定制(不过大部分都在这边增加
ui_print
在刷入时显示作者信息)
- 其中默认含有通用代码,可以按照自己的需求定制(不过大部分都在这边增加
system
目录中默认不包含任何内容- 只是个占位文件夹,可以把要替换/增加的内容放入
- 保持和原系统路径相同,即为替换
- 只是个占位文件夹,可以把要替换/增加的内容放入
-
uninstall.sh
为模块卸载时执行的内容 -
system.prop
可以为系统增加属性- 注意:是增量叠加
-
sepolicy.rule
- 可以为手机添加新的policy,为应用加权限等
-
customize.sh
-
默认含有
-
1 2
# 注意 这不是占位符!!这个代码的作用是将模块里的东西全部塞系统里,然后挂上默认权限 SKIPUNZIP=0
-
-
module.prop
- 里面可以写上模块的描述
1 2 3 4 5 6 7
# id 只能填 字母 数字 半角符号 id=xxx name=xxx version=v1 versionCode=1 author=xxx description=xxx
-
post-fs-data
-
表明这个脚本会以
post-fs-data
模式执行,阻塞执行 -
- post-fs-data mode
- This stage is BLOCKING. Boot process is paused before execution is done, or 10 seconds has passed.
- Scripts run before any modules are mounted. This allows a module developer to dynamically adjust their modules before it gets mounted.
- This stage happens before Zygote is started, which pretty much means everything in Android
- Run scripts in this mode only if necessary!
- post-fs-data mode
-
-
service.sh
-
表明这个脚本会以
late_start service
模式执行,非阻塞 -
- late_start service mode
- This stage is NON-BLOCKING. Your script runs in parallel along with the booting process.
- This is the recommended stage to run most scripts!
- late_start service mode
-
上述两个比较难懂,此处补充一些Android Linux启动知识,参考。
深入理解Android启动过程
Linux的第一个进程为init,默认的init.rc中主要事务有:
Action/Service | 描述 |
---|---|
on early-init | 设置init进程以及它创建的子进程的优先级,设置init进程的安全环境 |
on init | 设置全局环境,为cpu accounting创建cgroup(资源控制)挂载点 |
on fs | 挂载mtd分区 |
on post-fs | 改变系统目录的访问权限 |
on post-fs-data | 改变/data目录以及它的子目录的访问权限 |
on boot | 基本网络的初始化,内存管理等等 |
service servicemanager | 启动系统管理器管理所有的本地服务,比如位置、音频、Shared preference等等… |
service zygote | 启动zygote作为应用进程 |
通过上述的post-fs-data.sh
和service.sh
可将脚本在不同的action时执行
打包
可使用zip命令
1
zip -q -r magisk.zip ./path/to/this/folder
刷入
使用Magisk Manager刷入即可