开发者指南 您所在的位置:网站首页 magisk包名 开发者指南

开发者指南

2024-07-08 17:19| 来源: 网络整理| 查看: 265

开发者指南 #BusyBox #

Magisk 附带了一个完整的 BusyBox 二进制(包括完整的 SELinux 支持)。可执行文件位于 /data/adb/magisk/busybox 。Magisk 的 BusyBox 支持运行时可切换的“ASH独立外壳模式”。这种独立模式的意思是,当在 BusyBox 的 ash shell 中运行时,无论设置为 PATH ,每个命令都将直接使用 BusyBox 中的 applet。例如,像 ls、rm、chmod 这样的命令将不使用 PATH 中的内容(在 Android 的情况下,默认情况下将分别为 /system/bin/ls 、/system/bin/rm 和 /system/bin/chmod ),而是直接调用内部 BusyBox 小程序。这确保脚本始终在可预测的环境中运行,并且无论在哪个 Android 版本上运行,都始终具有完整的命令集。要强制命令不使用BusyBox,必须使用完整路径调用可执行文件。

在 Magisk 上下文中运行的每个 shell 脚本都将在启用独立模式(Standalone Mode)的 BusyBox 的 ash shell 中执行。对于与第三方开发人员相关的内容,这包括所有启动脚本和模块安装脚本。

对于想在 Magisk 之外使用“独立模式”功能的开发者,有两种方法可以启用它:

将环境变量 ASH_STANDALONE 设置为 1示例:ASH_STANDALONE=1 /data/adb/magisk/busybox sh 使用命令行选项切换:/data/adb/magisk/busybox sh -o standalone

为了确保所有后续执行的 sh shell 也以独立模式运行,选项1是首选方法(这是 Magisk 和 Magisk app 内部使用的方法),因为环境变量向下继承到子进程。

Magisk 模块 #

Magisk 模块是放置在 /data/adb/modules 中的文件夹,结构如下:

txt/data/adb/modules ├── . ├── . | ├── $MODID ✗、1_module ✗、-a-module ✗ 这是模块的唯一标识符。模块发布后,您不应更改它。versionCode 必须是整数。这用于对比版本,以便检查更新。updateJson 应该指向一个 URL,该 URL 下载 JSON 以提供信息,以便 Magisk app 可以更新模块。上面没有提到的其他字符串可以是任何单行字符串。确保使用 UNIX (LF) 换行类型,而不是 Windows (CR+LF) 或 Macintosh (CR)。

更新的JSON的格式:

json{ "version": string, "versionCode": int, "zipUrl": url, "changelog": url } 123456Shell 脚本 (*.sh) #

请阅读 Boot Scripts 部分,了解 post-fs-data.sh 和 service.sh 之间的区别。对于大多数模块开发人员来说,如果您只需要运行引导脚本,service.sh 应该足够好了。

在模块的所有脚本中,请使用 MODDIR=${0%/*} 获取模块的基本目录路径;不要在脚本中硬编码模块路径。 如果启用了Zygisk,则环境变量 ZYGISK_ENABLED 将设置为 1 。

system 文件夹 #

要替换/注入的所有文件都应放在此文件夹中。此文件夹将以递归方式合并到真正的 /system 中,也就是说:真实 /system 中的现有文件将被模块 system 中的文件替换,模块 system 中的新文件将被添加到真实 /system 中。

如果您将名为 .replace 的文件放在任何文件夹中,而不是合并其内容,则该文件夹将直接替换实际系统中的文件夹。这对于交换整个文件夹非常方便。

如果要替换 /vendor 、/product 或 /system_ext 中的文件,请分别将它们放在 system/vendor 、system/product 和 system/system_ext 下。Magisk 将透明地处理这些分区是否位于单独的分区中。

zygisk #

Zygisk 是 Magisk 的一项功能,它允许高级模块开发人员在每个 Android 应用程序的进程中直接运行代码,然后再进行专业化和运行。有关 Zygisk API 和构建 Zygisk 模块的更多详细信息,请查看 Zygisk 模块示例 项目。

system.prop #

此文件遵循与 build.prop 相同的格式。每行由 [key]=[value]组成。

sepolicy.rule #

如果您的模块需要一些额外的 sepolicy 补丁,请将这些规则添加到此文件中。此文件中的每一行都将被视为策略语句。有关如何格式化策略语句的更多详细信息,请查看 magiskpolicy 的文档。

Magisk 模块安装程序 #

Magisk 模块安装程序是打包在 zip 文件中的 Magisk 模块,可以在 Magisk 应用程序或第三方recovery(如 TWRP)中刷入。最简单的 Magisk 模块安装程序只是一个打包为 zip 文件的 Magisk 模块,此外还有以下文件:

update-binary:下载最新的 module_installer.sh 并将该脚本重命名或复制为 update-binaryupdater-script:这个文件应该只包含字符串 “#MAGISK”

模块安装程序脚本将会设置环境,将模块文件从 zip 文件提取到正确的位置,然后完成安装过程,这对于大多数简单的 Magisk 模块来说应该足够好了。

txt模块module.zip │ ├── META-INF │ └── com │ └── google │ └── android │ ├── update-binary


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有