Modify change by function to multiple reasons of hooker in YukiMemberHookCreator

This commit is contained in:
2023-02-01 01:39:21 +08:00
parent 249a39dc05
commit 2b1acf896e

View File

@@ -54,6 +54,7 @@ import com.highcapable.yukihookapi.hook.param.PackageParam
import com.highcapable.yukihookapi.hook.type.java.* import com.highcapable.yukihookapi.hook.type.java.*
import com.highcapable.yukihookapi.hook.utils.RandomSeed import com.highcapable.yukihookapi.hook.utils.RandomSeed
import com.highcapable.yukihookapi.hook.utils.await import com.highcapable.yukihookapi.hook.utils.await
import com.highcapable.yukihookapi.hook.utils.conditions
import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType
import java.lang.reflect.Constructor import java.lang.reflect.Constructor
import java.lang.reflect.Field import java.lang.reflect.Field
@@ -87,14 +88,28 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
/** [hookClass] 找不到时出现的错误回调 */ /** [hookClass] 找不到时出现的错误回调 */
private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null
/** 当前 [YukiMemberHookCreator] 禁止执行 Hook 操作的条件数组 */
private val disableCreatorRunHookReasons = HashSet<Boolean>()
/** 是否对当前 [YukiMemberHookCreator] 禁止执行 Hook 操作 */ /** 是否对当前 [YukiMemberHookCreator] 禁止执行 Hook 操作 */
@PublishedApi private var isDisableCreatorRunHook = false
internal var isDisableCreatorRunHook = false
/** 设置要 Hook 的 [Method]、[Constructor] */ /** 设置要 Hook 的 [Method]、[Constructor] */
@PublishedApi @PublishedApi
internal var preHookMembers = HashMap<String, MemberHookCreator>() internal var preHookMembers = HashMap<String, MemberHookCreator>()
/**
* 更新当前 [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] * 得到当前被 Hook 的 [Class]
* *
@@ -864,7 +879,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
* @return [Result] 可继续向下监听 * @return [Result] 可继续向下监听
*/ */
inline fun by(condition: () -> Boolean): Result { inline fun by(condition: () -> Boolean): Result {
isDisableCreatorRunHook = (runCatching { condition() }.getOrNull() ?: false).not() updateDisableCreatorRunHookReasons((runCatching { condition() }.getOrNull() ?: false).not())
return this return this
} }