与 Magisk KernelSU 脚本兼容性 一份脚本跑三套环境
兼容性基础
好消息是——由于 AxManager 的 BusyBox 直接编译自 Magisk 项目,三者在 shell 语法和命令层面完全兼容。这意味着:
- BusyBox 命令和参数通用
- shell 语法(ash)通用
- 大部分 Magisk 模块脚本可以直接搬到 AxManager 中使用
需要处理的主要是环境差异,而不是语法差异。
各环境的差异点
| 对比项 | AxManager | Magisk | KernelSU |
|---|---|---|---|
| 环境标识变量 | $AXERON = true | $MAGISK = true | $KSU = true |
| 模块运行时 | 用户空间 | init 阶段 | init 阶段 |
| 需要 Root | 否 | 是 | 是 |
| PATH 注入 | AxManager 自己处理 | Magisk 处理 | KernelSU 处理 |
| module.prop 字段 | axeronPlugin | 无额外字段 | 无额外字段 |
| 热重启 | Re-ignite | 完整重启 | 完整重启 |
写一份通用脚本
下面是一个跨环境兼容的插件脚本模板:
#!/system/bin/sh
MODDIR=${0%/*}
# 判断运行环境
ENV="unknown"
if [ "$AXERON" = "true" ]; then
ENV="axeron"
elif [ "$MAGISK" = "true" ]; then
ENV="magisk"
elif [ "$KSU" = "true" ]; then
ENV="kernelsu"
fi
# 根据环境执行不同逻辑
case "$ENV" in
axeron)
# AxManager 特有逻辑
;;
magisk|kernelsu)
# Root 模式逻辑
;;
esac
# 通用逻辑放这里
# ...
module.prop 兼容性
如果插件要同时支持三种环境,module.prop 中的 axeronPlugin 字段只在 AxManager 中生效。Magisk 和 KernelSU 会忽略它。
建议的做法是:
- 为三种环境提供同一个 ZIP 包
- module.prop 中加上
axeronPlugin=<version>字段 - Magisk/KernelSU 用户安装时这个字段被忽略,不影响使用
- AxManager 用户安装时这个字段用于版本校验
需要注意的坑
Root 专属操作
如果你的模块脚本里有 Root 专属操作(如修改 /system 分区),在 AxManager 中运行时这些操作会静默失败或报错。脚本需要先检测环境,然后决定要不要执行这些操作。
启动时机差异
AxManager 的 post-fs-data.sh 在 BOOT_COMPLETED 广播时执行,而 Magisk 的 post-fs-data.sh 在文件系统挂载后立即执行。如果脚本依赖系统服务已启动,AxManager 中的执行时机可能更晚,这通常反而是好事。
SELinux 上下文
AxManager 的 SELinux 处理和 Magisk 完全一致(因为 BusyBox 源码相同)。设置文件权限和 SELinux 上下文的函数用法相同。
总结
一份写得好的模块脚本,只要:
- 用环境标识变量区分三种环境
- Root 专属操作做条件判断
- module.prop 加上
axeronPlugin字段 - 用标准 BusyBox ash 语法
就可以同时在 AxManager、Magisk、KernelSU 三套环境中运行。