迁移到 YukiHookAPI 1.2.x

YukiHookAPI1.2.0 版本开始进行了大量调整,你可以继续向下阅读以查看有哪些注意事项和新功能。

默认行为变更

1.2.0 版本开始,@InjectYukiHookWithXposedisUsingResourcesHook 功能默认不再启用,如有需要请手动启用。

注意

Resources Hook (资源钩子) 将在 2.0.0 版本被移除,现已被标记 LegacyResourcesHook,你可以使用 @OptIn(LegacyResourcesHook::class) 的方式消除警告以继续在 1.x.x 版本使用。

新版 API

YukiHookAPI1.2.0 版本引入了 2.0.0 准备实现的 New Hook Code Style在新窗口中打开 (新版 API),现处于实验性阶段,你可以在 2.0.0 版本正式发布前,开始迁移并体验新版 API。

注意

所有旧版 API 已被标记 LegacyHookApi,你可以使用 @OptIn(LegacyHookApi::class) 的方式消除警告以继续使用旧版 API。

例如,我们要 Hook com.example.Test 类中的 test 方法。

旧版 API

findClass("com.example.Test").hook {
    injectMember {
        method {
            name = "test"
        }
        beforeHook {
            // Your code here.
        }
        afterHook {
            // Your code here.
        }
    }
}

新版 API

"com.example.Test".toClass()
    .method {
        name = "test"
    }.hook {
        before {
            // Your code here.
        }
        after {
            // Your code here.
        }
    }

新版 API 的 Hook 对象从 Class 迁移到了 Member,这种方式将更加直观。

差异性功能

下面是对接新版 API 的部分差异性功能。

新的多重 Hook 用法

之前我们需要这样去 Hook 所有匹配条件的方法。

示例如下

injectMembers {
    method {
        name { it.contains("some") }
    }.all()
    afterHook {
        // Your code here.
    }
}

现在,你可以改用下面这种方式。

示例如下

method {
    name { it.contains("some") }
}.hookAll {
    after {
        // Your code here.
    }
}

新的 allMembers(...) 用法

之前我们需要这样去 Hook 所有方法、构造方法。

示例如下

injectMembers {
    allMembers(MembersType.METHOD)
    afterHook {
        // Your code here.
    }
}
injectMembers {
    allMembers(MembersType.CONSTRUCTOR)
    afterHook {
        // Your code here.
    }
}

现在,你可以改用下面这种方式。

示例如下

method().hookAll {
    after {
        // Your code here.
    }
}
constructor().hookAll {
    after {
        // Your code here.
    }
}

当不填写查找条件时,默认获取当前 Class 中的所有成员对象。

如果你想 Hook MembersType.ALL,目前暂时没有可以直接对接的方法,但是你可以将所有成员对象拼接后进行 Hook。

示例如下

(method().giveAll() + constructor().giveAll()).hookAll {
    after {
        // Your code here.
    }
}

但我们并不推荐这种做法,一次性 Hook 过多的成员是不可控的,还会发生问题。