KernelSU
KernelSU 和 Magisk 都是内核级 root 方案,模块生态也基本通用。下面把两者的模块系统拆开对比:哪些东西完全一样,哪些是真正不一样的地方。
相同之处
- 模块文件格式:都以 zip 的方式组织模块,并且模块的格式几乎相同。
- 模块安装目录:都在
/data/adb/modules。 - systemless:都支持通过模块的形式以 systemless 修改
/system。 post-fs-data.sh:执行时机完全一致,语义也完全一致。service.sh:执行时机完全一致,语义也完全一致。system.prop:完全相同。sepolicy.rule:完全相同。- BusyBox:脚本都在 BusyBox 中以“独立模式”运行。
不同之处
在了解不同之处之前,你需要知道如何区分你的模块是运行在 KernelSU 还是运行在 Magisk 之中。在所有你可以运行模块脚本的地方(customize.sh、post-fs-data.sh、service.sh),你都可以通过环境变量 KSU 来区分:在 KernelSU 中,这个环境变量将被设置为 true。
- KernelSU 的模块不支持在 Recovery 中安装。
- KernelSU 的模块没有内置的 Zygisk 支持(但你可以通过 ZygiskNext 来使用 Zygisk 模块)。
- 模块挂载架构:KernelSU 使用 metamodule 系统,将挂载委托给可插拔的 metamodule(例如 meta-overlayfs),而 Magisk 将挂载内置在其核心中。KernelSU 需要安装 metamodule 才能启用模块挂载。
- 替换或删除文件的方式与 Magisk 完全不同。KernelSU 不支持
.replace方式,相反,你需要通过mknod filename c 0 0创建同名文件夹来删除对应文件。 - BusyBox 的目录不同:KernelSU 内置的 BusyBox 在
/data/adb/ksu/bin/busybox,而 Magisk 在/data/adb/magisk/busybox。注意此为 KernelSU 内部行为,未来可能会更改。 - KernelSU 不支持
.replace文件,但支持REPLACE和REMOVE变量。 - KernelSU 新增了一种脚本
boot-completed.sh,以便在 Android 系统启动后运行某些任务。 - KernelSU 新增了一种脚本
post-mount.sh,以便在模块挂载完成后运行某些任务。