Modify change invokeOriginal function and add callOriginal function in HookParam

This commit is contained in:
2022-08-27 12:40:16 +08:00
parent d2f23a35eb
commit d27ca2b914
5 changed files with 113 additions and 24 deletions

View File

@@ -566,7 +566,7 @@ class YukiMemberHookCreater(@PublishedApi internal val packageParam: PackagePara
onAllFailureCallback?.invoke(e)
if (onConductFailureCallback == null && onAllFailureCallback == null) onHookFailureMsg(e)
/** 若发生异常则会自动调用未经 Hook 的原始方法保证 Hook APP 正常运行 */
param.member?.also { member -> param.invokeOriginalMember(member, param.args) }
assign.callOriginal()
}
}
}

View File

@@ -34,6 +34,7 @@ import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreater.MemberHookCre
import com.highcapable.yukihookapi.hook.factory.classOf
import com.highcapable.yukihookapi.hook.log.yLoggerE
import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiHookCallback
import com.highcapable.yukihookapi.hook.xposed.bridge.factory.YukiHookHelper
import java.lang.reflect.Constructor
import java.lang.reflect.Member
import java.lang.reflect.Method
@@ -182,11 +183,38 @@ class HookParam internal constructor(private val createrInstance: YukiMemberHook
/**
* 执行原始 [Member]
*
* 未进行 Hook 的 [Member]
* @param args 参数实例
* @return [T]
* 调用自身未进行 Hook 的原始 [Member] 并调用原始参数执行
* @return [Any] or null
*/
fun <T> Member.invokeOriginal(vararg args: Any?) = param?.invokeOriginalMember(member = this, *args) as? T?
fun callOriginal() = callOriginal<Any>()
/**
* 执行原始 [Member]
*
* 调用自身未进行 Hook 的原始 [Member] 并调用原始参数执行
* @return [T] or null
*/
@JvmName(name = "callOriginal_Generics")
fun <T> callOriginal() = invokeOriginal<T>(*args)
/**
* 执行原始 [Member]
*
* 调用自身未进行 Hook 的原始 [Member] 并自定义 [args] 执行
* @param args 参数实例
* @return [Any] or null
*/
fun invokeOriginal(vararg args: Any?) = invokeOriginal<Any>(*args)
/**
* 执行原始 [Member]
*
* 调用自身未进行 Hook 的原始 [Member] 并自定义 [args] 执行
* @param args 参数实例
* @return [T] or null
*/
@JvmName(name = "invokeOriginal_Generics")
fun <T> invokeOriginal(vararg args: Any?) = YukiHookHelper.invokeOriginalMember(member, instance, *args) as T?
/**
* 设置当前 Hook 对象方法的 [result] 返回值为 true

View File

@@ -187,9 +187,6 @@ internal object YukiHookHelper {
override fun args(index: Int, value: Any?) {
this@compat.args[index] = value
}
override fun invokeOriginalMember(member: Member, vararg args: Any?) =
YukiHookHelper.invokeOriginalMember(member, this@compat.thisObject, args)
}
}
@@ -308,15 +305,5 @@ internal abstract class YukiHookCallback(open val priority: Int) {
* @param value 参数对象实例
*/
fun args(index: Int, value: Any?)
/**
* 执行原始 [Member]
*
* 未进行 Hook 的 [Member]
* @param member 实例
* @param args 参数实例
* @return [Any] or null
*/
fun invokeOriginalMember(member: Member, vararg args: Any?): Any?
}
}