From 88051fabe11236fca2d33e81da2d8119817661fc Mon Sep 17 00:00:00 2001 From: Fankesyooni Date: Wed, 2 Mar 2022 01:48:25 +0800 Subject: [PATCH] add `onHookClassNotFoundFailure` function and fix some bugs --- .../yukihookapi/hook/core/YukiHookCreater.kt | 28 +++++++++++++++++-- 1 file changed, 25 insertions(+), 3 deletions(-) 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 88ca6ba4..c79c5215 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 @@ -120,6 +120,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl /** Hook 开始时出现错误回调 */ private var onHookingFailureCallback: ((Throwable) -> Unit)? = null + /** [hookClass] 找不到时出现的错误回调 */ + private var onHookClassNotFoundFailureCallback: ((Throwable) -> Unit)? = null + /** 全部错误回调 */ private var onAllFailureCallback: ((Throwable) -> Unit)? = null @@ -334,9 +337,10 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl if (!YukiHookAPI.hasXposedBridge) return if (hookClass.instance == null) { (hookClass.throwable ?: Throwable("Failed Hooked Class [${hookClass.name}]")).also { + onHookClassNotFoundFailureCallback?.invoke(it) onHookingFailureCallback?.invoke(it) onAllFailureCallback?.invoke(it) - if (isNotIgnoredHookingFailure) onHookFailureMsg(it) + if (isNotIgnoredHookingFailure && onHookClassNotFoundFailureCallback == null) onHookFailureMsg(it) } return } @@ -405,8 +409,10 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl } } else { - onHookingFailureCallback?.invoke(Throwable()) - onAllFailureCallback?.invoke(Throwable()) + Throwable(message = "Finding Error isSetUpMember [$isHookMemberSetup] [$tag]").also { + onHookingFailureCallback?.invoke(it) + onAllFailureCallback?.invoke(it) + } if (isNotIgnoredHookingFailure) loggerE( msg = if (isHookMemberSetup) @@ -501,6 +507,22 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl */ fun ignoredHookingFailure() = onHookingFailure {} + /** + * 监听 [hookClass] 找不到时发生错误的回调方法 + * @param initiate 回调错误 + * @return [Result] 可继续向下监听 + */ + fun onHookClassNotFoundFailure(initiate: (Throwable) -> Unit): Result { + onHookClassNotFoundFailureCallback = initiate + return this + } + + /** + * 忽略 [hookClass] 找不到时出现的错误 + * @return [Result] 可继续向下监听 + */ + fun ignoredHookClassNotFoundFailure() = onHookClassNotFoundFailure {} + /** * 监听全部 Hook 过程发生错误的回调方法 * @param initiate 回调错误