Skip to content

Commit 3edc7da

Browse files
committed
Modify add dataExtra function and callback function id in HookParam, YukiMemberHookCreator
1 parent 0c13179 commit 3edc7da

File tree

4 files changed

+78
-7
lines changed

4 files changed

+78
-7
lines changed

docs-source/src/en/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ You can use the **Chrome Translation Plugin** to translate entire pages for refe
1313
# HookParam <span class="symbol">- class</span>
1414

1515
```kotlin:no-line-numbers
16-
class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param?)
16+
class HookParam internal constructor(
17+
private val creatorInstance: YukiMemberHookCreator,
18+
private var paramId: String,
19+
private var param: YukiHookCallback.Param?
20+
)
1721
```
1822

1923
**Change Records**
@@ -26,6 +30,10 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
2630

2731
修正拼写错误的 **creater** 命名到 **creator**
2832

33+
`v1.1.5` `modified`
34+
35+
新增 `paramId` 参数
36+
2937
**Function Illustrate**
3038

3139
> Hook 方法、构造方法的目标对象实现类。
@@ -158,6 +166,20 @@ var result: Any?
158166

159167
> 获取、设置当前 Hook 对象的 `method``constructor` 的返回值。
160168
169+
## dataExtra <span class="symbol">- field</span>
170+
171+
```kotlin:no-line-numbers
172+
val dataExtra: Bundle
173+
```
174+
175+
**Change Records**
176+
177+
`v1.1.5` `added`
178+
179+
**Function Illustrate**
180+
181+
> 获取当前回调方法体范围内的数据存储实例。
182+
161183
## hasThrowable <span class="symbol">- field</span>
162184

163185
```kotlin:no-line-numbers

docs-source/src/zh-cn/api/public/com/highcapable/yukihookapi/hook/param/HookParam.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ pageClass: code-page
55
# HookParam <span class="symbol">- class</span>
66

77
```kotlin:no-line-numbers
8-
class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param?)
8+
class HookParam internal constructor(
9+
private val creatorInstance: YukiMemberHookCreator,
10+
private var paramId: String,
11+
private var param: YukiHookCallback.Param?
12+
)
913
```
1014

1115
**变更记录**
@@ -18,6 +22,10 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
1822

1923
修正拼写错误的 **creater** 命名到 **creator**
2024

25+
`v1.1.5` `修改`
26+
27+
新增 `paramId` 参数
28+
2129
**功能描述**
2230

2331
> Hook 方法、构造方法的目标对象实现类。
@@ -150,6 +158,20 @@ var result: Any?
150158

151159
> 获取、设置当前 Hook 对象的 `method``constructor` 的返回值。
152160
161+
## dataExtra <span class="symbol">- field</span>
162+
163+
```kotlin:no-line-numbers
164+
val dataExtra: Bundle
165+
```
166+
167+
**变更记录**
168+
169+
`v1.1.5` `新增`
170+
171+
**功能描述**
172+
173+
> 获取当前回调方法体范围内的数据存储实例。
174+
153175
## hasThrowable <span class="symbol">- field</span>
154176

155177
```kotlin:no-line-numbers

yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/core/YukiMemberHookCreator.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ import com.highcapable.yukihookapi.hook.log.yLoggerW
5252
import com.highcapable.yukihookapi.hook.param.HookParam
5353
import com.highcapable.yukihookapi.hook.param.PackageParam
5454
import com.highcapable.yukihookapi.hook.type.java.*
55+
import com.highcapable.yukihookapi.hook.utils.RandomSeed
5556
import com.highcapable.yukihookapi.hook.utils.await
5657
import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType
5758
import java.lang.reflect.Constructor
@@ -220,6 +221,15 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
220221
/** 是否已经执行 Hook */
221222
private var isHooked = false
222223

