lsposed 中文文档 下载 App

Zygisk 注入链路:框架如何进入每个应用

从 Zygote 说起

安卓里所有应用进程都是从同一个"模板进程"孵化出来的——Zygote。系统开机时 Zygote 预加载好公共资源,之后每启动一个应用,就 fork 一份出来。谁控制了 Zygote,谁的代码就自动出现在每个应用里。

老一代 Xposed 直接替换 app_process 二进制文件来达成目的;而本框架选择更优雅的路:

  1. Zygisk(Magisk 内置的注入机制)在 Zygote 进程里加载框架的动态库
  2. 框架用 LSPlant 引擎在 ART 运行时里完成方法级钩子
  3. 当被勾选的作用域应用启动时,框架把对应模块的代码塞进它的进程
概览页可见注入接口为 Zygisk
概览页的注入接口一栏显示 Zygisk,表示当前走的是 Zygisk 注入链路

为什么按作用域隔离

模块代码虽然"随叫随到",但框架只把模块注入到你勾选的应用里。没被勾选的应用进程里根本没有模块的代码,自然零开销。这也是它和"全局钩子"老框架在体验上拉开差距的根本原因:

与 Magisk 模块的分工

Magisk 模块动的是文件(systemless 覆盖系统分区),本框架的模块动的是逻辑(运行时方法拦截)。两者是互补关系:换文件用 Magisk,改行为用钩子框架——很多玩家的设备上两者共存。

一句话总结

框架把自己的代码"藏"进所有应用的祖先进程,再按作用域点名放行——这就是它既全能又克制的秘密。