docs: update api docs

This commit is contained in:
2023-10-03 04:16:25 +08:00
parent 7280397d79
commit 7d2dc3c268
6 changed files with 185 additions and 434 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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&lt;Member&gt;+List&lt;Member&gt;+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**。
:::

View File

@@ -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

View File

@@ -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

View File

@@ -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&lt;Member&gt;+List&lt;Member&gt;+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**。
:::