mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Modify add dataExtra function and callback function id in HookParam, YukiMemberHookCreator
This commit is contained in:
@@ -13,7 +13,11 @@ You can use the **Chrome Translation Plugin** to translate entire pages for refe
|
|||||||
# HookParam <span class="symbol">- class</span>
|
# HookParam <span class="symbol">- class</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param?)
|
class HookParam internal constructor(
|
||||||
|
private val creatorInstance: YukiMemberHookCreator,
|
||||||
|
private var paramId: String,
|
||||||
|
private var param: YukiHookCallback.Param?
|
||||||
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
**Change Records**
|
**Change Records**
|
||||||
@@ -26,6 +30,10 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
|
|||||||
|
|
||||||
修正拼写错误的 **creater** 命名到 **creator**
|
修正拼写错误的 **creater** 命名到 **creator**
|
||||||
|
|
||||||
|
`v1.1.5` `modified`
|
||||||
|
|
||||||
|
新增 `paramId` 参数
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> Hook 方法、构造方法的目标对象实现类。
|
> Hook 方法、构造方法的目标对象实现类。
|
||||||
@@ -158,6 +166,20 @@ var result: Any?
|
|||||||
|
|
||||||
> 获取、设置当前 Hook 对象的 `method` 或 `constructor` 的返回值。
|
> 获取、设置当前 Hook 对象的 `method` 或 `constructor` 的返回值。
|
||||||
|
|
||||||
|
## dataExtra <span class="symbol">- field</span>
|
||||||
|
|
||||||
|
```kotlin:no-line-numbers
|
||||||
|
val dataExtra: Bundle
|
||||||
|
```
|
||||||
|
|
||||||
|
**Change Records**
|
||||||
|
|
||||||
|
`v1.1.5` `added`
|
||||||
|
|
||||||
|
**Function Illustrate**
|
||||||
|
|
||||||
|
> 获取当前回调方法体范围内的数据存储实例。
|
||||||
|
|
||||||
## hasThrowable <span class="symbol">- field</span>
|
## hasThrowable <span class="symbol">- field</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
|
@@ -5,7 +5,11 @@ pageClass: code-page
|
|||||||
# HookParam <span class="symbol">- class</span>
|
# HookParam <span class="symbol">- class</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
class HookParam internal constructor(private val creatorInstance: YukiMemberHookCreator, private var param: YukiHookCallback.Param?)
|
class HookParam internal constructor(
|
||||||
|
private val creatorInstance: YukiMemberHookCreator,
|
||||||
|
private var paramId: String,
|
||||||
|
private var param: YukiHookCallback.Param?
|
||||||
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -18,6 +22,10 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
|
|||||||
|
|
||||||
修正拼写错误的 **creater** 命名到 **creator**
|
修正拼写错误的 **creater** 命名到 **creator**
|
||||||
|
|
||||||
|
`v1.1.5` `修改`
|
||||||
|
|
||||||
|
新增 `paramId` 参数
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> Hook 方法、构造方法的目标对象实现类。
|
> Hook 方法、构造方法的目标对象实现类。
|
||||||
@@ -150,6 +158,20 @@ var result: Any?
|
|||||||
|
|
||||||
> 获取、设置当前 Hook 对象的 `method` 或 `constructor` 的返回值。
|
> 获取、设置当前 Hook 对象的 `method` 或 `constructor` 的返回值。
|
||||||
|
|
||||||
|
## dataExtra <span class="symbol">- field</span>
|
||||||
|
|
||||||
|
```kotlin:no-line-numbers
|
||||||
|
val dataExtra: Bundle
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.1.5` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
|
> 获取当前回调方法体范围内的数据存储实例。
|
||||||
|
|
||||||
## hasThrowable <span class="symbol">- field</span>
|
## hasThrowable <span class="symbol">- field</span>
|
||||||
|
|
||||||
```kotlin:no-line-numbers
|
```kotlin:no-line-numbers
|
||||||
|
@@ -52,6 +52,7 @@ import com.highcapable.yukihookapi.hook.log.yLoggerW
|
|||||||
import com.highcapable.yukihookapi.hook.param.HookParam
|
import com.highcapable.yukihookapi.hook.param.HookParam
|
||||||
import com.highcapable.yukihookapi.hook.param.PackageParam
|
import com.highcapable.yukihookapi.hook.param.PackageParam
|
||||||
import com.highcapable.yukihookapi.hook.type.java.*
|
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.utils.await
|
||||||
import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType
|
import com.highcapable.yukihookapi.hook.xposed.bridge.type.HookEntryType
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
@@ -220,6 +221,15 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
|||||||
/** 是否已经执行 Hook */
|
/** 是否已经执行 Hook */
|
||||||
private var isHooked = false
|
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] 回调 */
|
/** [beforeHook] 回调 */
|
||||||
private var beforeHookCallback: (HookParam.() -> Unit)? = null
|
private var beforeHookCallback: (HookParam.() -> Unit)? = null
|
||||||
|
|
||||||
@@ -574,7 +584,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
|||||||
/** 定义替换 Hook 回调方法体 */
|
/** 定义替换 Hook 回调方法体 */
|
||||||
val replaceMent = object : YukiMemberReplacement(priority.toPriority()) {
|
val replaceMent = object : YukiMemberReplacement(priority.toPriority()) {
|
||||||
override fun replaceHookedMember(param: Param) =
|
override fun replaceHookedMember(param: Param) =
|
||||||
replaceHookParam.assign(param).let { assign ->
|
replaceHookParam.assign(replaceHookId, param).let { assign ->
|
||||||
runCatching {
|
runCatching {
|
||||||
replaceHookCallback?.invoke(assign).also {
|
replaceHookCallback?.invoke(assign).also {
|
||||||
checkingReturnType((param.member as? Method?)?.returnType, it?.javaClass)
|
checkingReturnType((param.member as? Method?)?.returnType, it?.javaClass)
|
||||||
@@ -600,7 +610,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
|||||||
/** 定义前后 Hook 回调方法体 */
|
/** 定义前后 Hook 回调方法体 */
|
||||||
val beforeAfterHook = object : YukiMemberHook(priority.toPriority()) {
|
val beforeAfterHook = object : YukiMemberHook(priority.toPriority()) {
|
||||||
override fun beforeHookedMember(param: Param) {
|
override fun beforeHookedMember(param: Param) {
|
||||||
beforeHookParam.assign(param).also { assign ->
|
beforeHookParam.assign(beforeHookId, param).also { assign ->
|
||||||
runCatching {
|
runCatching {
|
||||||
beforeHookCallback?.invoke(assign)
|
beforeHookCallback?.invoke(assign)
|
||||||
checkingReturnType((param.member as? Method?)?.returnType, param.result?.javaClass)
|
checkingReturnType((param.member as? Method?)?.returnType, param.result?.javaClass)
|
||||||
@@ -616,7 +626,7 @@ class YukiMemberHookCreator @PublishedApi internal constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun afterHookedMember(param: Param) {
|
override fun afterHookedMember(param: Param) {
|
||||||
afterHookParam.assign(param).also { assign ->
|
afterHookParam.assign(afterHookId, param).also { assign ->
|
||||||
runCatching {
|
runCatching {
|
||||||
afterHookCallback?.invoke(assign)
|
afterHookCallback?.invoke(assign)
|
||||||
if (afterHookCallback != null) onHookLogMsg(msg = "After Hook Member [${this@hook}] done [$tag]")
|
if (afterHookCallback != null) onHookLogMsg(msg = "After Hook Member [${this@hook}] done [$tag]")
|
||||||
|
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
package com.highcapable.yukihookapi.hook.param
|
package com.highcapable.yukihookapi.hook.param
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator
|
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator
|
||||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator.MemberHookCreator
|
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreator.MemberHookCreator
|
||||||
import com.highcapable.yukihookapi.hook.core.api.helper.YukiHookHelper
|
import com.highcapable.yukihookapi.hook.core.api.helper.YukiHookHelper
|
||||||
@@ -42,12 +43,20 @@ import java.lang.reflect.Method
|
|||||||
/**
|
/**
|
||||||
* Hook 方法、构造方法的目标对象实现类
|
* Hook 方法、构造方法的目标对象实现类
|
||||||
* @param creatorInstance [YukiMemberHookCreator] 的实例对象
|
* @param creatorInstance [YukiMemberHookCreator] 的实例对象
|
||||||
|
* @param paramId 当前回调方法体 ID
|
||||||
* @param param Hook 结果回调接口
|
* @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 {
|
internal companion object {
|
||||||
|
|
||||||
|
/** 每个回调方法体的数据存储实例数据 */
|
||||||
|
private val dataExtras = HashMap<String, Bundle>()
|
||||||
|
|
||||||
/** [HookParam] 是否已经执行首次回调事件 */
|
/** [HookParam] 是否已经执行首次回调事件 */
|
||||||
internal var isCallbackCalled = false
|
internal var isCallbackCalled = false
|
||||||
|
|
||||||
@@ -59,10 +68,12 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 在回调中设置 [HookParam] 使用的 [YukiHookCallback.Param]
|
* 在回调中设置 [HookParam] 使用的 [YukiHookCallback.Param]
|
||||||
|
* @param paramId 当前回调方法体 ID
|
||||||
* @param param Hook 结果回调接口
|
* @param param Hook 结果回调接口
|
||||||
* @return [HookParam]
|
* @return [HookParam]
|
||||||
*/
|
*/
|
||||||
internal fun assign(param: YukiHookCallback.Param): HookParam {
|
internal fun assign(paramId: String, param: YukiHookCallback.Param): HookParam {
|
||||||
|
this.paramId = paramId
|
||||||
this.param = param
|
this.param = param
|
||||||
return this
|
return this
|
||||||
}
|
}
|
||||||
@@ -124,6 +135,12 @@ class HookParam internal constructor(private val creatorInstance: YukiMemberHook
|
|||||||
param?.result = value
|
param?.result = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前回调方法体范围内的数据存储实例
|
||||||
|
* @return [Bundle]
|
||||||
|
*/
|
||||||
|
val dataExtra get() = dataExtras[paramId] ?: Bundle().apply { dataExtras[paramId] = this }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断是否存在设置过的方法调用抛出异常
|
* 判断是否存在设置过的方法调用抛出异常
|
||||||
* @return [Boolean]
|
* @return [Boolean]
|
||||||
|
Reference in New Issue
Block a user