HookReloadBatch

@RequiresXposedApi(value = 102)
class HookReloadBatch @JvmOverloads constructor(namespace: String, xposed: XposedInterface = EzXposed.base, requireStableTopologyOnHotReload: Boolean = false)

API 102 的批次聚合式热重载协调器。

HotReloadSession 适合新模块:每条 hook 都显式声明稳定的 reloadKey(...)。本类适合已有的大型 规则集:把一次完整、同步的目标进程初始化包进 install,其中未设置 hook ID 的 EzHookTool DSL hook 会按 executable + priority + exceptionMode 聚合成一个带稳定内部 hook ID 的底层 hook。

新 generation 重新执行同一初始化批次时,framework 会逐个原子替换每个聚合后的底层 hook。因此规则可以 在不为每条既有 hook 补写 reloadKey 的情况下新增、删除或调整回调及目标。显式调用 io.github.lingqiqi5211.ezhooktool.xposed.dsl.HookFactory.idreloadKey(...) 的 hook 不会被聚合, 仍按官方 executable + hook ID 语义原子替换。

使用约束:

  • 一个 module entry、一个目标进程初始化周期只创建一个 batch,并只调用一次 install

  • install 必须包住所有会注册 hook 的同步初始化代码;异步或初始化完成后才创建的 hook 不属于本批次, 应改为同步安装,或使用默认自动模式 / 显式 reloadKey 自行定义收尾边界。

  • 新 generation 必须先在旧 handle 仍有效时调用 captureOldHooks,再执行 install,最后调用 finishHotReload。不要与同一批 hook 的 HotReloadSession 混用。

  • 本类只管理 EzHookTool API 102 DSL/Java helper 创建的 hook。直接调用 libxposed 或旧 Xposed API 的 hook 不会自动进入批次,应迁移到 helper,或在热重载前主动拒绝。

内部聚合 ID 以 ezhooktool.batch.v1: 开头,属于本库保留命名空间。

Constructors

Link copied to clipboard
constructor(namespace: String, xposed: XposedInterface = EzXposed.base, requireStableTopologyOnHotReload: Boolean = false)

Types

Link copied to clipboard
object Companion

Properties

Link copied to clipboard

当前 generation 是否可安全发起下一次热重载;null 表示 batch 自身没有发现阻塞条件。

Functions

Link copied to clipboard
fun captureOldHooks(handles: Iterable<XposedInterface.HookHandle>)

在新 generation 注册 hook 之前拍下旧 handle 的 executable 与 hook ID。

Link copied to clipboard

完成新 generation 的旧 handle 收尾。

Link copied to clipboard
fun install(block: Runnable)

执行一次完整的同步 hook 初始化,并在回调正常返回后统一提交所有聚合 hook。