mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 02:35:40 +08:00
Modify throwable function to throwToApp in HookParam
This commit is contained in:
@@ -137,7 +137,7 @@ var result: Any?
|
|||||||
### hasThrowable [field]
|
### hasThrowable [field]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
var hasThrowable: Boolean
|
val hasThrowable: Boolean
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -151,7 +151,7 @@ var hasThrowable: Boolean
|
|||||||
### throwable [field]
|
### throwable [field]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
var throwable: Throwable?
|
val throwable: Throwable?
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
**变更记录**
|
||||||
@@ -160,27 +160,50 @@ var throwable: Throwable?
|
|||||||
|
|
||||||
**功能描述**
|
**功能描述**
|
||||||
|
|
||||||
> 获取、设置方法调用抛出的异常。
|
> 获取设置的方法调用抛出异常。
|
||||||
|
|
||||||
|
### throwToApp [method]
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
fun Throwable.throwToApp()
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.0.93` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
|
> 向 Hook APP 抛出异常。
|
||||||
|
|
||||||
|
使用 `hasThrowable` 判断当前是否存在被抛出的异常。
|
||||||
|
|
||||||
|
使用 `throwable` 获取当前设置的方法调用抛出异常。
|
||||||
|
|
||||||
仅会在回调方法的 `MemberHookCreater.beforeHook` or `MemberHookCreater.afterHook` 中生效。
|
仅会在回调方法的 `MemberHookCreater.beforeHook` or `MemberHookCreater.afterHook` 中生效。
|
||||||
|
|
||||||
你可以使用 `hasThrowable` 判断当前是否存在被抛出的异常。
|
!> 设置后会同时执行 `resultNull` 方法并将异常抛出给当前 Hook APP。
|
||||||
|
|
||||||
!> 设置后会同时执行 `resultNull` 方法并将异常抛出给当前宿主 APP。
|
**功能示例**
|
||||||
|
|
||||||
### resultOrThrowable [field]
|
Hook 过程中的异常仅会作用于 (Xposed) 宿主环境,目标 Hook APP 不会受到影响。
|
||||||
|
|
||||||
|
若想将异常抛给 Hook APP,可以直接使用如下方法。
|
||||||
|
|
||||||
|
> 示例如下
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
var resultOrThrowable: Any?
|
injectMember {
|
||||||
|
method {
|
||||||
|
// ...
|
||||||
|
}
|
||||||
|
beforeHook {
|
||||||
|
RuntimeException("Test Exception").throwToApp()
|
||||||
|
}
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
**变更记录**
|
!> 向 Hook APP 抛出异常<u>**会对其暴露被 Hook 的事实**</u>,是不安全的,容易被检测,请按实际场景合理使用。
|
||||||
|
|
||||||
`v1.0.93` `新增`
|
|
||||||
|
|
||||||
**功能描述**
|
|
||||||
|
|
||||||
> 获取 `result` 或 `throwable`,存在 `throwable` 时优先返回。
|
|
||||||
|
|
||||||
### result [method]
|
### result [method]
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@ package com.highcapable.yukihookapi.hook.param
|
|||||||
|
|
||||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreater
|
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreater
|
||||||
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreater.MemberHookCreater
|
import com.highcapable.yukihookapi.hook.core.YukiMemberHookCreater.MemberHookCreater
|
||||||
|
import com.highcapable.yukihookapi.hook.log.yLoggerE
|
||||||
import com.highcapable.yukihookapi.hook.param.wrapper.HookParamWrapper
|
import com.highcapable.yukihookapi.hook.param.wrapper.HookParamWrapper
|
||||||
import java.lang.reflect.Constructor
|
import java.lang.reflect.Constructor
|
||||||
import java.lang.reflect.Member
|
import java.lang.reflect.Member
|
||||||
@@ -90,23 +91,23 @@ class HookParam internal constructor(private val createrInstance: YukiMemberHook
|
|||||||
*
|
*
|
||||||
* 在不确定 [Member] 类型为 [Method] 或 [Constructor] 时可以使用此方法
|
* 在不确定 [Member] 类型为 [Method] 或 [Constructor] 时可以使用此方法
|
||||||
* @return [Member]
|
* @return [Member]
|
||||||
* @throws IllegalStateException 如果 [Member] 为空
|
* @throws IllegalStateException 如果 [member] 为空
|
||||||
*/
|
*/
|
||||||
val member get() = wrapper?.member ?: error("Current hook Member is null")
|
val member get() = wrapper?.member ?: error("Current hooked Member is null")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook 对象的方法
|
* 获取当前 Hook 对象的方法
|
||||||
* @return [Method]
|
* @return [Method]
|
||||||
* @throws IllegalStateException 如果 [Method] 为空或方法类型不是 [Method]
|
* @throws IllegalStateException 如果 [member] 类型不是 [Method]
|
||||||
*/
|
*/
|
||||||
val method get() = wrapper?.member as? Method? ?: error("Current hook Method type is wrong or null")
|
val method get() = member as? Method? ?: error("Current hooked Member is not a Method")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook 对象的构造方法
|
* 获取当前 Hook 对象的构造方法
|
||||||
* @return [Constructor]
|
* @return [Constructor]
|
||||||
* @throws IllegalStateException 如果 [Constructor] 为空或方法类型不是 [Constructor]
|
* @throws IllegalStateException 如果 [member] 类型不是 [Constructor]
|
||||||
*/
|
*/
|
||||||
val constructor get() = wrapper?.member as? Constructor<*>? ?: error("Current hook Constructor type is wrong or null")
|
val constructor get() = member as? Constructor<*>? ?: error("Current hooked Member is not a Constructor")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取、设置当前 Hook 对象的 [method] or [constructor] 的返回值
|
* 获取、设置当前 Hook 对象的 [method] or [constructor] 的返回值
|
||||||
@@ -125,27 +126,28 @@ class HookParam internal constructor(private val createrInstance: YukiMemberHook
|
|||||||
val hasThrowable get() = wrapper?.hasThrowable
|
val hasThrowable get() = wrapper?.hasThrowable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取、设置方法调用抛出的异常
|
* 获取设置的方法调用抛出异常
|
||||||
|
* @return [Throwable] or null
|
||||||
|
*/
|
||||||
|
val throwable get() = wrapper?.throwable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 向 Hook APP 抛出异常
|
||||||
*
|
*
|
||||||
* 仅会在回调方法的 [MemberHookCreater.beforeHook] or [MemberHookCreater.afterHook] 中生效
|
* 使用 [hasThrowable] 判断当前是否存在被抛出的异常
|
||||||
*
|
*
|
||||||
* 你可以使用 [hasThrowable] 判断当前是否存在被抛出的异常
|
* 使用 [throwable] 获取当前设置的方法调用抛出异常
|
||||||
*
|
*
|
||||||
* - ❗设置后会同时执行 [resultNull] 方法并将异常抛出给当前宿主 APP
|
* - 仅会在回调方法的 [MemberHookCreater.beforeHook] or [MemberHookCreater.afterHook] 中生效
|
||||||
|
*
|
||||||
|
* - ❗设置后会同时执行 [resultNull] 方法并将异常抛出给当前 Hook APP
|
||||||
* @return [Throwable] or null
|
* @return [Throwable] or null
|
||||||
* @throws Throwable
|
* @throws Throwable
|
||||||
*/
|
*/
|
||||||
var throwable: Throwable?
|
fun Throwable.throwToApp() {
|
||||||
get() = wrapper?.throwable
|
wrapper?.throwable = this
|
||||||
set(value) {
|
yLoggerE(msg = message ?: "$this", e = this)
|
||||||
wrapper?.throwable = value
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 [result] 或 [throwable] - 存在 [throwable] 时优先返回
|
|
||||||
* @return [Any] or [Throwable] or null
|
|
||||||
*/
|
|
||||||
val resultOrThrowable get() = wrapper?.resultOrThrowable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取当前 Hook 对象的 [method] or [constructor] 的返回值 [T]
|
* 获取当前 Hook 对象的 [method] or [constructor] 的返回值 [T]
|
||||||
|
@@ -97,12 +97,6 @@ class HookParamWrapper internal constructor(private var baseParam: XC_MethodHook
|
|||||||
baseParam?.throwable = value
|
baseParam?.throwable = value
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取 [result] 或 [throwable] - 存在 [throwable] 时优先返回
|
|
||||||
* @return [Any] or null
|
|
||||||
*/
|
|
||||||
val resultOrThrowable get() = baseParam?.resultOrThrowable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置方法参数
|
* 设置方法参数
|
||||||
* @param index 数组下标
|
* @param index 数组下标
|
||||||
|
Reference in New Issue
Block a user