Added new function "onPrepareHook" when the hook start success

This commit is contained in:
2022-04-03 04:23:54 +08:00
parent 8ff7a86c43
commit d8d9967b2b

View File

@@ -99,17 +99,23 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
@DoNotUseMethod @DoNotUseMethod
fun hook(): Result { fun hook(): Result {
if (YukiHookAPI.hasXposedBridge.not()) return Result() if (YukiHookAPI.hasXposedBridge.not()) return Result()
if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted") return if (hookMembers.isEmpty()) error("Hook Members is empty,hook aborted")
else Thread { else Result().also {
/** 延迟使得方法取到返回值 */ Thread {
SystemClock.sleep(1) /** 延迟使得方法取到返回值 */
if (isDisableCreaterRunHook.not() && hookClass.instance != null) hookMembers.forEach { it.hook() } SystemClock.sleep(1)
if (isDisableCreaterRunHook.not() && hookClass.instance == null) when {
if (onHookClassNotFoundFailureCallback == null) isDisableCreaterRunHook.not() && hookClass.instance != null -> {
yLoggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable) it.onPrepareHook?.invoke()
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found")) hookMembers.forEach { m -> m.hook() }
}.start() }
return Result() isDisableCreaterRunHook.not() && hookClass.instance == null ->
if (onHookClassNotFoundFailureCallback == null)
yLoggerE(msg = "HookClass [${hookClass.name}] not found", e = hookClass.throwable)
else onHookClassNotFoundFailureCallback?.invoke(hookClass.throwable ?: Throwable("[${hookClass.name}] not found"))
}
}.start()
}
} }
/** /**
@@ -611,6 +617,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
*/ */
inner class Result { inner class Result {
/** Hook 开始时的监听事件回调 */
internal var onPrepareHook: (() -> Unit)? = null
/** /**
* 创建监听事件方法体 * 创建监听事件方法体
* @param initiate 方法体 * @param initiate 方法体
@@ -630,6 +639,16 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
return this return this
} }
/**
* 监听 [hookClass] 存在时准备开始 Hook 的操作
* @param initiate 条件方法体
* @return [Result] 可继续向下监听
*/
fun onPrepareHook(initiate: () -> Unit): Result {
onPrepareHook = initiate
return this
}
/** /**
* 监听 [hookClass] 找不到时发生错误的回调方法 * 监听 [hookClass] 找不到时发生错误的回调方法
* @param initiate 回调错误 * @param initiate 回调错误