mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-05 18:25:28 +08:00
fix: HookParam call timing problem and refactor HookParam
This commit is contained in:
@@ -13,7 +13,7 @@ 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(
|
class HookParam private constructor(
|
||||||
private val creatorInstance: YukiMemberHookCreator,
|
private val creatorInstance: YukiMemberHookCreator,
|
||||||
private var paramId: String,
|
private var paramId: String,
|
||||||
private var param: YukiHookCallback.Param?
|
private var param: YukiHookCallback.Param?
|
||||||
@@ -34,6 +34,10 @@ class HookParam internal constructor(
|
|||||||
|
|
||||||
新增 `paramId` 参数
|
新增 `paramId` 参数
|
||||||
|
|
||||||
|
`v1.2.0` `modified`
|
||||||
|
|
||||||
|
不再开放构造方法
|
||||||
|
|
||||||
**Function Illustrate**
|
**Function Illustrate**
|
||||||
|
|
||||||
> Hook 方法、构造方法的目标对象实现类。
|
> Hook 方法、构造方法的目标对象实现类。
|
||||||
|
@@ -5,7 +5,7 @@ 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(
|
class HookParam private constructor(
|
||||||
private val creatorInstance: YukiMemberHookCreator,
|
private val creatorInstance: YukiMemberHookCreator,
|
||||||
private var paramId: String,
|
private var paramId: String,
|
||||||
private var param: YukiHookCallback.Param?
|
private var param: YukiHookCallback.Param?
|
||||||
@@ -26,6 +26,10 @@ class HookParam internal constructor(
|
|||||||
|
|
||||||
新增 `paramId` 参数
|
新增 `paramId` 参数
|
||||||
|
|
||||||
|
`v1.2.0` `修改`
|
||||||
|
|
||||||
|
不再开放构造方法
|
||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> Hook 方法、构造方法的目标对象实现类。
|
> Hook 方法、构造方法的目标对象实现类。
|
||||||
|
@@ -585,13 +585,10 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
|||||||
* @return [YukiHookResult]
|
* @return [YukiHookResult]
|
||||||
*/
|
*/
|
||||||
private fun Member.hook(): YukiHookResult {
|
private fun Member.hook(): YukiHookResult {
|
||||||
/** 定义替换 Hook 的 [HookParam] */
|
|
||||||
val replaceHookParam = HookParam(creatorInstance = this@YukiMemberHookCreator)
|
|
||||||
|
|
||||||
/** 定义替换 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(replaceHookId, param).let { assign ->
|
HookParam.create(this@YukiMemberHookCreator, 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)
|
||||||
@@ -608,16 +605,10 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 定义前 Hook 的 [HookParam] */
|
|
||||||
val beforeHookParam = HookParam(creatorInstance = this@YukiMemberHookCreator)
|
|
||||||
|
|
||||||
/** 定义后 Hook 的 [HookParam] */
|
|
||||||
val afterHookParam = HookParam(creatorInstance = this@YukiMemberHookCreator)
|
|
||||||
|
|
||||||
/** 定义前后 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(beforeHookId, param).also { assign ->
|
HookParam.create(this@YukiMemberHookCreator, 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)
|
||||||
@@ -633,7 +624,7 @@ class YukiMemberHookCreator internal constructor(private val packageParam: Packa
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun afterHookedMember(param: Param) {
|
override fun afterHookedMember(param: Param) {
|
||||||
afterHookParam.assign(afterHookId, param).also { assign ->
|
HookParam.create(this@YukiMemberHookCreator, afterHookId, param).also { assign ->
|
||||||
runCatching {
|
runCatching {
|
||||||
afterHookCallback?.invoke(assign)
|
afterHookCallback?.invoke(assign)
|
||||||
if (afterHookCallback != null) YLog.innerD("After Hook Member [${this@hook}] done [$tag]")
|
if (afterHookCallback != null) YLog.innerD("After Hook Member [${this@hook}] done [$tag]")
|
||||||
|
@@ -46,7 +46,7 @@ import java.lang.reflect.Method
|
|||||||
* @param paramId 当前回调方法体 ID
|
* @param paramId 当前回调方法体 ID
|
||||||
* @param param Hook 结果回调接口
|
* @param param Hook 结果回调接口
|
||||||
*/
|
*/
|
||||||
class HookParam internal constructor(
|
class HookParam private constructor(
|
||||||
private val creatorInstance: YukiMemberHookCreator,
|
private val creatorInstance: YukiMemberHookCreator,
|
||||||
private var paramId: String = "",
|
private var paramId: String = "",
|
||||||
private var param: YukiHookCallback.Param? = null
|
private var param: YukiHookCallback.Param? = null
|
||||||
@@ -60,24 +60,22 @@ class HookParam internal constructor(
|
|||||||
/** [HookParam] 是否已经执行首次回调事件 */
|
/** [HookParam] 是否已经执行首次回调事件 */
|
||||||
internal var isCallbackCalled = false
|
internal var isCallbackCalled = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建新的 [HookParam]
|
||||||
|
* @param creatorInstance [YukiMemberHookCreator] 的实例对象
|
||||||
|
* @param paramId 当前回调方法体 ID
|
||||||
|
* @param param Hook 结果回调接口
|
||||||
|
* @return [HookParam]
|
||||||
|
*/
|
||||||
|
internal fun create(creatorInstance: YukiMemberHookCreator, paramId: String, param: YukiHookCallback.Param) =
|
||||||
|
HookParam(creatorInstance, paramId, param)
|
||||||
|
|
||||||
/** 设置 [HookParam] 执行首次回调事件 */
|
/** 设置 [HookParam] 执行首次回调事件 */
|
||||||
internal fun invoke() {
|
internal fun invoke() {
|
||||||
isCallbackCalled = true
|
isCallbackCalled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 在回调中设置 [HookParam] 使用的 [YukiHookCallback.Param]
|
|
||||||
* @param paramId 当前回调方法体 ID
|
|
||||||
* @param param Hook 结果回调接口
|
|
||||||
* @return [HookParam]
|
|
||||||
*/
|
|
||||||
internal fun assign(paramId: String, param: YukiHookCallback.Param): HookParam {
|
|
||||||
this.paramId = paramId
|
|
||||||
this.param = param
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook 对象 [method] or [constructor] 的参数对象数组
|
* 获取当前 Hook 对象 [method] or [constructor] 的参数对象数组
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user