From b6f02080fecf56423baff92b6bb920021c5ee143 Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Sat, 12 Feb 2022 02:22:44 +0800 Subject: [PATCH] ... --- .../yukihookapi/demo_module/hook/MainHook.kt | 2 +- .../yukihookapi/hook/core/YukiHookCreater.kt | 16 ++++---- .../hook/core/finder/FieldFinder.kt | 40 ++++++++++++++++--- 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/MainHook.kt b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/MainHook.kt index 8e0ca9ec..dd50e08c 100644 --- a/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/MainHook.kt +++ b/demo-module/src/main/java/com/highcapable/yukihookapi/demo_module/hook/MainHook.kt @@ -74,7 +74,7 @@ class MainHook : YukiHookXposedInitProxy { field { name = "secondText" type = StringType - }.set(instance, "I am hook result") + }.get(instance).set("I am hook result") } } // 注入要 Hook 的方法 diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt index f31f0b8d..df4f910c 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiHookCreater.kt @@ -229,7 +229,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } /** - * 替换此方法内容 - 给出返回值 + * 拦截并替换此方法内容 - 给出返回值 * * 不可与 [beforeHook]、[afterHook] 同时使用 * @param initiate [HookParam] 方法体 @@ -240,7 +240,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } /** - * 替换此方法内容 - 没有返回值 ([Unit]) + * 拦截并替换此方法内容 - 没有返回值 ([Unit]) * * 不可与 [beforeHook]、[afterHook] 同时使用 * @param initiate [HookParam] 方法体 @@ -251,7 +251,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } /** - * 替换方法返回值 + * 拦截并替换方法返回值 * * 不可与 [beforeHook]、[afterHook] 同时使用 * @param any 要替换为的返回值对象 @@ -262,9 +262,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } /** - * 替换方法返回值为 true + * 拦截并替换方法返回值为 true * - * 确保替换方法的返回对象为 [Boolean] + * ❗确保替换方法的返回对象为 [Boolean] * * 不可与 [beforeHook]、[afterHook] 同时使用 */ @@ -274,9 +274,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } /** - * 替换方法返回值为 false + * 拦截并替换方法返回值为 false * - * 确保替换方法的返回对象为 [Boolean] + * ❗确保替换方法的返回对象为 [Boolean] * * 不可与 [beforeHook]、[afterHook] 同时使用 */ @@ -288,7 +288,7 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl /** * 拦截此方法 * - * 这将会禁止此方法执行并返回 null + * ❗这将会禁止此方法执行并返回 null * * 不可与 [beforeHook]、[afterHook] 同时使用 */ diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt index 172df37f..4e54ed3e 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/finder/FieldFinder.kt @@ -96,7 +96,7 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p fun failure(throwable: Throwable?) = Result(isNoSuch = true, throwable) /** - * Field 查找结果实现类 + * [Field] 查找结果实现类 * * 可在这里处理找到的 [fieldInstance] * @param isNoSuch 是否没有找到变量 - 默认否 @@ -112,18 +112,18 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p fun result(initiate: Result.() -> Unit) = apply(initiate) /** - * 设置变量实例 + * 得到变量实例处理类 * @param instance 变量所在的实例对象 - 如果是静态可不填 - 默认 null - * @param any 设置的实例内容 + * @return [Instance] */ - fun set(instance: Any? = null, any: Any?) = give()?.set(instance, any) + fun get(instance: Any? = null) = Instance(give()?.get(instance)) /** * 得到变量实例 * @param instance 变量所在的实例对象 - 如果是静态可不填 - 默认 null * @return [T] or null */ - fun get(instance: Any? = null) = give()?.get(instance) as? T? + fun of(instance: Any? = null) = get(instance) as? T? /** * 得到变量本身 @@ -140,5 +140,35 @@ class FieldFinder(private val hookInstance: YukiHookCreater.MemberHookCreater, p if (isNoSuch) initiate(e ?: Throwable()) return this } + + /** + * [Field] 实例变量处理类 + * @param instance 当前 [Field] 的实例对象 + */ + inner class Instance(val instance: Any?) { + + /** + * 设置变量实例 + * @param any 设置的实例内容 + */ + fun set(any: Any?) = give()?.set(instance, any) + + /** + * 设置变量实例为 true + * + * ❗请确保示例对象类型为 [Boolean] + */ + fun setTrue() = set(true) + + /** + * 设置变量实例为 true + * + * ❗请确保示例对象类型为 [Boolean] + */ + fun setFalse() = set(false) + + /** 设置变量实例为 null */ + fun setNull() = set(null) + } } } \ No newline at end of file