EzXposed

object EzXposed

libxposed API 102 的运行时入口。

推荐初始化顺序:

  1. 在 XposedModule.onModuleLoaded 里调用 initOnModuleLoaded

  2. 在 XposedModule.onPackageLoaded 里调用 initOnPackageLoaded

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

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

API 102 热重载不会自动重放 onModuleLoaded 或 package 生命周期回调。模块应在 onHotReloaded 中重新执行自己的运行时初始化(包括 initOnModuleLoaded 与 onTargetReady 注册), 再调用 handleHotReloaded 或 restoreHotReloadedAutomatically 恢复目标 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 和带 handleHotReloaded 的 onOldHooks 参数保留给自定义流程。

热重载是可选特性。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

是否启用安全模式。

Link copied to clipboard

首次就绪初始化的失败原因;失败不会自动重试,新 generation 会清空。

Link copied to clipboard

当前 generation 首次就绪初始化的状态,不表示后续即时回调或整次热重载的结果。

Functions

Link copied to clipboard

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

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

Link copied to clipboard

对方法或构造器做去优化;底层返回失败或发生异常时返回 false。需要异常原因时用 deoptimizeOrThrow。

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) 之后跑什么」的回调。

Link copied to clipboard

注册只执行一次的 attach 回调。

Link copied to clipboard

注册可取消的持续 attach 回调;分发时机与 runOnApplicationAttach 相同。