制作一个简单的Magisk模块

magisk面具

Posted by MetaNetworks on November 1, 2020
本页面总访问量

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!
  • 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!

上述两个比较难懂,此处补充一些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.shservice.sh可将脚本在不同的action时执行

打包

可使用zip命令

1
zip -q -r magisk.zip ./path/to/this/folder

刷入

使用Magisk Manager刷入即可