Files
YukiHookAPI/docs/api/public/HookParam.md

749 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## HookParam *- class*
```kotlin
class HookParam internal constructor(private val createrInstance: YukiMemberHookCreater, private var wrapper: HookParamWrapper?)
```
**变更记录**
`v1.0` `添加`
**功能描述**
> Hook 方法、构造方法的目标对象实现类。
### args *- field*
```kotlin
val args: Array<Any?>
```
**变更记录**
`v1.0` 添加
**功能描述**
> 获取当前 Hook 对象 `member` 或 `constructor` 的参数对象数组。
### ~~firstArgs *- field*~~ <!-- {docsify-ignore} -->
**变更记录**
`v1.0` `添加`
`v1.0.75` `移除`
请使用 `args(index = 0)``args().first()`
### ~~lastArgs *- field*~~ <!-- {docsify-ignore} -->
**变更记录**
`v1.0` `添加`
`v1.0.75` `移除`
请使用 `args().last()`
### instance *- field*
```kotlin
val instance: Any
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 获取当前 Hook 实例的对象。
!> 如果你当前 Hook 的对象是一个静态,那么它将不存在实例的对象。
### instanceClass *- field*
```kotlin
val instanceClass: Class<*>
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 获取当前 Hook 实例的类对象。
### member *- field*
```kotlin
val member: Member
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 获取当前 Hook 对象的 `Member`。
在不确定 `Member` 类型为 `Method``Constructor` 时可以使用此方法。
### method *- field*
```kotlin
val method: Method
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 获取当前 Hook 对象的方法。
### constructor *- field*
```kotlin
val constructor: Constructor
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 获取当前 Hook 对象的构造方法。
### result *- field*
```kotlin
var result: Any?
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 获取、设置当前 Hook 对象的 `method` 或 `constructor` 的返回值。
### hasThrowable *- field*
```kotlin
val hasThrowable: Boolean
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 判断是否存在设置过的方法调用抛出异常。
### throwable *- field*
```kotlin
val throwable: Throwable?
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 获取设置的方法调用抛出异常。
### Throwable.throwToApp *- i-ext-method*
```kotlin
fun Throwable.throwToApp()
```
**变更记录**
`v1.0.93` `新增`
**功能描述**
> 向 Hook APP 抛出异常。
使用 `hasThrowable` 判断当前是否存在被抛出的异常。
使用 `throwable` 获取当前设置的方法调用抛出异常。
仅会在回调方法的 `MemberHookCreater.beforeHook` or `MemberHookCreater.afterHook` 中生效。
!> 设置后会同时执行 `resultNull` 方法并将异常抛出给当前 Hook APP。
**功能示例**
Hook 过程中的异常仅会作用于 (Xposed) 宿主环境,目标 Hook APP 不会受到影响。
若想将异常抛给 Hook APP可以直接使用如下方法。
> 示例如下
```kotlin
injectMember {
method {
// ...
}
beforeHook {
RuntimeException("Test Exception").throwToApp()
}
}
```
!> 向 Hook APP 抛出异常<u>**会对其暴露被 Hook 的事实**</u>,是不安全的,容易被检测,请按实际场景合理使用。
### result *- method*
```kotlin
inline fun <reified T> result(): T?
```
**变更记录**
`v1.0.75` `新增`
**功能描述**
> 获取当前 Hook 对象的 `method` 或 `constructor` 的返回值 `T`。
### ~~firstArgs *- method*~~ <!-- {docsify-ignore} -->
**变更记录**
`v1.0.66` `新增`
`v1.0.75` `移除`
### ~~lastArgs *- method*~~ <!-- {docsify-ignore} -->
**变更记录**
`v1.0.66` `新增`
`v1.0.75` `移除`
### instance *- method*
```kotlin
inline fun <reified T> instance(): T
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 获取当前 Hook 实例的对象 `T`。
**功能示例**
你可以通过 `instance` 方法轻松使用泛型 `cast` 为目标对象的类型。
> 示例如下
```kotlin
instance<Activity>().finish()
```
### args *- method*
```kotlin
fun args(): ArgsIndexCondition
```
**变更记录**
`v1.0.75` `新增`
**功能描述**
> 获取当前 Hook 对象的 `method` or `constructor` 的参数数组下标实例化类。
### args *- method*
```kotlin
fun args(index: Int): ArgsModifyer
```
**变更记录**
`v1.0` `添加`
`v1.0.75` `修改`
默认值 `index = 0` 移动到新的使用方法 `args().first()`
**功能描述**
> 获取当前 Hook 对象的 `method` 或 `constructor` 的参数实例化对象类。
**功能示例**
你可以通过 `args` 方法修改当前 Hook 实例的方法、构造方法的参数内容。
你可以直接使用 `set` 方法设置 `param` 为你的目标实例,接受 `Any` 类型。
!> 请确保 `param` 类型为你的目标实例类型。
> 示例如下
```kotlin
args(index = 0).set("modify the value")
```
你可以这样直接设置第一位 `param` 的值。
> 示例如下
```kotlin
args().first().set("modify the value")
```
你还可以直接设置最后一位 `param` 的值。
> 示例如下
```kotlin
args().last().set("modify the value")
```
你还可以使用 `setNull` 方法设置 `param` 为空。
> 示例如下
```kotlin
args(index = 1).setNull()
```
你还可以使用 `setTrue` 方法设置 `param``true`
!> 请确保 `param` 类型为 `Boolean`
> 示例如下
```kotlin
args(index = 1).setTrue()
```
你还可以使用 `setFalse` 方法设置 `param``false`
!> 请确保 `param` 类型为 `Boolean`
> 示例如下
```kotlin
args(index = 1).setFalse()
```
### Member.invokeOriginal *- i-ext-method*
```kotlin
fun <T> Member.invokeOriginal(vararg args: Any?): Any?
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 执行原始 `Member`。
**功能实例**
此方法可以 `invoke` 原始未经 Hook 的 `Member` 对象,取决于原始 `Member` 的参数和类型。
> 示例如下
```kotlin
member.invokeOriginal("test value")
```
### resultTrue *- method*
```kotlin
fun resultTrue()
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 设置当前 Hook 对象方法的 `result` 返回值为 `true`。
!> 请确保 `result` 类型为 `Boolean`
### resultFalse *- method*
```kotlin
fun resultFalse()
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 设置当前 Hook 对象方法的 `result` 返回值为 `false`。
!> 请确保 `result` 类型为 `Boolean`
### resultNull *- method*
```kotlin
fun resultNull()
```
**变更记录**
`v1.0` `添加`
**功能描述**
!> 此方法将强制设置 Hook 对象方法的 `result``null`
### ArgsIndexCondition *- class*
```kotlin
inner class ArgsIndexCondition internal constructor()
```
**变更记录**
`v1.0.75` `新增`
**功能描述**
> 对方法参数的数组下标进行实例化类。
#### first *- method*
```kotlin
fun first(): ArgsModifyer
```
**变更记录**
`v1.0.75` `新增`
**功能描述**
> 获取当前 Hook 对象的 `method` or `constructor` 的参数数组第一位。
#### last *- method*
```kotlin
fun last(): ArgsModifyer
```
**变更记录**
`v1.0.75` `新增`
**功能描述**
> 获取当前 Hook 对象的 `method` or `constructor` 的参数数组最后一位。
### ArgsModifyer *- class*
```kotlin
inner class ArgsModifyer internal constructor(private val index: Int)
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 对方法参数的修改进行实例化类。
#### cast *- method*
```kotlin
fun <T> cast(): T?
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`of`~~`cast`
**功能描述**
> 得到方法参数的实例对象 `T`。
#### byte *- method*
```kotlin
fun byte(): Byte?
```
**变更记录**
`v1.0.68` `新增`
**功能描述**
> 得到方法参数的实例对象 Byte。
#### int *- method*
```kotlin
fun int(): Int
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofInt`~~`int`
**功能描述**
> 得到方法参数的实例对象 Int。
#### long *- method*
```kotlin
fun long(): Long
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofLong`~~`long`
**功能描述**
> 得到方法参数的实例对象 Long。
#### short *- method*
```kotlin
fun short(): Short
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofShort`~~`short`
**功能描述**
> 得到方法参数的实例对象 Short。
#### double *- method*
```kotlin
fun double(): Double
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofDouble`~~`double`
**功能描述**
> 得到方法参数的实例对象 Double。
#### float *- method*
```kotlin
fun float(): Float
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofFloat`~~`float`
**功能描述**
> 得到方法参数的实例对象 Float。
#### string *- method*
```kotlin
fun string(): String
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofString`~~`string`
**功能描述**
> 得到方法参数的实例对象 String。
#### char *- method*
```kotlin
fun char(): Char
```
**变更记录**
`v1.0.68` `新增`
**功能描述**
> 得到方法参数的实例对象 Char。
#### boolean *- method*
```kotlin
fun boolean(): Boolean
```
**变更记录**
`v1.0.66` `新增`
`v1.0.68` `修改`
修改 ~~`ofBoolean`~~`boolean`
**功能描述**
> 得到方法参数的实例对象 Boolean。
#### any *- method*
```kotlin
fun any(): Any?
```
**变更记录**
`v1.0.77` `新增`
**功能描述**
> 得到方法参数的实例对象 Any。
#### array *- method*
```kotlin
inline fun <reified T> array(): Array<T>
```
**变更记录**
`v1.0.68` `新增`
**功能描述**
> 得到方法参数的实例对象 Array。
#### list *- method*
```kotlin
inline fun <reified T> list(): List<T>
```
**变更记录**
`v1.0.68` `新增`
**功能描述**
> 得到方法参数的实例对象 List。
#### set *- method*
```kotlin
fun <T> set(any: T?)
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 设置方法参数的实例对象。
#### setNull *- method*
```kotlin
fun setNull()
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 设置方法参数的实例对象为 `null`。
#### setTrue *- method*
```kotlin
fun setTrue()
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 设置方法参数的实例对象为 `true`。
!> 请确保目标对象的类型是 `Boolean`
#### setFalse *- method*
```kotlin
fun setFalse()
```
**变更记录**
`v1.0` `添加`
**功能描述**
> 设置方法参数的实例对象为 `false`。
!> 请确保目标对象的类型是 `Boolean`