## 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` `新增`

**功能描述**

> 获取设置的方法调用抛出异常。

### throwToApp [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()
```

### invokeOriginal [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`。