From 2b1acf896eabfa770c7caa9220c4a6efb01d2e77 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Wed, 1 Feb 2023 01:39:21 +0800 Subject: [PATCH] Modify change by function to multiple reasons of hooker in YukiMemberHookCreator --- .../hook/core/YukiMemberHookCreator.kt | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt index ac5721db..25c860bf 100644 --- a/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt +++ b/yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt @@ -54,6 +54,7 @@ import com.highcapable.yukihookapi.hook.param.PackageParam import com.highcapable.yukihookapi.hook.type.java.* import com.highcapable.yukihookapi.hook.utils.RandomSeed import com.highcapable.yukihookapi.hook.utils.await +import com.highcapable.yukihookapi.hook.utils.conditions import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType import java.lang.reflect.Constructor import java.lang.reflect.Field @@ -87,14 +88,28 @@ class YukiMemberHookCreator @PublishedApi internal constructor( /** [hookClass] 找不到时出现的错误回调 */ private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null + /** 当前 [YukiMemberHookCreator] 禁止执行 Hook 操作的条件数组 */ + private val disableCreatorRunHookReasons = HashSet() + /** 是否对当前 [YukiMemberHookCreator] 禁止执行 Hook 操作 */ - @PublishedApi - internal var isDisableCreatorRunHook = false + private var isDisableCreatorRunHook = false /** 设置要 Hook 的 [Method]、[Constructor] */ @PublishedApi internal var preHookMembers = HashMap() + /** + * 更新当前 [YukiMemberHookCreator] 禁止执行 Hook 操作的条件 + * @param reason 当前条件 + */ + @PublishedApi + internal fun updateDisableCreatorRunHookReasons(reason: Boolean) { + disableCreatorRunHookReasons.add(reason) + conditions { + disableCreatorRunHookReasons.forEach { and(it) } + }.finally { isDisableCreatorRunHook = true }.without { isDisableCreatorRunHook = false } + } + /** * 得到当前被 Hook 的 [Class] * @@ -864,7 +879,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor( * @return [Result] 可继续向下监听 */ inline fun by(condition: () -> Boolean): Result { - isDisableCreatorRunHook = (runCatching { condition() }.getOrNull() ?: false).not() + updateDisableCreatorRunHookReasons((runCatching { condition() }.getOrNull() ?: false).not()) return this }