Changed HookParam.kt

This commit is contained in:
2022-04-13 03:29:28 +08:00
parent 5bb2e2ee0a
commit ab1a02477d
4 changed files with 143 additions and 68 deletions

View File

@@ -26,33 +26,25 @@ val args: Array<Any?>
> 获取当前 Hook 对象 `member` 或 `constructor` 的参数对象数组。
### firstArgs [field]
```kotlin
val firstArgs: Any?
```
### ~~firstArgs [field]~~
<b>变更记录</b>
`v1.0` `添加`
<b>功能描述</b>
`v1.0.75` `移除`
> 获取当前 Hook 对象 `member` 或 `constructor` 的参数对象数组第一位。
请使用 `args(index = 0)``args().first()`
### lastArgs [field]
```kotlin
val lastArgs: Any?
```
### ~~lastArgs [field]~~
<b>变更记录</b>
`v1.0` `添加`
<b>功能描述</b>
`v1.0.75` `移除`
> 获取当前 Hook 对象 `member` 或 `constructor` 的参数对象数组最后一位。
请使用 `args().last()`
### instance [field]
@@ -126,33 +118,35 @@ var result: Any?
> 获取、设置当前 Hook 对象的 `method` 或 `constructor` 的返回值。
### firstArgs [method]
### result [method]
```kotlin
inline fun <reified T> firstArgs(): T?
inline fun <reified T> result(): T?
```
<b>变更记录</b>
`v1.0.75` `新增`
<b>功能描述</b>
> 获取当前 Hook 对象的 `method` 或 `constructor` 的返回值 `T`。
### ~~firstArgs [method]~~
<b>变更记录</b>
`v1.0.66` `新增`
<b>功能描述</b>
`v1.0.75` `移除`
> 获取当前 Hook 对象 [method] or [constructor] 的参数对象数组第一位 `T`。
### lastArgs [method]
```kotlin
inline fun <reified T> lastArgs(): T?
```
### ~~lastArgs [method]~~
<b>变更记录</b>
`v1.0.66` `新增`
<b>功能描述</b>
> 获取当前 Hook 对象 [method] or [constructor] 的参数对象数组最后一位 `T`。
`v1.0.75` `移除`
### instance [method]
@@ -180,6 +174,20 @@ instance<Activity>().finish()
### args [method]
```kotlin
fun args(): ArgsIndexCondition
```
<b>变更记录</b>
`v1.0.75` `新增`
<b>功能描述</b>
> 获取当前 Hook 对象的 `method` or `constructor` 的参数数组下标实例化类。
### args [method]
```kotlin
fun args(index: Int): ArgsModifyer
```
@@ -188,6 +196,10 @@ fun args(index: Int): ArgsModifyer
`v1.0` `添加`
`v1.0.75` `修改`
默认值 `index = 0` 移动到新的使用方法 `args().first()`
<b>功能描述</b>
> 获取当前 Hook 对象的 `method` 或 `constructor` 的参数实例化对象类。
@@ -196,8 +208,6 @@ fun args(index: Int): ArgsModifyer
你可以通过 `args` 方法修改当前 Hook 实例的方法、构造方法的参数内容。
`index` 的默认值为 `0`,如果只有一位 `param` 参数,你可以不写。
你可以直接使用 `set` 方法设置 `param` 为你的目标实例,接受 `Any` 类型。
!> 请确保 `param` 类型为你的目标实例类型。
@@ -205,7 +215,23 @@ fun args(index: Int): ArgsModifyer
> 示例如下
```kotlin
args().set("modify the value")
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` 为空。
@@ -223,7 +249,7 @@ args(index = 1).setNull()
> 示例如下
```kotlin
args(index = 2).setTrue()
args(index = 1).setTrue()
```
你还可以使用 `setFalse` 方法设置 `param``false`
@@ -233,7 +259,7 @@ args(index = 2).setTrue()
> 示例如下
```kotlin
args(index = 3).setFalse()
args(index = 1).setFalse()
```
### invokeOriginal [method]
@@ -306,6 +332,48 @@ fun resultNull()
!> 此方法将强制设置 Hook 对象方法的 `result``null`
### ArgsIndexCondition [class]
```kotlin
inner class ArgsIndexCondition
```
<b>变更记录</b>
`v1.0.75` `新增`
<b>功能描述</b>
> 对方法参数的数组下标进行实例化类。
#### first [method]
```kotlin
fun first(): ArgsModifyer
```
<b>变更记录</b>
`v1.0.75` `新增`
<b>功能描述</b>
> 获取当前 Hook 对象的 `method` or `constructor` 的参数数组第一位。
#### last [method]
```kotlin
fun last(): ArgsModifyer
```
<b>变更记录</b>
`v1.0.75` `新增`
<b>功能描述</b>
> 获取当前 Hook 对象的 `method` or `constructor` 的参数数组最后一位。
### ArgsModifyer [class]
```kotlin

View File

@@ -438,11 +438,11 @@ class MainActivity : AppCompatActivity() {
`YukiHookModulePrefs` 支持的类型只有 `String``Int``Float``Long``Boolean`,请传入支持的类型。
!> `IllegalStateException` HookParam args is empty
!> `IllegalStateException` HookParam Method args index must be >= 0
<b>异常原因</b>
`HookParam` 中调用 `firstArgs``lastArgs` 但原始 `param` 数组为空
`HookParam` 中调用 `args().last()` 但是目标 `param` 为空`args` 中的 `index` 设置了小于 0 的数值
> 示例如下
@@ -450,17 +450,17 @@ class MainActivity : AppCompatActivity() {
injectMember {
// ...
afterHook {
// 调用了此变量
firstArgs...
// 调用了此变量
lastArgs...
// 假设 param 是空的
args().last()...
// 设置了小于 0 的 index
args(index = -5)...
}
}
```
<b>解决方案</b>
请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,否则你无法使用此功能
请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,且不能对 `args` 的下标设置小于 0 的数值
!> `IllegalStateException` HookParam instance got null! Is this a static member?