APatch 和 KernelSU 的区别 — 要不要内核源码
共同祖先:都是内核级 root
APatch 和 KernelSU 都是内核级 root 方案——它们都不修改 init 系统,而是直接在内核层面授予 root 权限。APatch 管理器界面甚至直接从 KernelSU 复制修改而来,模块系统也基本兼容。
这两个方案从外观上看非常相似,但安装前提和核心技术完全不同。
最大的区别:要不要内核源码
KernelSU 的 root 获取需要一个前提条件:必须有设备的内核源码。
KernelSU 的开发者 tiann 需要在源码层面做修改、编译新内核、刷入 boot 分区。如果 OEM 没有公开内核源码(Android 内核 GPL 要求厂商公开,但很多厂商以"没有修改内核"为借口回避),KernelSU 就没法用。
APatch 则完全不同:只需要一份原厂 boot.img,不需要内核源码。
KernelPatch 框架通过分析内核的符号表(CONFIG_KALLSYMS),在运行时动态 patch 内核二进制。整个过程不需要源代码,只需要编译好的产物。这对 OEM 生态来说是一个巨大的自由度提升——几乎所有 Android 设备都能通过某种方式拿到 boot.img(开发者模式、刷机包提取、adb 备份),但不是所有设备都有内核源码。
技术实现差异
| 维度 | KernelSU | APatch |
|---|---|---|
| 安装前提 | OEM 公开内核源码 | 有原厂 boot.img 即可 |
| 内核修改方式 | 源码级修改 + 重编译 | KernelPatch 二进制级补丁 |
| 内核版本支持 | 取决于设备 | 3.18 – 6.12(覆盖绝大多数) |
| 是否支持旧内核 | 取决于设备 | 支持非 GKI 内核设备 |
| SELinux 处理 | 需要 patch | 可 hook 绕过,不强制 patch |
| 模块系统 | KSU 模块 | APM(兼容 Magisk)+ KPM |
谁先出谁后出
时间线上 KernelSU(2022)比 APatch(2023)早约一年。APatch 可以看作在 KernelSU 的基础上,引入 KernelPatch 这个动态补丁框架,把"需要内核源码"这个门槛给去掉了。
生态现状
截至目前,KernelSU 和 APatch 的开发者社区和模块生态基本是共享的:
- 模块格式互通(APatch 的 APM 来自 KernelSU 模块系统)
- WebUI 设计规范一致
- ZygiskNext 等兼容层同时支持两者
- 官方文档互相引用
两者的关系更像是"同根生出的两种实现"而不是"两个独立的竞争方案"。