Fix typo "查询" with "查找" in code note and documentation

This commit is contained in:
2022-09-21 14:50:27 +08:00
parent f9dab473a4
commit ca56c63889
34 changed files with 207 additions and 207 deletions

View File

@@ -99,11 +99,11 @@
- `PackageParam``loadApp` 新增不写 `name` 功能,默认筛选全部 APP
- `PackageParam` 新增 `loadZygote` 方法,可直接 Hook 系统框架
- `PackageParam` 新增 `resources().hook` 功能
- 优化方法、构造方法、变量查找功能,找不到的错误日志将优先显示已设置的查条件
- 优化方法、构造方法、变量查找功能,找不到的错误日志将优先显示已设置的查条件
- 增加 `hasExtends` 扩展方法,可判断当前 `Class` 是否有继承关系
- 增加 `isSupportResourcesHook` 功能,判断当前是否支持资源钩子(Resources Hook)
- `current` 功能新增 `superClass` 方法调用父类
- 查找方法、构造方法、变量新增 `superClass`条件,可继续在父类中查找
- 查找方法、构造方法、变量新增 `superClass`条件,可继续在父类中查找
- `YukiHookAPI` 大量方法与 Xposed API 解耦合
- 新增 Xposed API 的原生 Hook 优先级功能
- 修复 `isFirstApplication` 可能判断不准确的问题
@@ -139,7 +139,7 @@
- `HookParam` 中删除了 `firstArgs``lastArgs` 方法,现在你可以使用 `args().first()``args().last()` 来取代它
- `HookParam` 中删除了 `args()` 中的默认参数 `index = 0`,现在你可以使用 `args().first()``args(index = 0)` 来取代它
- `HookParam``result` 功能增加了泛型匹配,现在你可以使用 `result<T>` 来匹配你的目标方法已知返回值类型了
- 方法、构造方法查功能新增 `emptyParam` 条件,并完善了文档相关需要注意的查条件误区
- 方法、构造方法查功能新增 `emptyParam` 条件,并完善了文档相关需要注意的查条件误区
- 增加了 `type` 中的 `android` 类型
### 1.0.73 | 2022.04.10

View File

