mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Added new function on hook success callback
This commit is contained in:
@@ -135,6 +135,9 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
/** [replaceAny]、[replaceUnit]、[replaceTo] 等回调 */
|
/** [replaceAny]、[replaceUnit]、[replaceTo] 等回调 */
|
||||||
private var replaceHookCallback: (HookParam.() -> Any?)? = null
|
private var replaceHookCallback: (HookParam.() -> Any?)? = null
|
||||||
|
|
||||||
|
/** Hook 成功时回调 */
|
||||||
|
private var onHookedCallback: ((Member) -> Unit)? = null
|
||||||
|
|
||||||
/** 找不到 [member] 出现错误回调 */
|
/** 找不到 [member] 出现错误回调 */
|
||||||
private var onNoSuchMemberFailureCallback: ((Throwable) -> Unit)? = null
|
private var onNoSuchMemberFailureCallback: ((Throwable) -> Unit)? = null
|
||||||
|
|
||||||
@@ -442,8 +445,10 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
member.also { member ->
|
member.also { member ->
|
||||||
runCatching {
|
runCatching {
|
||||||
if (isReplaceHookMode)
|
if (isReplaceHookMode)
|
||||||
XposedBridge.hookMethod(member, replaceMent)
|
XposedBridge.hookMethod(member, replaceMent)?.hookedMethod?.also { onHookedCallback?.invoke(it) }
|
||||||
else XposedBridge.hookMethod(member, beforeAfterHook)
|
?: error("Hook Member [$member] failed")
|
||||||
|
else XposedBridge.hookMethod(member, beforeAfterHook)?.hookedMethod?.also { onHookedCallback?.invoke(it) }
|
||||||
|
?: error("Hook Member [$member] failed")
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
onHookingFailureCallback?.invoke(it)
|
onHookingFailureCallback?.invoke(it)
|
||||||
onAllFailureCallback?.invoke(it)
|
onAllFailureCallback?.invoke(it)
|
||||||
@@ -466,16 +471,24 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
when (hookMemberMode) {
|
when (hookMemberMode) {
|
||||||
HookMemberMode.HOOK_ALL_METHODS ->
|
HookMemberMode.HOOK_ALL_METHODS ->
|
||||||
if (isReplaceHookMode)
|
if (isReplaceHookMode)
|
||||||
XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, replaceMent)
|
XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, replaceMent).also {
|
||||||
.also { if (it.size <= 0) throw NoSuchMethodError("No method name \"$allMethodsName\" matched") }
|
if (it.isEmpty()) throw NoSuchMethodError("No method name \"$allMethodsName\" matched")
|
||||||
else XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, beforeAfterHook)
|
else it.forEach { e -> onHookedCallback?.invoke(e.hookedMethod) }
|
||||||
.also { if (it.size <= 0) throw NoSuchMethodError("No method name \"$allMethodsName\" matched") }
|
}
|
||||||
|
else XposedBridge.hookAllMethods(hookClass.instance, allMethodsName, beforeAfterHook).also {
|
||||||
|
if (it.isEmpty()) throw NoSuchMethodError("No method name \"$allMethodsName\" matched")
|
||||||
|
else it.forEach { e -> onHookedCallback?.invoke(e.hookedMethod) }
|
||||||
|
}
|
||||||
HookMemberMode.HOOK_ALL_CONSTRUCTORS ->
|
HookMemberMode.HOOK_ALL_CONSTRUCTORS ->
|
||||||
if (isReplaceHookMode)
|
if (isReplaceHookMode)
|
||||||
XposedBridge.hookAllConstructors(hookClass.instance, replaceMent)
|
XposedBridge.hookAllConstructors(hookClass.instance, replaceMent).also {
|
||||||
.also { if (it.size <= 0) throw NoSuchMethodError("No constructor matched") }
|
if (it.isEmpty()) throw NoSuchMethodError("No constructor matched")
|
||||||
else XposedBridge.hookAllConstructors(hookClass.instance, beforeAfterHook)
|
else it.forEach { e -> onHookedCallback?.invoke(e.hookedMethod) }
|
||||||
.also { if (it.size <= 0) throw NoSuchMethodError("No constructor matched") }
|
}
|
||||||
|
else XposedBridge.hookAllConstructors(hookClass.instance, beforeAfterHook).also {
|
||||||
|
if (it.isEmpty()) throw NoSuchMethodError("No constructor matched")
|
||||||
|
else it.forEach { e -> onHookedCallback?.invoke(e.hookedMethod) }
|
||||||
|
}
|
||||||
else -> error("Hooked got a no error possible")
|
else -> error("Hooked got a no error possible")
|
||||||
}
|
}
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
@@ -544,6 +557,18 @@ class YukiHookCreater(private val packageParam: PackageParam, private val hookCl
|
|||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 监听 [member] Hook 成功的回调方法
|
||||||
|
*
|
||||||
|
* 在首次 Hook 成功后回调
|
||||||
|
* @param initiate 回调被 Hook 的 [Member]
|
||||||
|
* @return [Result] 可继续向下监听
|
||||||
|
*/
|
||||||
|
fun onHooked(initiate: (Member) -> Unit): Result {
|
||||||
|
onHookedCallback = initiate
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 监听 [member] 不存在发生错误的回调方法
|
* 监听 [member] 不存在发生错误的回调方法
|
||||||
* @param initiate 回调错误
|
* @param initiate 回调错误
|
||||||
|
Reference in New Issue
Block a user