# 前言
说到搞机,那肯定绕不开大名鼎鼎的Magisk。就我来说,root
完后做的第一件事,就是安装各种各样的模块,但是,我却从来没有研究过Magisk的内容。同时,现在也有许多心怀不轨的人制作锁机模块骗人刷入。所以,了解Magisk模块的一些基本内容就显得比较重要了。
# 认识Magisk模块
根据官方的文档,一个典型的Magisk模块的目录应该如下所示:1
|
|
可以看出来,META-INF
目录是由官方提供,并不需要我们进行修改。
# module.prop
这个文件是模块的标识信息,模块的基本信息就存放在这里,文件的格式如下。1
|
|
各键值的作用说明如下:
名称 | 说明 |
---|---|
id | 模块的唯一标识符,需符合该正则表达式^[a-zA-Z][a-zA-Z0-9._-]+$ |
name | 模块名称 |
version | 模块版本号 |
versionCode | 模块版本标识,必须为整数,用于更新 |
author | 作者信息 |
description | 模块描述 |
updateJson | 更新信息链接,现在Magisk移除了内部的更新功能,这个属性应该是无用了 |
# system文件夹
Magisk的一个主要作用就是对系统文件进行注入或替换,只要将文件按顺序放入此目录中即可。例如我想修改hosts文件,只需要将修改好的hosts文件放入system/etc
这个目录下,Magisk就会自动将其替换了。
如果要替换/vendor
、/product
或/system_ext
中的文件,只需将它们分别放在system/vendor
、system/product
和system/system_ext
下。Magisk就会自动替换完成。
# customize.sh
这是自定义模块安装过程,如果只是简单的替换文件就不需要用到它。但是,很多时候我们并不是仅需替换文件,还需要执行一些脚本,这里就需要使用到它了。
根据官方文档,这里支持以下的环境变量:
变量名 | 作用 |
---|---|
MAGISK_VER (string) | 当前安装的Magisk的版本字符串(例如v20.0) |
MAGISK_VER_CODE (int) | 当前安装的Magisk的版本代码(例如20000) |
BOOTMODE (bool) | 如果模块正在Magisk应用程序中安装,则为true |
MODPATH (path) | 安装模块文件的路径 |
TMPDIR (path) | 可以临时存储文件的位置 |
ZIPFILE (path) | 您的模块的安装zip |
ARCH (string) | 设备的CPU架构,值可以是arm 、arm 64 、x86 或x64 |
IS64BIT (bool) | 如果$ARCH 为arm 64 或x64 ,则为true |
API (int) | 设备的API级别(Android版本)(例如,Android 5.0为21) |
以及以下的命令:
ui_print <msg>
:在页面上显示信息abort <msg>
:将错误消息打印到控制台并终止安装set_perm
和set_perm_recursive
:修改文件权限
# 实践
# 修改系统Hosts
我一开始想研究Magisk的契机,就是想要修改我手机的Hosts文件。一开始按百度的教程做,但没有效果,后来就尝试了一下Magisk模块,直接就成功了。
有了前面知识的铺垫,想要实现这个功能就非常简单了,下面列出我们程序的目录树。
|
|
实际我们需要修改的部分只有module.prop
和hosts
,hosts
是我们需要修改的文件,所以我们就只要关注module.prop
。
|
|
如此看来,如果只要替换文件,基本没有任何难度。
# 使用dnscrypt-proxy实现DoH
这部分我正在研究,等研究明白了就补上🕊️。