mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 10:45:47 +08:00
Modify add dataExtra function and callback function id in HookParam, YukiMemberHookCreator
This commit is contained in:
@@ -52,6 +52,7 @@ import com.highcapable.yukihookapi.hook.log.yLoggerW
|
||||
import com.highcapable.yukihookapi.hook.param.HookParam
|
||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||
import com.highcapable.yukihookapi.hook.type.java.*
|
||||
import com.highcapable.yukihookapi.hook.utils.RandomSeed
|
||||
import com.highcapable.yukihookapi.hook.utils.await
|
||||
import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType
|
||||
import java.lang.reflect.Constructor
|
||||
@@ -220,6 +221,15 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
||||
/** 是否已经执行 Hook */
|
||||
private var isHooked = false
|
||||
|
||||
/** [beforeHook] 回调方法体 ID */
|
||||
private val beforeHookId = RandomSeed.createString()
|
||||
|
||||
/** [afterHook] 回调方法体 ID */
|
||||
private val afterHookId = RandomSeed.createString()
|
||||
|
||||
/** [replaceAny]、[replaceUnit] 回调方法体 ID */
|
||||
private val replaceHookId = RandomSeed.createString()
|
||||
|
||||
/** [beforeHook] 回调 */
|
||||
private var beforeHookCallback: (HookParam.() -> Unit)? = null
|
||||
|
||||
@@ -574,7 +584,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
||||
/** 定义替换 Hook 回调方法体 */
|
||||
val replaceMent = object : YukiMemberReplacement(priority.toPriority()) {
|
||||
override fun replaceHookedMember(param: Param) =
|
||||
replaceHookParam.assign(param).let { assign ->
|
||||
replaceHookParam.assign(replaceHookId, param).let { assign ->
|
||||
runCatching {
|
||||
replaceHookCallback?.invoke(assign).also {
|
||||
checkingReturnType((param.member as? Method?)?.returnType, it?.javaClass)
|
||||
@@ -600,7 +610,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
||||
/** 定义前后 Hook 回调方法体 */
|
||||
val beforeAfterHook = object : YukiMemberHook(priority.toPriority()) {
|
||||
override fun beforeHookedMember(param: Param) {
|
||||
beforeHookParam.assign(param).also { assign ->
|
||||
beforeHookParam.assign(beforeHookId, param).also { assign ->
|
||||
runCatching {
|
||||
beforeHookCallback?.invoke(assign)
|
||||
checkingReturnType((param.member as? Method?)?.returnType, param.result?.javaClass)
|
||||
@@ -616,7 +626,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
||||
}
|
||||
|
||||
override fun afterHookedMember(param: Param) {
|
||||
afterHookParam.assign(param).also { assign ->
|
||||
afterHookParam.assign(afterHookId, param).also { assign ->
|
||||
runCatching {
|
||||
afterHookCallback?.invoke(assign)
|
||||
if (afterHookCallback != null) onHookLogMsg(msg = "After Hook Member [${this@hook}] done [$tag]")
|
||||
|
@@ -29,6 +29,7 @@
|
||||
|
||||
package com.highcapable.yukihookapi.hook.param
|
||||
|
||||
import android.os.Bundle
|
||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator
|
||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator.MemberHookCreator
|
||||
import com.highcapable.yukihookapi.hook.core.api.helper.YukiHookHelper
|
||||
@@ -42,12 +43,20 @@ import java.lang.reflect.Method
|
||||
/**
|
||||
* Hook 方法、构造方法的目标对象实现类
|
||||
* @param creatorInstance [YukiMemberHookCreator] 的实例对象
|
||||
* @param paramId 当前回调方法体 ID
|
||||
* @param param Hook 结果回调接口
|
||||
*/
|
||||
class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param? = null) {
|
||||
class HookParam internal constructor(
|
||||
private val creatorInstance: YukiMemberHookCreator,
|
||||
private var paramId: String = "",
|
||||
private var param: YukiHookCallback.Param? = null
|
||||
) {
|
||||
|
||||
internal companion object {
|
||||
|
||||
/** 每个回调方法体的数据存储实例数据 */
|
||||
private val dataExtras = HashMap<String, Bundle>()
|
||||
|
||||
/** [HookParam] 是否已经执行首次回调事件 */
|
||||
internal var isCallbackCalled = false
|
||||
|
||||
@@ -59,10 +68,12 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
|
||||
|
||||
/**
|
||||
* 在回调中设置 [HookParam] 使用的 [YukiHookCallback.Param]
|
||||
* @param paramId 当前回调方法体 ID
|
||||
* @param param Hook 结果回调接口
|
||||
* @return [HookParam]
|
||||
*/
|
||||
internal fun assign(param: YukiHookCallback.Param): HookParam {
|
||||
internal fun assign(paramId: String, param: YukiHookCallback.Param): HookParam {
|
||||
this.paramId = paramId
|
||||
this.param = param
|
||||
return this
|
||||
}
|
||||
@@ -124,6 +135,12 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
|
||||
param?.result = value
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前回调方法体范围内的数据存储实例
|
||||
* @return [Bundle]
|
||||
*/
|
||||
val dataExtra get() = dataExtras[paramId] ?: Bundle().apply { dataExtras[paramId] = this }
|
||||
|
||||
/**
|
||||
* 判断是否存在设置过的方法调用抛出异常
|
||||
* @return [Boolean]
|
||||
|
Reference in New Issue
Block a user