Zygisk 注入链路:框架如何进入每个应用
从 Zygote 说起
安卓里所有应用进程都是从同一个"模板进程"孵化出来的——Zygote。系统开机时 Zygote 预加载好公共资源,之后每启动一个应用,就 fork 一份出来。谁控制了 Zygote,谁的代码就自动出现在每个应用里。
老一代 Xposed 直接替换 app_process 二进制文件来达成目的;而本框架选择更优雅的路:
- Zygisk(Magisk 内置的注入机制)在 Zygote 进程里加载框架的动态库
- 框架用 LSPlant 引擎在 ART 运行时里完成方法级钩子
- 当被勾选的作用域应用启动时,框架把对应模块的代码塞进它的进程

为什么按作用域隔离
模块代码虽然"随叫随到",但框架只把模块注入到你勾选的应用里。没被勾选的应用进程里根本没有模块的代码,自然零开销。这也是它和"全局钩子"老框架在体验上拉开差距的根本原因:
- 未勾选的应用保持原生编译代码,无任何跳板开销
- 模块出了问题,波及面被限制在自己的作用域里
- 框架本身在标准 SELinux 强制模式下即可运行,不需要放宽安全策略
与 Magisk 模块的分工
Magisk 模块动的是文件(systemless 覆盖系统分区),本框架的模块动的是逻辑(运行时方法拦截)。两者是互补关系:换文件用 Magisk,改行为用钩子框架——很多玩家的设备上两者共存。
一句话总结
框架把自己的代码"藏"进所有应用的祖先进程,再按作用域点名放行——这就是它既全能又克制的秘密。