@@ -228,7 +228,7 @@ fun members(vararg member: Member?)
**功能示例**
你可以调用 `instanceClass` 来手动查要 Hook 的 `Method`、`Constructor`。
你可以调用 `instanceClass` 来手动查要 Hook 的 `Method`、`Constructor`。
> 示例如下
@@ -332,7 +332,7 @@ injectMember {
}
```
若想 Hook 当前查 `method { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
若想 Hook 当前查 `method { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
> 示例如下
@@ -347,11 +347,11 @@ injectMember {
}
```
此时 `beforeHook` 与 `afterHook` 会在每个查到的结果中多次回调 Hook 方法体。
此时 `beforeHook` 与 `afterHook` 会在每个查到的结果中多次回调 Hook 方法体。
::: warning
若没有 **all**,默认只会 Hook 当前条件查到的数组下标结果第一位。
若没有 **all**,默认只会 Hook 当前条件查到的数组下标结果第一位。
:::
@@ -387,7 +387,7 @@ injectMember {
}
```
若想 Hook 当前查 `constructor { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
若想 Hook 当前查 `constructor { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
> 示例如下
@@ -399,11 +399,11 @@ injectMember {
}
```
此时 `beforeHook` 与 `afterHook` 会在每个查到的结果中多次回调 Hook 方法体。
此时 `beforeHook` 与 `afterHook` 会在每个查到的结果中多次回调 Hook 方法体。
::: warning
若没有 **all**,默认只会 Hook 当前条件查到的数组下标结果第一位。
若没有 **all**,默认只会 Hook 当前条件查到的数组下标结果第一位。
:::
@@ -439,7 +439,7 @@ injectMember {
returnType = UnitType
}
afterHook {
// 这里不需要再调用 instanceClass.field 进行查
// 这里不需要再调用 instanceClass.field 进行查
field {
name = "isSweet"
type = BooleanType

View File

@@ -64,7 +64,7 @@ var fullName: String
> 设置 `Class` 完整名称。
只会查匹配到的 `Class.getName`。
只会查匹配到的 `Class.getName`。
例如 `com.demo.Test` 需要填写 `com.demo.Test`。
@@ -82,7 +82,7 @@ var simpleName: String
> 设置 `Class` 简单名称。
只会查匹配到的 `Class.getSimpleName`。
只会查匹配到的 `Class.getSimpleName`。
例如 `com.demo.Test` 只需要填写 `Test`。
@@ -120,9 +120,9 @@ fun from(vararg name: String): FromPackageRules
**功能描述**
> 设置在指定包名范围查当前 `Class`。
> 设置在指定包名范围查当前 `Class`。
设置后仅会在当前 `name` 开头匹配的包名路径下进行查,可提升查速度。
设置后仅会在当前 `name` 开头匹配的包名路径下进行查,可提升查速度。
例如 ↓
@@ -132,7 +132,7 @@ fun from(vararg name: String): FromPackageRules
::: warning
建议设置此参数指定查范围,否则 **Class** 过多时将会非常慢。
建议设置此参数指定查范围,否则 **Class** 过多时将会非常慢。
:::
@@ -166,7 +166,7 @@ fun fullName(value: String): ClassNameRules
> 设置 `Class` 完整名称。
只会查匹配到的 `Class.getName`。
只会查匹配到的 `Class.getName`。
例如 `com.demo.Test` 需要填写 `com.demo.Test`。
@@ -184,7 +184,7 @@ fun simpleName(value: String): ClassNameRules
> 设置 `Class` 简单名称。
只会查匹配到的 `Class.getSimpleName`。
只会查匹配到的 `Class.getSimpleName`。
例如 `com.demo.Test` 只需要填写 `Test`。
@@ -224,7 +224,7 @@ fun fullName(conditions: NameConditions)
> 设置 `Class` 完整名称条件。
只会查匹配到的 `Class.getName`。
只会查匹配到的 `Class.getName`。
## simpleName <span class="symbol">- method</span>
@@ -240,7 +240,7 @@ fun simpleName(conditions: NameConditions)
> 设置 `Class` 简单名称条件。
只会查匹配到的 `Class.getSimpleName`。
只会查匹配到的 `Class.getSimpleName`。
## singleName <span class="symbol">- method</span>
@@ -286,7 +286,7 @@ fun extends(vararg name: String)
> 设置 `Class` 继承的父类。
会同时查 `name` 中所有匹配的父类。
会同时查 `name` 中所有匹配的父类。
## implements <span class="symbol">- method</span>
@@ -316,7 +316,7 @@ fun implements(vararg name: String)
> 设置 `Class` 实现的接口类。
会同时查 `name` 中所有匹配的接口类。
会同时查 `name` 中所有匹配的接口类。
## anonymous <span class="symbol">- method</span>
@@ -428,7 +428,7 @@ fun enclosing(vararg name: String)
> 设置 `Class` 匿名类的 (封闭类) 主类。
会同时查 `name` 中所有匹配的 (封闭类) 主类。
会同时查 `name` 中所有匹配的 (封闭类) 主类。
## FromPackageRules <span class="symbol">- class</span>
@@ -508,7 +508,7 @@ fun optional()
此时可设置类名为 `com.demo.Test` **fullName** / `Test` **simpleName**。
这样就可在完全匹配类名情况下使用类名而忽略其它查条件,否则忽略此条件继续使用其它查条件。
这样就可在完全匹配类名情况下使用类名而忽略其它查条件,否则忽略此条件继续使用其它查条件。
## member <span class="symbol">- method</span>
@@ -610,7 +610,7 @@ fun get(): Class<*>?
若有多个 `Class` 结果只会返回第一个。
在查条件找不到任何结果的时候将返回 `null`。
在查条件找不到任何结果的时候将返回 `null`。
若你设置了 `async` 请使用 [wait](#wait-method) 方法。
@@ -628,9 +628,9 @@ fun all(): HashSet<Class<*>>
> 得到 `Class` 本身数组。
返回全部查条件匹配的多个 `Class` 实例。
返回全部查条件匹配的多个 `Class` 实例。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
若你设置了 `async` 请使用 [waitAll](#waitall-method) 方法。
@@ -648,9 +648,9 @@ fun all(result: (Class<*>) -> Unit): Result
> 得到 `Class` 本身数组 (依次遍历)。
回调全部查条件匹配的多个 `Class` 实例。
回调全部查条件匹配的多个 `Class` 实例。
在查条件找不到任何结果的时候将不会执行。
在查条件找不到任何结果的时候将不会执行。
若你设置了 `async` 请使用 [waitAll](#waitall-method) 方法。
@@ -670,7 +670,7 @@ fun wait(result: (Class<*>?) -> Unit): Result
若有多个 `Class` 结果只会回调第一个。
在查条件找不到任何结果的时候将回调 null。
在查条件找不到任何结果的时候将回调 null。
你需要设置 `async` 后此方法才会被回调,否则请使用 [get](#get-method) 方法。
@@ -688,9 +688,9 @@ fun waitAll(result: (HashSet<Class<*>>) -> Unit): Result
> 得到 `Class` 本身数组 (异步)。
回调全部查条件匹配的多个 `Class` 实例。
回调全部查条件匹配的多个 `Class` 实例。
在查条件找不到任何结果的时候将回调空的 `HashSet`。
在查条件找不到任何结果的时候将回调空的 `HashSet`。
你需要设置 `async` 后此方法才会被回调,否则请使用 [all](#all-method) 方法。

View File

@@ -14,7 +14,7 @@ class ConstructorRules internal constructor(internal val rulesData: ConstructorR
**功能描述**
> `Constructor` 查条件实现类。
> `Constructor` 查条件实现类。
## paramCount <span class="symbol">- field</span>
@@ -84,7 +84,7 @@ fun param(vararg paramType: Any)
::: danger
无参 **Constructor** 请使用 **emptyParam** 设置查条件。
无参 **Constructor** 请使用 **emptyParam** 设置查条件。
有参 **Constructor** 必须使用此方法设定参数或使用 **paramCount** 指定个数。

View File

@@ -14,7 +14,7 @@ class FieldRules internal constructor(internal val rulesData: FieldRulesData) :
**功能描述**
> `Field` 查条件实现类。
> `Field` 查条件实现类。
## name <span class="symbol">- field</span>

View File

@@ -14,7 +14,7 @@ class MemberRules internal constructor(internal val rulesData: MemberRulesData)
**功能描述**
> `Member` 查条件实现类。
> `Member` 查条件实现类。
## modifiers <span class="symbol">- method</span>

View File

@@ -14,7 +14,7 @@ class MethodRules internal constructor(internal val rulesData: MethodRulesData)
**功能描述**
> `Method` 查条件实现类。
> `Method` 查条件实现类。
## name <span class="symbol">- field</span>
@@ -114,7 +114,7 @@ fun param(vararg paramType: Any)
::: danger
无参 **Method** 请使用 **emptyParam** 设置查条件。
无参 **Method** 请使用 **emptyParam** 设置查条件。
有参 **Method** 必须使用此方法设定参数或使用 **paramCount** 指定个数。

View File

@@ -14,7 +14,7 @@ class MemberRulesResult internal constructor(private val rulesData: MemberRulesD
**功能描述**
> 当前 `Member` 查条件结果实现类。
> 当前 `Member` 查条件结果实现类。
## none <span class="symbol">- method</span>
@@ -28,7 +28,7 @@ fun none(): MemberRulesResult
**功能描述**
> 设置当前 `Member` 在查条件中个数为 `0`。
> 设置当前 `Member` 在查条件中个数为 `0`。
## count <span class="symbol">- method</span>
@@ -42,7 +42,7 @@ fun count(num: Int): MemberRulesResult
**功能描述**
> 设置当前 `Member` 在查条件中需要全部匹配的个数。
> 设置当前 `Member` 在查条件中需要全部匹配的个数。
## count <span class="symbol">- method</span>
@@ -56,7 +56,7 @@ fun count(numRange: IntRange): MemberRulesResult
**功能描述**
> 设置当前 `Member` 在查条件中需要全部匹配的个数范围。
> 设置当前 `Member` 在查条件中需要全部匹配的个数范围。
## count <span class="symbol">- method</span>
@@ -70,4 +70,4 @@ fun count(conditions: CountConditions): MemberRulesResult
**功能描述**
> 设置当前 `Member` 在查条件中需要全部匹配的个数条件。
> 设置当前 `Member` 在查条件中需要全部匹配的个数条件。

View File

@@ -108,7 +108,7 @@ fun param(vararg paramType: Any): IndexTypeCondition
::: danger
无参 **Constructor** 请使用 **emptyParam** 设置查条件。
无参 **Constructor** 请使用 **emptyParam** 设置查条件。
有参 **Constructor** 必须使用此方法设定参数或使用 **paramCount** 指定个数。
@@ -340,7 +340,7 @@ fun all(): Process
**功能描述**
> 设置全部查条件匹配的多个 `Constructor` 实例结果到 `hookInstance`。
> 设置全部查条件匹配的多个 `Constructor` 实例结果到 `hookInstance`。
### remedys <span class="symbol">- method</span>
@@ -518,7 +518,7 @@ fun all(): ArrayList<Instance>
> 获得 `Constructor` 实例处理类数组。
返回全部查条件匹配的多个 `Constructor` 实例结果。
返回全部查条件匹配的多个 `Constructor` 实例结果。
**功能示例**
@@ -550,7 +550,7 @@ fun give(): Constructor<*>?
若有多个 `Constructor` 结果只会返回第一个。
在查条件找不到任何结果的时候将返回 `null`。
在查条件找不到任何结果的时候将返回 `null`。
### giveAll <span class="symbol">- method</span>
@@ -566,9 +566,9 @@ fun giveAll(): HashSet<Constructor<*>>
> 得到 `Constructor` 本身数组。
返回全部查条件匹配的多个 `Constructor` 实例。
返回全部查条件匹配的多个 `Constructor` 实例。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
### wait <span class="symbol">- method</span>
@@ -608,7 +608,7 @@ fun waitAll(initiate: ArrayList<Instance>.() -> Unit)
> 获得 `Constructor` 实例处理类数组,配合 `RemedyPlan` 使用。
返回全部查条件匹配的多个 `Constructor` 实例结果。
返回全部查条件匹配的多个 `Constructor` 实例结果。
::: danger

View File

@@ -389,7 +389,7 @@ fun all(instance: Any?): ArrayList<Instance>
> 获得 `Field` 实例处理类数组。
返回全部查条件匹配的多个 `Field` 实例结果。
返回全部查条件匹配的多个 `Field` 实例结果。
**功能示例**
@@ -421,7 +421,7 @@ fun give(): Field?
若有多个 Field 结果只会返回第一个。
在查条件找不到任何结果的时候将返回 `null`。
在查条件找不到任何结果的时候将返回 `null`。
### giveAll <span class="symbol">- method</span>
@@ -437,9 +437,9 @@ fun giveAll(): HashSet<Field>
> 得到 `Field` 本身数组。
返回全部查条件匹配的多个 `Field` 实例。
返回全部查条件匹配的多个 `Field` 实例。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
### wait <span class="symbol">- method</span>
@@ -479,7 +479,7 @@ fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
> 获得 `Field` 实例处理类数组,配合 `RemedyPlan` 使用。
返回全部查条件匹配的多个 `Field` 实例结果。
返回全部查条件匹配的多个 `Field` 实例结果。
::: danger

View File

@@ -146,7 +146,7 @@ fun param(vararg paramType: Any): IndexTypeCondition
::: danger
无参 **Method** 请使用 **emptyParam** 设置查条件。
无参 **Method** 请使用 **emptyParam** 设置查条件。
有参 **Method** 必须使用此方法设定参数或使用 **paramCount** 指定个数。
@@ -462,7 +462,7 @@ fun all(): Process
**功能描述**
> 设置全部查条件匹配的多个 `Method` 实例结果到 `hookInstance`。
> 设置全部查条件匹配的多个 `Method` 实例结果到 `hookInstance`。
### remedys <span class="symbol">- method</span>
@@ -626,7 +626,7 @@ fun all(instance: Any?): ArrayList<Instance>
> 获得 `Method` 实例处理类数组。
返回全部查条件匹配的多个 `Method` 实例结果。
返回全部查条件匹配的多个 `Method` 实例结果。
**功能示例**
@@ -658,7 +658,7 @@ fun give(): Method?
若有多个 `Method` 结果只会返回第一个。
在查条件找不到任何结果的时候将返回 `null`。
在查条件找不到任何结果的时候将返回 `null`。
### giveAll <span class="symbol">- method</span>
@@ -674,9 +674,9 @@ fun giveAll(): HashSet<Method>
> 得到 `Method` 本身数组。
返回全部查条件匹配的多个 `Method` 实例。
返回全部查条件匹配的多个 `Method` 实例。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
在查条件找不到任何结果的时候将返回空的 `HashSet`。
### wait <span class="symbol">- method</span>
@@ -716,7 +716,7 @@ fun waitAll(instance: Any?, initiate: ArrayList<Instance>.() -> Unit)
> 获得 `Method` 实例处理类数组,配合 `RemedyPlan` 使用。
返回全部查条件匹配的多个 `Method` 实例结果。
返回全部查条件匹配的多个 `Method` 实例结果。
::: danger

View File

@@ -422,7 +422,7 @@ inline fun Member.hasModifiers(conditions: ModifierConditions): Boolean
**功能描述**
> 查 `Member` 中匹配的描述符。
> 查 `Member` 中匹配的描述符。
## Class.hasModifiers <span class="symbol">- ext-method</span>
@@ -436,7 +436,7 @@ inline fun Class<*>.hasModifiers(conditions: ModifierConditions): Boolean
**功能描述**
> 查 `Class` 中匹配的描述符。
> 查 `Class` 中匹配的描述符。
<h2 class="deprecated">obtainStaticFieldAny - method</h2>

View File

@@ -169,7 +169,7 @@ public class a extends Activity implements Serializable {
```kotlin
searchClass {
// 从指定的包名范围搜索,实际使用时,你可以同时指定多个包名范围
// 从指定的包名范围开始查找,实际使用时,你可以同时指定多个包名范围
from("com.demo")
// 指定当前 Class 的 getSimpleName 的结果,你可以直接对这个字符串进行逻辑判断
// 这里我们不确定它的名称是不是 a可以只判断字符串长度
@@ -448,9 +448,9 @@ public class Test extends BaseTest {
}
```
### 查与反射调用
### 查与反射调用
假设我们要得到 `Test`(以下统称“当前 `Class`”)的 `doTask` 方法并执行,通常情况下,我们可以使用标准的反射 API 去查这个方法。
假设我们要得到 `Test`(以下统称“当前 `Class`”)的 `doTask` 方法并执行,通常情况下,我们可以使用标准的反射 API 去查这个方法。
> 示例如下
@@ -530,7 +530,7 @@ Test::class.java.constructor().get().call() // 可创建一个新的实例
:::
### 可选的查条件
### 可选的查条件
假设我们要得到 `Class` 中的 `getName` 方法,可以使用如下实现。
@@ -561,15 +561,15 @@ Test::class.java.method {
}.get(instance).string() // 得到方法的结果
```
是的,对于确切不会变化的方法,你可以精简查条件。
是的,对于确切不会变化的方法,你可以精简查条件。
在只使用 `get` 或 `wait` 方法得到结果时 `YukiHookAPI` **会默认按照字节码顺序匹配第一个查到的结果**。
在只使用 `get` 或 `wait` 方法得到结果时 `YukiHookAPI` **会默认按照字节码顺序匹配第一个查到的结果**。
问题又来了,这个 `Class` 中有一个 `release` 方法,但是它的方法参数很长,而且部分类型可能无法直接得到。
通常情况下我们会使用 `param(...)` 来查这个方法,但是有没有更简单的方法呢。
通常情况下我们会使用 `param(...)` 来查这个方法,但是有没有更简单的方法呢。
此时,在确定方法唯一性后,你可以使用 `paramCount` 来查到这个方法。
此时,在确定方法唯一性后,你可以使用 `paramCount` 来查到这个方法。
> 示例如下
@@ -599,11 +599,11 @@ Test::class.java.method {
}.get(instance) // 得到这个方法
```
### 在父类查
### 在父类查
你会注意到 `Test` 继承于 `BaseTest`,现在我们想得到 `BaseTest` 的 `doBaseTask` 方法,在不知道父类名称的情况下,要怎么做呢?
参照上面的查条件,我们只需要在查条件中加入一个 `superClass` 即可实现这个功能。
参照上面的查条件,我们只需要在查条件中加入一个 `superClass` 即可实现这个功能。
> 示例如下
@@ -621,9 +621,9 @@ Test::class.java.method {
这个时候我们就可以在父类中取到这个方法了。
`superClass` 有一个参数为 `isOnlySuperClass`,设置为 `true` 后,可以跳过当前 `Class` 仅查当前 `Class` 的父类。
`superClass` 有一个参数为 `isOnlySuperClass`,设置为 `true` 后,可以跳过当前 `Class` 仅查当前 `Class` 的父类。
由于我们现在已知 `doBaseTask` 方法只存在于父类,可以加上这个条件节省查时间。
由于我们现在已知 `doBaseTask` 方法只存在于父类,可以加上这个条件节省查时间。
> 示例如下
@@ -634,14 +634,14 @@ val instance = Test()
Test::class.java.method {
name = "doBaseTask"
param(StringType)
// 加入一个查条件
// 加入一个查条件
superClass(isOnlySuperClass = true)
}.get(instance).call("task_name")
```
这个时候我们同样可以得到父类中的这个方法。
`superClass` 一旦设置就会自动循环向后查找全部继承的父类中是否有这个方法,直到查到目标没有父类(继承关系为 `java.lang.Object`)为止。
`superClass` 一旦设置就会自动循环向后查找全部继承的父类中是否有这个方法,直到查到目标没有父类(继承关系为 `java.lang.Object`)为止。
::: tip
@@ -651,13 +651,13 @@ Test::class.java.method {
::: danger
当前查的 **Method** 除非指定 **superClass** 条件,否则只能查到当前 **Class** 的 **Method**,这是 Java 反射 API 的默认行为。
当前查的 **Method** 除非指定 **superClass** 条件,否则只能查到当前 **Class** 的 **Method**,这是 Java 反射 API 的默认行为。
:::
### 模糊查
### 模糊查
如果我们想查一个方法名称,但是又不确定它在每个版本中是否发生变化,此时我们就可以使用模糊查功能。
如果我们想查一个方法名称,但是又不确定它在每个版本中是否发生变化,此时我们就可以使用模糊查功能。
假设我们要得到 `Class` 中的 `doTask` 方法,可以使用如下实现。
@@ -710,7 +710,7 @@ Test::class.java.method {
}.get(instance).call("task_name")
```
通过观察发现这个方法名称中只包含字母,我们还可以再增加一个精确的查条件。
通过观察发现这个方法名称中只包含字母,我们还可以再增加一个精确的查条件。
> 示例如下
@@ -737,11 +737,11 @@ Test::class.java.method {
:::
### 多重查
### 多重查
有些时候,我们可能需要查一个 `Class` 中具有相同特征的一组方法、构造方法、变量,此时,我们就可以利用相对条件匹配来完成。
有些时候,我们可能需要查一个 `Class` 中具有相同特征的一组方法、构造方法、变量,此时,我们就可以利用相对条件匹配来完成。
在查条件结果的基础上,我们只需要把 `get` 换为 `all` 即可得到匹配条件的全部字节码。
在查条件结果的基础上,我们只需要把 `get` 换为 `all` 即可得到匹配条件的全部字节码。
假设这次我们要得到 `Class` 中方法参数个数范围在 `1..3` 的全部方法,可以使用如下实现。
@@ -854,7 +854,7 @@ Test::class.java.field {
Test::class.java.field {
name = "TAG"
type = StringType
// 标识查的这个变量需要是静态
// 标识查的这个变量需要是静态
modifiers { isStatic }
}.get().string() // Field 的类型是字符串,可直接进行 cast
```
@@ -878,7 +878,7 @@ Test::class.java.method {
Test::class.java.method {
name = "init"
emptyParam()
// 标识查的这个方法需要是静态
// 标识查的这个方法需要是静态
modifiers { isStatic }
}.get().call()
```
@@ -1235,7 +1235,7 @@ val result = Test::class.java.method {
:::
### 再次查
### 再次查
假设有三个不同版本的 `Class`,它们都是这个宿主不同版本相同的 `Class`。
@@ -1307,11 +1307,11 @@ Test::class.java.method {
::: danger
使用了 **RemedyPlan** 的方法查结果不能再使用 **get** 的方式得到方法实例,应当使用 **wait** 方法。
使用了 **RemedyPlan** 的方法查结果不能再使用 **get** 的方式得到方法实例,应当使用 **wait** 方法。
:::
另外,你还可以在使用 [多重查](#多重查) 的情况下继续使用 `RemedyPlan`。
另外,你还可以在使用 [多重查](#多重查) 的情况下继续使用 `RemedyPlan`。
> 示例如下
@@ -1340,7 +1340,7 @@ Test::class.java.method {
}
```
以当前 `Class` 举例,若 [多重查](#多重查) 结合 `RemedyPlan` 在创建 Hook 的时候使用,你需要稍微改变一下用法。
以当前 `Class` 举例,若 [多重查](#多重查) 结合 `RemedyPlan` 在创建 Hook 的时候使用,你需要稍微改变一下用法。
> 示例如下
@@ -1405,10 +1405,10 @@ public class BTest {
> 示例如下
```kotlin
// 首先查到这个 Class
// 首先查到这个 Class
val currentClass =
if("com.demo.ATest".hasClass()) "com.demo.ATest".toClass() else "com.demo.BTest".toClass()
// 然后再查这个方法并调用
// 然后再查这个方法并调用
currentClass.method {
name = "doTask"
emptyParam()
@@ -1558,11 +1558,11 @@ TestGeneric::class.java.generic()?.argument()?.method {
> 这里列举了使用时可能会遇到的误区部分,可供参考。
#### 限制性查条件
#### 限制性查条件
::: danger
在查条件中,除了 **order** 你只能使用一次 **index** 功能。
在查条件中,除了 **order** 你只能使用一次 **index** 功能。
:::
@@ -1577,7 +1577,7 @@ method {
}
```
以下查条件的使用是没有任何问题的。
以下查条件的使用是没有任何问题的。
> 示例如下
@@ -1589,11 +1589,11 @@ method {
}
```
#### 必要的查条件
#### 必要的查条件
::: danger
在普通方法查条件中,<u>**即使是无参的方法也需要设置查条件**</u>。
在普通方法查条件中,<u>**即使是无参的方法也需要设置查条件**</u>。
:::
@@ -1628,9 +1628,9 @@ TestFoo::class.java.method {
你会发现这个 `Class` 中有两个 `foo` 方法,其中一个带有方法参数。
由于上述例子没有设置 `param` 的查条件,得到的结果将会是匹配名称且匹配字节码顺序的第一个方法 `public void foo(String string)`,而不是我们需要的最后一个方法。
由于上述例子没有设置 `param` 的查条件,得到的结果将会是匹配名称且匹配字节码顺序的第一个方法 `public void foo(String string)`,而不是我们需要的最后一个方法。
这是一个**经常会出现的错误****没有方法参数就会丢失方法参数查条件**的使用问题。
这是一个**经常会出现的错误****没有方法参数就会丢失方法参数查条件**的使用问题。
正确的使用方法如下。
@@ -1652,9 +1652,9 @@ TestFoo::class.java.method {
:::
#### 可简写查条件
#### 可简写查条件
> 在构造方法查条件中,<u>**无参的构造方法可以不需要填写查条件**</u>。
> 在构造方法查条件中,<u>**无参的构造方法可以不需要填写查条件**</u>。
假设我们有如下的 `Class`。
@@ -1689,7 +1689,7 @@ TestFoo::class.java.constructor()
::: tip 兼容性说明
在过往历史版本的 API 中构造方法不填写任何查参数会直接找不到构造方法,<u>**这是一个 BUG最新版本已经进行修复**</u>,请确保你使用的是最新的 API 版本。
在过往历史版本的 API 中构造方法不填写任何查参数会直接找不到构造方法,<u>**这是一个 BUG最新版本已经进行修复**</u>,请确保你使用的是最新的 API 版本。
:::
@@ -1727,7 +1727,7 @@ field {
## 常用类型扩展
在查方法、变量的时候我们通常需要指定所查的类型。
在查方法、变量的时候我们通常需要指定所查的类型。
> 示例如下
@@ -1763,9 +1763,9 @@ field {
同时由于 `String` 是常见类型,所以还可以直接使用 `StringArrayClass` 来得到这个类型。
一些常见的 Hook 中查的方法,都有其对应的封装类型以供使用,格式为 **类型 + Class**。
一些常见的 Hook 中查的方法,都有其对应的封装类型以供使用,格式为 **类型 + Class**。
例如 Hook `onCreate` 方法需要查 `Bundle::class.java` 类型。
例如 Hook `onCreate` 方法需要查 `Bundle::class.java` 类型。
> 示例如下

View File

@@ -194,7 +194,7 @@ Hooked Member cannot be non-null by **CLASS**
```kotlin
injectMember {
// 这里并没有设置需要 Hook 的方法、构造方法的查条件
// 这里并没有设置需要 Hook 的方法、构造方法的查条件
afterHook {
// ...
}
@@ -203,7 +203,7 @@ injectMember {
**解决方案**
请确认你已经在 Hook 之前正确设置了要 Hook 的方法、构造方法的查方式。
请确认你已经在 Hook 之前正确设置了要 Hook 的方法、构造方法的查方式。
> 示例如下
@@ -309,7 +309,7 @@ Method/Constructor/Field match type "**TYPE**" not allowed
> 示例如下
```kotlin
// 查一个方法
// 查一个方法
method {
// ❗设置了无效的类型举例
param(false, 1, 0)
@@ -317,7 +317,7 @@ method {
returnType = false
}
// 查一个变量
// 查一个变量
field {
// ❗设置了无效的类型举例
type = false
@@ -326,12 +326,12 @@ field {
**解决方案**
在查`param``returnType``type` 中仅接受 `Class``String``VariousClass` 类型的传值,不可传入参数实例。
在查`param``returnType``type` 中仅接受 `Class``String``VariousClass` 类型的传值,不可传入参数实例。
> 示例如下
```kotlin
// 查一个方法
// 查一个方法
method {
// ✅ 正确的使用方法举例
param(BooleanType, IntType, IntType)
@@ -341,7 +341,7 @@ method {
returnType = "java.lang.Boolean"
}
// 查一个变量
// 查一个变量
field {
// ✅ 正确的使用方法举例
type = BooleanType
@@ -360,7 +360,7 @@ NoSuchMethod/NoSuchConstructor/NoSuchField happend in \[**NAME**\]
**解决方案**
请确认你的查条件是否能正确匹配到目标 `Class` 中的指定方法、构造方法以及变量。
请确认你的查条件是否能正确匹配到目标 `Class` 中的指定方法、构造方法以及变量。
::: danger loggerE
@@ -396,7 +396,7 @@ method {
**解决方案**
请将查条件补充完整并再试一次。
请将查条件补充完整并再试一次。
::: danger loggerE
@@ -478,7 +478,7 @@ Field match type class is not found
**异常原因**
在查找变量时所设置的查条件中 `type``Class` 实例未被找到。
在查找变量时所设置的查条件中 `type``Class` 实例未被找到。
> 示例如下
@@ -492,7 +492,7 @@ field {
**解决方案**
请检查查条件中 `type``Class` 是否存在,然后再试一次。
请检查查条件中 `type``Class` 是否存在,然后再试一次。
::: danger loggerE
@@ -502,7 +502,7 @@ Method match returnType class is not found
**异常原因**
在查找方法时所设置的查条件中 `returnType``Class` 实例未被找到。
在查找方法时所设置的查条件中 `returnType``Class` 实例未被找到。
> 示例如下
@@ -516,7 +516,7 @@ method {
**解决方案**
请检查查条件中 `returnType``Class` 是否存在,然后再试一次。
请检查查条件中 `returnType``Class` 是否存在,然后再试一次。
::: danger loggerE
@@ -526,7 +526,7 @@ Method/Constructor match paramType\[**INDEX**\] class is not found
**异常原因**
在查找方法、构造方法时所设置的查条件中 `param``index` 号下标的 `Class` 实例未被找到。
在查找方法、构造方法时所设置的查条件中 `param``index` 号下标的 `Class` 实例未被找到。
```kotlin
method {
@@ -538,7 +538,7 @@ method {
**解决方案**
请检查查条件中 `param``index` 号下标的 `Class` 是否存在,然后再试一次。
请检查查条件中 `param``index` 号下标的 `Class` 是否存在,然后再试一次。
::: danger loggerE
@@ -566,7 +566,7 @@ conditions {
**解决方案**
Resources 的 Hook 并非类似方法的 Hook其必须拥有完整的名称和类型描述才能查成功,请将查条件补充完整并再试一次。
Resources 的 Hook 并非类似方法的 Hook其必须拥有完整的名称和类型描述才能查成功,请将查条件补充完整并再试一次。
::: danger loggerE