mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-01 08:15:37 +08:00
docs: update api docs
This commit is contained in:
@@ -238,36 +238,6 @@ fun members(vararg member: Member?)
|
||||
|
||||
:::
|
||||
|
||||
**Function Example**
|
||||
|
||||
你可以调用 `instanceClass` 来手动查找要 Hook 的 `Method`、`Constructor`。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
members(instanceClass.getDeclaredMethod("test", StringClass))
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
同样地,你也可以传入一组 `Member` 同时进行 Hook。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
members(
|
||||
instanceClass.getDeclaredMethod("test1", StringClass),
|
||||
instanceClass.getDeclaredMethod("test2", StringClass),
|
||||
instanceClass.getDeclaredMethod("test3", StringClass)
|
||||
)
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
<h3 class="deprecated">allMethods - method</h3>
|
||||
|
||||
**Change Records**
|
||||
@@ -324,48 +294,7 @@ inline fun method(initiate: MethodConditions): MethodFinder.Result
|
||||
|
||||
**Function Illustrate**
|
||||
|
||||
> 查找当前 `Class` 需要 Hook 的 `Method` 。
|
||||
|
||||
**Function Example**
|
||||
|
||||
你可参考 [MethodFinder](finder/members/MethodFinder) 查看详细用法。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = UnitType
|
||||
}
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
若想 Hook 当前查找 `method { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
paramCount(1..5)
|
||||
}.all()
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
此时 `beforeHook` 与 `afterHook` 会在每个查找到的结果中多次回调 Hook 方法体。
|
||||
|
||||
::: warning
|
||||
|
||||
若没有 **all**,默认只会 Hook 当前条件查找到的数组下标结果第一位。
|
||||
|
||||
:::
|
||||
> 查找当前 `Class` 需要 Hook 的 `Method`。
|
||||
|
||||
### constructor <span class="symbol">- method</span>
|
||||
|
||||
@@ -385,40 +314,6 @@ inline fun constructor(initiate: ConstructorConditions): ConstructorFinder.Resul
|
||||
|
||||
> 查找当前 `Class` 需要 Hook 的 `Constructor`。
|
||||
|
||||
**Function Example**
|
||||
|
||||
你可参考 [ConstructorFinder](finder/members/ConstructorFinder) 查看详细用法。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
constructor { param(StringClass) }
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
若想 Hook 当前查找 `constructor { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
constructor { paramCount(1..5) }.all()
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
此时 `beforeHook` 与 `afterHook` 会在每个查找到的结果中多次回调 Hook 方法体。
|
||||
|
||||
::: warning
|
||||
|
||||
若没有 **all**,默认只会 Hook 当前条件查找到的数组下标结果第一位。
|
||||
|
||||
:::
|
||||
|
||||
### HookParam.field <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
@@ -437,29 +332,6 @@ inline fun HookParam.field(initiate: FieldConditions): FieldFinder.Result
|
||||
|
||||
> 使用当前 `hookClass` 查找并得到 `Field`。
|
||||
|
||||
**Function Example**
|
||||
|
||||
你可参考 [FieldFinder](finder/members/FieldFinder) 查看详细用法。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = UnitType
|
||||
}
|
||||
afterHook {
|
||||
// 这里不需要再调用 instanceClass.field 进行查找
|
||||
field {
|
||||
name = "isSweet"
|
||||
type = BooleanType
|
||||
}.get(instance).setTrue()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### HookParam.method <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
@@ -510,41 +382,61 @@ inline fun HookParam.injectMember(priority: Int, tag: String, initiate: MemberHo
|
||||
|
||||
> 注入要 Hook 的 `Method`、`Constructor` (嵌套 Hook)。
|
||||
|
||||
### beforeHook <span class="symbol">- method</span>
|
||||
### before <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
fun beforeHook(initiate: HookParam.() -> Unit): HookCallback
|
||||
fun before(initiate: HookParam.() -> Unit): HookCallback
|
||||
```
|
||||
|
||||
**Change Records**
|
||||
|
||||
`v1.0` `first`
|
||||
|
||||
`v1.1.0` `modified`
|
||||
|
||||
新增 `HookCallback` 返回类型
|
||||
`v1.2.0` `added`
|
||||
|
||||
**Function Illustrate**
|
||||
|
||||
> 在 `Member` 执行完成前 Hook。
|
||||
|
||||
### afterHook <span class="symbol">- method</span>
|
||||
### after <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
fun afterHook(initiate: HookParam.() -> Unit): HookCallback
|
||||
fun after(initiate: HookParam.() -> Unit): HookCallback
|
||||
```
|
||||
|
||||
**Change Records**
|
||||
|
||||
`v1.2.0` `added`
|
||||
|
||||
**Function Illustrate**
|
||||
|
||||
> 在 `Member` 执行完成后 Hook。
|
||||
|
||||
<h3 class="deprecated">beforeHook - method</h3>
|
||||
|
||||
**Change Records**
|
||||
|
||||
`v1.0` `first`
|
||||
|
||||
`v1.1.0` `modified`
|
||||
|
||||
新增 `HookCallback` 返回类型
|
||||
|
||||
**Function Illustrate**
|
||||
`v1.2.0` `deprecated`
|
||||
|
||||
> 在 `Member` 执行完成后 Hook。
|
||||
请迁移到 `before`
|
||||
|
||||
<h3 class="deprecated">afterHook - method</h3>
|
||||
|
||||
**Change Records**
|
||||
|
||||
`v1.0` `first`
|
||||
|
||||
`v1.1.0` `modified`
|
||||
|
||||
新增 `HookCallback` 返回类型
|
||||
|
||||
`v1.2.0` `deprecated`
|
||||
|
||||
请迁移到 `after`
|
||||
|
||||
### replaceAny <span class="symbol">- method</span>
|
||||
|
||||
@@ -734,24 +626,6 @@ inline fun result(initiate: Result.() -> Unit): Result
|
||||
|
||||
> 创建监听失败事件方法体。
|
||||
|
||||
**Function Example**
|
||||
|
||||
你可以使用此方法为 `Result` 类创建 **lambda** 方法体。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
// Your code here.
|
||||
}.result {
|
||||
onHooked {}
|
||||
onAlreadyHooked {}
|
||||
ignoredConductFailure()
|
||||
onHookingFailure {}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
#### by <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
|
@@ -252,7 +252,7 @@ fun Throwable.throwToApp()
|
||||
|
||||
使用 `throwable` 获取当前设置的方法调用抛出异常。
|
||||
|
||||
仅会在回调方法的 `MemberHookCreator.beforeHook` 或 `MemberHookCreator.afterHook` 中生效。
|
||||
仅会在回调方法的 `MemberHookCreator.before` 或 `MemberHookCreator.after` 中生效。
|
||||
|
||||
::: danger
|
||||
|
||||
@@ -269,11 +269,8 @@ Hook 过程中的异常仅会作用于 (Xposed) 宿主环境,目标 Hook APP
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
// ...
|
||||
}
|
||||
beforeHook {
|
||||
hook {
|
||||
before {
|
||||
RuntimeException("Test Exception").throwToApp()
|
||||
}
|
||||
}
|
||||
@@ -483,20 +480,19 @@ fun <T> callOriginal(): T?
|
||||
|
||||
此方法可以 `invoke` 原始未经 Hook 的 `Member` 对象,取决于原始 `Member` 的参数。
|
||||
|
||||
调用自身原始的方法不会再经过当前 `beforeHook`、`afterHook` 以及 `replaceUnit`、`replaceAny`。
|
||||
调用自身原始的方法不会再经过当前 `before`、`after` 以及 `replaceUnit`、`replaceAny`。
|
||||
|
||||
比如我们 Hook 的这个方法被这样调用 `test("test value")`,使用此方法会调用其中的 `"test value"` 作为参数。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}
|
||||
afterHook {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}.hook {
|
||||
after {
|
||||
// <方案1> 不使用泛型,不获取方法执行结果,调用将使用原方法传入的 args 自动传参
|
||||
callOriginal()
|
||||
// <方案2> 使用泛型,已知方法执行结果参数类型进行 cast
|
||||
@@ -534,20 +530,19 @@ fun <T> invokeOriginal(vararg args: Any?): T?
|
||||
|
||||
此方法可以 `invoke` 原始未经 Hook 的 `Member` 对象,可自定义需要调用的参数内容。
|
||||
|
||||
调用自身原始的方法不会再经过当前 `beforeHook`、`afterHook` 以及 `replaceUnit`、`replaceAny`。
|
||||
调用自身原始的方法不会再经过当前 `before`、`after` 以及 `replaceUnit`、`replaceAny`。
|
||||
|
||||
比如我们 Hook 的这个方法被这样调用 `test("test value")`,使用此方法可自定义其中的 `args` 作为参数。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}
|
||||
afterHook {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}.hook {
|
||||
after {
|
||||
// <方案1> 不使用泛型,不获取方法执行结果
|
||||
invokeOriginal("test value")
|
||||
// <方案2> 使用泛型,已知方法执行结果参数类型进行 cast,假设返回值为 String,失败会返回 null
|
||||
|
@@ -9,6 +9,7 @@ The English translation of this page has not been completed, you are welcome to
|
||||
You can use the **Chrome Translation Plugin** to translate entire pages for reference.
|
||||
|
||||
:::
|
||||
|
||||
---
|
||||
pageClass: code-page
|
||||
---
|
||||
@@ -878,54 +879,60 @@ inline fun HookClass.hook(initiate: YukiMemberHookCreator.() -> Unit): YukiMembe
|
||||
|
||||
**Function Illustrate**
|
||||
|
||||
> 这是一切 Hook 的入口创建方法,Hook 方法、构造方法。
|
||||
> Hook 方法、构造方法。
|
||||
|
||||
**Function Example**
|
||||
## Member+BaseFinder.BaseResult.hook <span class="symbol">- i-ext-method</span>
|
||||
|
||||
如你所见,Hook 方法体的创建可使用 2 种方式。
|
||||
|
||||
使用 `String.toClass(...)` 得到 `Class` 实例进行创建。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
"com.example.demo.DemoClass".toClass().hook {
|
||||
// Your code here.
|
||||
}
|
||||
```kotlin:no-line-numbers
|
||||
inline fun Member.hook(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
使用 `stub` 或直接拿到 `Class` 实例进行创建。
|
||||
|
||||
默认情况下 API 会将 `Class` 实例转换为类名并绑定到 `appClassLoader`,若失败,则会使用原始 `Class` 实例直接进行 Hook。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
Stub::class.java.hook {
|
||||
// Your code here.
|
||||
}
|
||||
```kotlin:no-line-numbers
|
||||
inline fun BaseFinder.BaseResult.hook(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
若当前 `Class` 不在 `appClassLoader` 且自动匹配无法找到该 `Class`,请启用 `isForceUseAbsolute`。
|
||||
**Change Records**
|
||||
|
||||
> The following example
|
||||
`v1.2.0` `added`
|
||||
|
||||
```kotlin
|
||||
YourClass::class.java.hook(isForceUseAbsolute = true) {
|
||||
// Your code here.
|
||||
}
|
||||
**Function Illustrate**
|
||||
|
||||
> 直接 Hook 方法、构造方法。
|
||||
|
||||
::: warning
|
||||
|
||||
此功能尚在试验阶段,在 1.x.x 版本将暂定于此,在 2.x.x 版本将完全合并到新 API。
|
||||
|
||||
:::
|
||||
|
||||
## Array<Member>+List<Member>+BaseFinder.BaseResult.hookAll <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
inline fun Array<Member>.hookAll(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
使用 `VariousClass` 实例进行创建。
|
||||
|
||||
> The following example
|
||||
|
||||
```kotlin
|
||||
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").hook {
|
||||
// Your code here.
|
||||
}
|
||||
```kotlin:no-line-numbers
|
||||
inline fun List<Member>.hookAll(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
inline fun BaseFinder.BaseResult.hookAll(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
**Change Records**
|
||||
|
||||
`v1.2.0` `added`
|
||||
|
||||
**Function Illustrate**
|
||||
|
||||
> 直接 Hook 方法、构造方法 (批量)。
|
||||
|
||||
::: warning
|
||||
|
||||
此功能尚在试验阶段,在 1.x.x 版本将暂定于此,在 2.x.x 版本将完全合并到新 API。
|
||||
|
||||
:::
|
||||
|
||||
## HookResources.hook <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
@@ -942,7 +949,7 @@ inline fun HookResources.hook(initiate: YukiResourcesHookCreator.() -> Unit)
|
||||
|
||||
::: danger
|
||||
|
||||
请注意你需要确保当前 Hook Framework 支持且 **InjectYukiHookWithXposed.isUsingResourcesHook** 已启用。
|
||||
此功能将不再默认启用,如需启用,请手动设置 **InjectYukiHookWithXposed.isUsingResourcesHook**。
|
||||
|
||||
:::
|
||||
|
||||
|
@@ -230,36 +230,6 @@ fun members(vararg member: Member?)
|
||||
|
||||
:::
|
||||
|
||||
**功能示例**
|
||||
|
||||
你可以调用 `instanceClass` 来手动查找要 Hook 的 `Method`、`Constructor`。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
members(instanceClass.getDeclaredMethod("test", StringClass))
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
同样地,你也可以传入一组 `Member` 同时进行 Hook。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
members(
|
||||
instanceClass.getDeclaredMethod("test1", StringClass),
|
||||
instanceClass.getDeclaredMethod("test2", StringClass),
|
||||
instanceClass.getDeclaredMethod("test3", StringClass)
|
||||
)
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
<h3 class="deprecated">allMethods - method</h3>
|
||||
|
||||
**变更记录**
|
||||
@@ -316,48 +286,7 @@ inline fun method(initiate: MethodConditions): MethodFinder.Result
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 查找当前 `Class` 需要 Hook 的 `Method` 。
|
||||
|
||||
**功能示例**
|
||||
|
||||
你可参考 [MethodFinder](finder/members/MethodFinder) 查看详细用法。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = UnitType
|
||||
}
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
若想 Hook 当前查找 `method { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
paramCount(1..5)
|
||||
}.all()
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
此时 `beforeHook` 与 `afterHook` 会在每个查找到的结果中多次回调 Hook 方法体。
|
||||
|
||||
::: warning
|
||||
|
||||
若没有 **all**,默认只会 Hook 当前条件查找到的数组下标结果第一位。
|
||||
|
||||
:::
|
||||
> 查找当前 `Class` 需要 Hook 的 `Method`。
|
||||
|
||||
### constructor <span class="symbol">- method</span>
|
||||
|
||||
@@ -377,40 +306,6 @@ inline fun constructor(initiate: ConstructorConditions): ConstructorFinder.Resul
|
||||
|
||||
> 查找当前 `Class` 需要 Hook 的 `Constructor`。
|
||||
|
||||
**功能示例**
|
||||
|
||||
你可参考 [ConstructorFinder](finder/members/ConstructorFinder) 查看详细用法。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
constructor { param(StringClass) }
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
若想 Hook 当前查找 `constructor { ... }` 条件的全部结果,你只需要在最后加入 `all` 即可。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
constructor { paramCount(1..5) }.all()
|
||||
beforeHook {}
|
||||
afterHook {}
|
||||
}
|
||||
```
|
||||
|
||||
此时 `beforeHook` 与 `afterHook` 会在每个查找到的结果中多次回调 Hook 方法体。
|
||||
|
||||
::: warning
|
||||
|
||||
若没有 **all**,默认只会 Hook 当前条件查找到的数组下标结果第一位。
|
||||
|
||||
:::
|
||||
|
||||
### HookParam.field <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
@@ -429,29 +324,6 @@ inline fun HookParam.field(initiate: FieldConditions): FieldFinder.Result
|
||||
|
||||
> 使用当前 `hookClass` 查找并得到 `Field`。
|
||||
|
||||
**功能示例**
|
||||
|
||||
你可参考 [FieldFinder](finder/members/FieldFinder) 查看详细用法。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = UnitType
|
||||
}
|
||||
afterHook {
|
||||
// 这里不需要再调用 instanceClass.field 进行查找
|
||||
field {
|
||||
name = "isSweet"
|
||||
type = BooleanType
|
||||
}.get(instance).setTrue()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### HookParam.method <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
@@ -502,41 +374,61 @@ inline fun HookParam.injectMember(priority: Int, tag: String, initiate: MemberHo
|
||||
|
||||
> 注入要 Hook 的 `Method`、`Constructor` (嵌套 Hook)。
|
||||
|
||||
### beforeHook <span class="symbol">- method</span>
|
||||
### before <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
fun beforeHook(initiate: HookParam.() -> Unit): HookCallback
|
||||
fun before(initiate: HookParam.() -> Unit): HookCallback
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.1.0` `修改`
|
||||
|
||||
新增 `HookCallback` 返回类型
|
||||
`v1.2.0` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 在 `Member` 执行完成前 Hook。
|
||||
|
||||
### afterHook <span class="symbol">- method</span>
|
||||
### after <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
fun afterHook(initiate: HookParam.() -> Unit): HookCallback
|
||||
fun after(initiate: HookParam.() -> Unit): HookCallback
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.2.0` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 在 `Member` 执行完成后 Hook。
|
||||
|
||||
<h3 class="deprecated">beforeHook - method</h3>
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.1.0` `修改`
|
||||
|
||||
新增 `HookCallback` 返回类型
|
||||
|
||||
**功能描述**
|
||||
`v1.2.0` `作废`
|
||||
|
||||
> 在 `Member` 执行完成后 Hook。
|
||||
请迁移到 `before`
|
||||
|
||||
<h3 class="deprecated">afterHook - method</h3>
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.0` `添加`
|
||||
|
||||
`v1.1.0` `修改`
|
||||
|
||||
新增 `HookCallback` 返回类型
|
||||
|
||||
`v1.2.0` `作废`
|
||||
|
||||
请迁移到 `after`
|
||||
|
||||
### replaceAny <span class="symbol">- method</span>
|
||||
|
||||
@@ -726,24 +618,6 @@ inline fun result(initiate: Result.() -> Unit): Result
|
||||
|
||||
> 创建监听失败事件方法体。
|
||||
|
||||
**功能示例**
|
||||
|
||||
你可以使用此方法为 `Result` 类创建 **lambda** 方法体。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
// Your code here.
|
||||
}.result {
|
||||
onHooked {}
|
||||
onAlreadyHooked {}
|
||||
ignoredConductFailure()
|
||||
onHookingFailure {}
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
#### by <span class="symbol">- method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
|
@@ -244,7 +244,7 @@ fun Throwable.throwToApp()
|
||||
|
||||
使用 `throwable` 获取当前设置的方法调用抛出异常。
|
||||
|
||||
仅会在回调方法的 `MemberHookCreator.beforeHook` 或 `MemberHookCreator.afterHook` 中生效。
|
||||
仅会在回调方法的 `MemberHookCreator.before` 或 `MemberHookCreator.after` 中生效。
|
||||
|
||||
::: danger
|
||||
|
||||
@@ -261,11 +261,8 @@ Hook 过程中的异常仅会作用于 (Xposed) 宿主环境,目标 Hook APP
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
// ...
|
||||
}
|
||||
beforeHook {
|
||||
hook {
|
||||
before {
|
||||
RuntimeException("Test Exception").throwToApp()
|
||||
}
|
||||
}
|
||||
@@ -475,20 +472,19 @@ fun <T> callOriginal(): T?
|
||||
|
||||
此方法可以 `invoke` 原始未经 Hook 的 `Member` 对象,取决于原始 `Member` 的参数。
|
||||
|
||||
调用自身原始的方法不会再经过当前 `beforeHook`、`afterHook` 以及 `replaceUnit`、`replaceAny`。
|
||||
调用自身原始的方法不会再经过当前 `before`、`after` 以及 `replaceUnit`、`replaceAny`。
|
||||
|
||||
比如我们 Hook 的这个方法被这样调用 `test("test value")`,使用此方法会调用其中的 `"test value"` 作为参数。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}
|
||||
afterHook {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}.hook {
|
||||
after {
|
||||
// <方案1> 不使用泛型,不获取方法执行结果,调用将使用原方法传入的 args 自动传参
|
||||
callOriginal()
|
||||
// <方案2> 使用泛型,已知方法执行结果参数类型进行 cast
|
||||
@@ -526,20 +522,19 @@ fun <T> invokeOriginal(vararg args: Any?): T?
|
||||
|
||||
此方法可以 `invoke` 原始未经 Hook 的 `Member` 对象,可自定义需要调用的参数内容。
|
||||
|
||||
调用自身原始的方法不会再经过当前 `beforeHook`、`afterHook` 以及 `replaceUnit`、`replaceAny`。
|
||||
调用自身原始的方法不会再经过当前 `before`、`after` 以及 `replaceUnit`、`replaceAny`。
|
||||
|
||||
比如我们 Hook 的这个方法被这样调用 `test("test value")`,使用此方法可自定义其中的 `args` 作为参数。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
injectMember {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}
|
||||
afterHook {
|
||||
method {
|
||||
name = "test"
|
||||
param(StringClass)
|
||||
returnType = StringClass
|
||||
}.hook {
|
||||
after {
|
||||
// <方案1> 不使用泛型,不获取方法执行结果
|
||||
invokeOriginal("test value")
|
||||
// <方案2> 使用泛型,已知方法执行结果参数类型进行 cast,假设返回值为 String,失败会返回 null
|
||||
|
@@ -867,54 +867,60 @@ inline fun HookClass.hook(initiate: YukiMemberHookCreator.() -> Unit): YukiMembe
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 这是一切 Hook 的入口创建方法,Hook 方法、构造方法。
|
||||
> Hook 方法、构造方法。
|
||||
|
||||
**功能示例**
|
||||
## Member+BaseFinder.BaseResult.hook <span class="symbol">- i-ext-method</span>
|
||||
|
||||
如你所见,Hook 方法体的创建可使用 2 种方式。
|
||||
|
||||
使用 `String.toClass(...)` 得到 `Class` 实例进行创建。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
"com.example.demo.DemoClass".toClass().hook {
|
||||
// Your code here.
|
||||
}
|
||||
```kotlin:no-line-numbers
|
||||
inline fun Member.hook(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
使用 `stub` 或直接拿到 `Class` 实例进行创建。
|
||||
|
||||
默认情况下 API 会将 `Class` 实例转换为类名并绑定到 `appClassLoader`,若失败,则会使用原始 `Class` 实例直接进行 Hook。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
Stub::class.java.hook {
|
||||
// Your code here.
|
||||
}
|
||||
```kotlin:no-line-numbers
|
||||
inline fun BaseFinder.BaseResult.hook(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
若当前 `Class` 不在 `appClassLoader` 且自动匹配无法找到该 `Class`,请启用 `isForceUseAbsolute`。
|
||||
**变更记录**
|
||||
|
||||
> 示例如下
|
||||
`v1.2.0` `新增`
|
||||
|
||||
```kotlin
|
||||
YourClass::class.java.hook(isForceUseAbsolute = true) {
|
||||
// Your code here.
|
||||
}
|
||||
**功能描述**
|
||||
|
||||
> 直接 Hook 方法、构造方法。
|
||||
|
||||
::: warning
|
||||
|
||||
此功能尚在试验阶段,在 1.x.x 版本将暂定于此,在 2.x.x 版本将完全合并到新 API。
|
||||
|
||||
:::
|
||||
|
||||
## Array<Member>+List<Member>+BaseFinder.BaseResult.hookAll <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
inline fun Array<Member>.hookAll(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
使用 `VariousClass` 实例进行创建。
|
||||
|
||||
> 示例如下
|
||||
|
||||
```kotlin
|
||||
VariousClass("com.example.demo.DemoClass1", "com.example.demo.DemoClass2").hook {
|
||||
// Your code here.
|
||||
}
|
||||
```kotlin:no-line-numbers
|
||||
inline fun List<Member>.hookAll(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
inline fun BaseFinder.BaseResult.hookAll(initiate: YukiMemberHookCreator.MemberHookCreator.() -> Unit): YukiMemberHookCreator.MemberHookCreator.Result
|
||||
```
|
||||
|
||||
**变更记录**
|
||||
|
||||
`v1.2.0` `新增`
|
||||
|
||||
**功能描述**
|
||||
|
||||
> 直接 Hook 方法、构造方法 (批量)。
|
||||
|
||||
::: warning
|
||||
|
||||
此功能尚在试验阶段,在 1.x.x 版本将暂定于此,在 2.x.x 版本将完全合并到新 API。
|
||||
|
||||
:::
|
||||
|
||||
## HookResources.hook <span class="symbol">- i-ext-method</span>
|
||||
|
||||
```kotlin:no-line-numbers
|
||||
@@ -931,7 +937,7 @@ inline fun HookResources.hook(initiate: YukiResourcesHookCreator.() -> Unit)
|
||||
|
||||
::: danger
|
||||
|
||||
请注意你需要确保当前 Hook Framework 支持且 **InjectYukiHookWithXposed.isUsingResourcesHook** 已启用。
|
||||
此功能将不再默认启用,如需启用,请手动设置 **InjectYukiHookWithXposed.isUsingResourcesHook**。
|
||||
|
||||
:::
|
||||
|
||||
|
Reference in New Issue
Block a user