mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Modify change hooking callback delegate parameter to fix effective immediately function in HookCompatHelper, YukiHookDelegateFactory
This commit is contained in:
@@ -48,7 +48,11 @@ internal object HookCompatHelper {
|
|||||||
* 兼容对接已 Hook 的 [Member] 接口
|
* 兼容对接已 Hook 的 [Member] 接口
|
||||||
* @return [YukiMemberHook.HookedMember]
|
* @return [YukiMemberHook.HookedMember]
|
||||||
*/
|
*/
|
||||||
private fun XC_MethodHook.Unhook.compat() = YukiHookCallbackDelegate.createHookedMemberCallback(hookedMethod) { unhook() }
|
private fun XC_MethodHook.Unhook.compat() =
|
||||||
|
YukiHookCallbackDelegate.createHookedMemberCallback(
|
||||||
|
member = { hookedMethod },
|
||||||
|
onRemove = { unhook() }
|
||||||
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [HookApiCategory.ROVO89_XPOSED]
|
* [HookApiCategory.ROVO89_XPOSED]
|
||||||
@@ -58,14 +62,12 @@ internal object HookCompatHelper {
|
|||||||
*/
|
*/
|
||||||
private fun XC_MethodHook.MethodHookParam.compat() =
|
private fun XC_MethodHook.MethodHookParam.compat() =
|
||||||
YukiHookCallbackDelegate.createParamCallback(
|
YukiHookCallbackDelegate.createParamCallback(
|
||||||
member = method,
|
member = { method },
|
||||||
instance = thisObject,
|
instance = { thisObject },
|
||||||
args = args,
|
args = { args },
|
||||||
hasThrowable = hasThrowable(),
|
hasThrowable = { hasThrowable() },
|
||||||
resultCallback = { result = it },
|
result = { it, assign -> if (assign) result = it; result },
|
||||||
throwableCallback = { throwable = it },
|
throwable = { it, assign -> if (assign) throwable = it; throwable }
|
||||||
result = result,
|
|
||||||
throwable = throwable
|
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -40,54 +40,50 @@ internal object YukiHookCallbackDelegate {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建 [YukiMemberHook.HookedMember] 实例
|
* 创建 [YukiMemberHook.HookedMember] 实例
|
||||||
* @param member 当前 [Member]
|
* @param member [Member] 实例 (代理回调)
|
||||||
* @param removeCallback 回调解除 Hook 事件
|
* @param onRemove 回调解除 Hook 事件 (代理回调)
|
||||||
* @return [YukiMemberHook.HookedMember]
|
* @return [YukiMemberHook.HookedMember]
|
||||||
*/
|
*/
|
||||||
internal fun createHookedMemberCallback(member: Member, removeCallback: () -> Unit) =
|
internal fun createHookedMemberCallback(member: () -> Member?, onRemove: () -> Unit) =
|
||||||
object : YukiMemberHook.HookedMember() {
|
object : YukiMemberHook.HookedMember() {
|
||||||
override val member get() = member
|
override val member get() = member()
|
||||||
override fun remove() {
|
override fun remove() {
|
||||||
removeCallback()
|
onRemove()
|
||||||
runCatching { YukiHookCacheStore.hookedMembers.remove(this) }
|
runCatching { YukiHookCacheStore.hookedMembers.remove(this) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建 [YukiHookCallback.Param] 实例
|
* 创建 [YukiHookCallback.Param] 实例
|
||||||
* @param member [Member] 实例
|
* @param member [Member] 实例 (代理回调)
|
||||||
* @param instance 当前实例对象
|
* @param instance 当前实例对象 (代理回调)
|
||||||
* @param args 方法、构造方法数组
|
* @param args 方法、构造方法数组 (代理回调)
|
||||||
* @param hasThrowable 是否存在设置过的方法调用抛出异常
|
* @param hasThrowable 是否存在设置过的方法调用抛出异常 (代理回调)
|
||||||
* @param resultCallback 回调设置当前 Hook 方法的返回值 (结果)
|
* @param result 当前 Hook 方法返回值 (结果) (代理回调)
|
||||||
* @param throwableCallback 回调设置当前 Hook 方法调用抛出的异常
|
* @param throwable 当前 Hook 方法调用抛出的异常 (代理回调)
|
||||||
* @param result 当前 Hook 方法返回值 (结果)
|
|
||||||
* @param throwable 当前 Hook 方法调用抛出的异常
|
|
||||||
* @return [YukiHookCallback.Param]
|
* @return [YukiHookCallback.Param]
|
||||||
*/
|
*/
|
||||||
internal fun createParamCallback(
|
internal fun createParamCallback(
|
||||||
member: Member?,
|
member: () -> Member?,
|
||||||
instance: Any?,
|
instance: () -> Any?,
|
||||||
args: Array<Any?>?,
|
args: () -> Array<Any?>?,
|
||||||
hasThrowable: Boolean,
|
hasThrowable: () -> Boolean,
|
||||||
resultCallback: (Any?) -> Unit,
|
result: (Any?, Boolean) -> Any?,
|
||||||
throwableCallback: (Throwable?) -> Unit,
|
throwable: (Throwable?, Boolean) -> Throwable?
|
||||||
result: Any?,
|
|
||||||
throwable: Throwable?
|
|
||||||
) = object : YukiHookCallback.Param {
|
) = object : YukiHookCallback.Param {
|
||||||
override val member get() = member
|
override val member get() = member()
|
||||||
override val instance get() = instance
|
override val instance get() = instance()
|
||||||
override val args get() = args
|
override val args get() = args()
|
||||||
override val hasThrowable get() = hasThrowable
|
override val hasThrowable get() = hasThrowable()
|
||||||
override var result
|
override var result
|
||||||
get() = result
|
get() = result(null, false)
|
||||||
set(value) {
|
set(value) {
|
||||||
resultCallback(value)
|
result(value, true)
|
||||||
}
|
}
|
||||||
override var throwable
|
override var throwable
|
||||||
get() = throwable
|
get() = throwable(null, false)
|
||||||
set(value) {
|
set(value) {
|
||||||
throwableCallback(value)
|
throwable(value, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user