224+
/** [beforeHook] 回调方法体 ID */
225+
private val beforeHookId = RandomSeed.createString()
226+
227+
/** [afterHook] 回调方法体 ID */
228+
private val afterHookId = RandomSeed.createString()
229+
230+
/** [replaceAny]、[replaceUnit] 回调方法体 ID */
231+
private val replaceHookId = RandomSeed.createString()
232+
223233
/** [beforeHook] 回调 */
224234
private var beforeHookCallback: (HookParam.() -> Unit)? = null
225235

@@ -574,7 +584,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
574584
/** 定义替换 Hook 回调方法体 */
575585
val replaceMent = object : YukiMemberReplacement(priority.toPriority()) {
576586
override fun replaceHookedMember(param: Param) =
577-
replaceHookParam.assign(param).let { assign ->
587+
replaceHookParam.assign(replaceHookId, param).let { assign ->
578588
runCatching {
579589
replaceHookCallback?.invoke(assign).also {
580590
checkingReturnType((param.member as? Method?)?.returnType, it?.javaClass)
@@ -600,7 +610,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
600610
/** 定义前后 Hook 回调方法体 */
601611
val beforeAfterHook = object : YukiMemberHook(priority.toPriority()) {
602612
override fun beforeHookedMember(param: Param) {
603-
beforeHookParam.assign(param).also { assign ->
613+
beforeHookParam.assign(beforeHookId, param).also { assign ->
604614
runCatching {
605615
beforeHookCallback?.invoke(assign)
606616
checkingReturnType((param.member as? Method?)?.returnType, param.result?.javaClass)
@@ -616,7 +626,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
616626
}
617627

618628
override fun afterHookedMember(param: Param) {
619-
afterHookParam.assign(param).also { assign ->
629+
afterHookParam.assign(afterHookId, param).also { assign ->
620630
runCatching {
621631
afterHookCallback?.invoke(assign)
622632
if (afterHookCallback != null) onHookLogMsg(msg = "After Hook Member [${this@hook}] done [$tag]")

yukihookapi/src/api/kotlin/com/highcapable/yukihookapi/hook/param/HookParam.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
package com.highcapable.yukihookapi.hook.param
3131

32+
import android.os.Bundle
3233
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator
3334
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator.MemberHookCreator
3435
import com.highcapable.yukihookapi.hook.core.api.helper.YukiHookHelper
@@ -42,12 +43,20 @@ import java.lang.reflect.Method
4243
/**
4344
* Hook 方法、构造方法的目标对象实现类
4445
* @param creatorInstance [YukiMemberHookCreator] 的实例对象
46+
* @param paramId 当前回调方法体 ID
4547
* @param param Hook 结果回调接口
4648
*/
47-
class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param? = null) {
49+
class HookParam internal constructor(
50+
private val creatorInstance: YukiMemberHookCreator,
51+
private var paramId: String = "",
52+
private var param: YukiHookCallback.Param? = null
53+
) {
4854

4955
internal companion object {
5056

57+
/** 每个回调方法体的数据存储实例数据 */
58+
private val dataExtras = HashMap<String, Bundle>()
59+
5160
/** [HookParam] 是否已经执行首次回调事件 */
5261
internal var isCallbackCalled = false
5362

@@ -59,10 +68,12 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
5968

6069
/**
6170
* 在回调中设置 [HookParam] 使用的 [YukiHookCallback.Param]
71+
* @param paramId 当前回调方法体 ID
6272
* @param param Hook 结果回调接口
6373
* @return [HookParam]
6474
*/
65-
internal fun assign(param: YukiHookCallback.Param): HookParam {
75+
internal fun assign(paramId: String, param: YukiHookCallback.Param): HookParam {
76+
this.paramId = paramId
6677
this.param = param
6778
return this
6879
}
@@ -124,6 +135,12 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
124135
param?.result = value
125136
}
126137

138+
/**
139+
* 获取当前回调方法体范围内的数据存储实例
140+
* @return [Bundle]
141+
*/
142+
val dataExtra get() = dataExtras[paramId] ?: Bundle().apply { dataExtras[paramId] = this }
143+
127144
/**
128145
* 判断是否存在设置过的方法调用抛出异常
129146
* @return [Boolean]

0 commit comments

Comments
 (0)