EzXposed

object EzXposed

libxposed API 102 的运行时入口。

推荐初始化顺序:

  1. XposedModule.onModuleLoaded 里调用 initOnModuleLoaded

  2. XposedModule.onPackageLoaded 里调用 initOnPackageLoaded

  3. XposedModule.onPackageReady 里调用 initOnPackageReady;需要在 AppComponentFactory 创建前安装 hook 时,改用 initOnPackageLoadedAsTargetReadyonSystemServerStarting 里调用 initOnSystemServerStarting

  4. 通过 onTargetReady 注册「目标进程准备好后跑什么」

API 102 热重载不会自动重放 onModuleLoaded 或 package 生命周期回调。模块应在 onHotReloaded 中重新执行自己的运行时初始化(包括 initOnModuleLoadedonTargetReady 注册), 再调用 handleHotReloadedrestoreHotReloadedAutomatically 恢复目标 snapshot。

行为约定:

默认热重载会把同步初始化中的 DSL/Java helper hook 按 executable、priority、exceptionMode 自动 聚合,并为物理 hook 分配稳定内部 ID;在 handleHotReloaded 成功重建后才清理遗留旧 handle, 通常无需逐条写 reloadKey(...)。同一组内的逻辑 hook 可增删重排,也允许新增或删除目标、 priority/exceptionMode 组及显式 hook ID。相同 executable + ID 的旧 hook 由 framework 单条原子替换, 新 hook 先安装,未继续声明的旧 hook 最后才移除。 需要跨大规模重排保持精确 identity 时使用 HotReloadSession 的显式 reloadKey(...)HookReloadBatch 和带 handleHotReloadedonOldHooks 参数保留给自定义流程。

热重载是可选特性。hook ID、replaceHook 和热重载回调都是 libxposed API 102 才有的,运行在只实现 API 101 的 framework 上时(XposedFeature.HOT_RELOAD 不可用),本库会自动退化:不再分配 hook ID、 不再调用 setId,hook 安装与其它所有能力照常工作;无法降级的入口都标注了 RequiresXposedApi, 会明确报错。在 102 framework 上想主动关掉这套机制,把 hotReloadEnabled 设为 false

Properties

Link copied to clipboard

当前进程的 application context;过早访问时会抛异常。

Link copied to clipboard

当前进程的 application context;尚未可用时返回 null

Link copied to clipboard
lateinit var base: XposedInterface

libxposed 基础接口实例。

Link copied to clipboard

当前默认 ClassLoader

Link copied to clipboard

当前 framework 侧的 libxposed API 版本;base 尚未初始化时为 0。

Link copied to clipboard

framework 提供热重载(XposedFeature.HOT_RELOAD)且模块启用(hotReloadEnabled)时才为 true

Link copied to clipboard

模块是否启用热重载。默认 true

Link copied to clipboard

当前是否运行在 system_server

Link copied to clipboard

当前模块 apk 路径;调用 initOnModuleLoaded 后可用。

Link copied to clipboard

当前模块资源;调用 initOnModuleLoaded 后可用。

Link copied to clipboard

当前包名。

Link copied to clipboard

当前进程名。

Link copied to clipboard

始终可用的 ClassLoader;未初始化时回退到 SystemClassLoader

Link copied to clipboard

是否启用安全模式。

Functions

Link copied to clipboard

添加模块路径到目标 Context.resources。允许通过“R.xx.xxx”直接使用模块资源。

将模块资源路径注入到指定 resources

Link copied to clipboard

对方法或构造器做去优化。

Link copied to clipboard

停止当前 module entry 的后续生命周期回调。

Link copied to clipboard
fun handleHotReloaded(base: XposedInterface, param: XposedModuleInterface.HotReloadedParam, onOldHooks: Consumer<List<XposedInterface.HookHandle>>? = null, onExtra: Consumer<Array<Any?>>? = null)

在覆写的 onHotReloaded 里直接调用。

Link copied to clipboard
fun handleHotReloadedWithTargetReady(base: XposedInterface, param: XposedModuleInterface.HotReloadedParam, targetReady: TargetReadyCallback, onExtra: Consumer<Array<Any?>>? = null): AutomaticHotReloadResult

默认自动热重载的精简入口。

Link copied to clipboard
fun handleHotReloading(param: XposedModuleInterface.HotReloadingParam, extra: Array<Any?> = emptyArray()): Boolean

在覆写的 onHotReloading 里直接调用。

Link copied to clipboard
fun initAppContext(context: Context? = getCurrentApplicationContext(), injectModuleAssetPath: Boolean = false, force: Boolean = false)

手动缓存当前进程的 application context。

Link copied to clipboard

初始化模块资源。

Link copied to clipboard
fun initOnModuleLoaded(base: XposedInterface, param: XposedModuleInterface.ModuleLoadedParam)

onModuleLoaded 阶段初始化运行时基础信息。

Link copied to clipboard
fun initOnPackageLoaded(param: XposedModuleInterface.PackageLoadedParam)

onPackageLoaded 阶段记录当前包名。

Link copied to clipboard
@RequiresApi(value = 29)
fun initOnPackageLoadedAsTargetReady(param: XposedModuleInterface.PackageLoadedParam)

onPackageLoaded 阶段把目标标记为就绪,并立即触发 onTargetReady

Link copied to clipboard
fun initOnPackageReady(param: XposedModuleInterface.PackageReadyParam)

onPackageReady 阶段初始化可直接用于反射的 classLoader

Link copied to clipboard
fun initOnSystemServerStarting(param: XposedModuleInterface.SystemServerStartingParam)

onSystemServerStarting 阶段初始化 system_server 的反射环境。

Link copied to clipboard

注册「目标进程准备好后跑什么」的回调。

Link copied to clipboard
fun restoreHotReloadedAutomatically(base: XposedInterface, param: XposedModuleInterface.HotReloadedParam, onExtra: Consumer<Array<Any?>>? = null): AutomaticHotReloadResult

执行默认自动热重载流程,并返回实际替换与清理数量。

Link copied to clipboard

注册「Application.attach(Context) 之后跑什么」的回调。