Merge document file

This commit is contained in:
2022-04-17 23:23:42 +08:00
parent fa120f4bee
commit 9fc69a751b
34 changed files with 744 additions and 744 deletions

View File

@@ -8,7 +8,7 @@
!> `loggerE` You cannot loading a hooker in "onInit" method! Aborted
<b>异常原因</b>
**异常原因**
你尝试在继承 `YukiHookXposedInitProxy` 的 Hook 入口类的 `onInit` 方法中装载了 `encase` 方法。
@@ -30,7 +30,7 @@ class HookEntry : YukiHookXposedInitProxy {
}
```
<b>解决方案</b>
**解决方案**
请在 `onHook` 方法中装载 `encase` 方法。
@@ -57,47 +57,47 @@ class HookEntry : YukiHookXposedInitProxy {
!> `loggerE` YukiHookAPI try to load HookEntryClass failed
<b>异常原因</b>
**异常原因**
`YukiHookAPI` 在尝试装载 Hook 入口类 `onInit``onHook` 方法时发生了不能处理的异常或找不到入口类。
<b>解决方案</b>
**解决方案**
通常情况下这种错误不会轻易发生,若一旦发生此错误,请自行查看控制台打印的日志定位问题,确定并非自己的代码发生的问题后,可提交日志进行反馈。
!> `loggerE` HookClass \[<b>NAME</b>\] not found
!> `loggerE` HookClass \[**NAME**\] not found
<b>异常原因</b>
**异常原因**
当前被 Hook 的 `Class` 没有被找到。
<b>解决方案</b>
**解决方案**
请检查目标 `Class` 是否存在,若想忽略此错误请使用 `ignoredHookClassNotFoundFailure` 方法。
!> `loggerE` Hook Member \[<b>NAME</b>\] failed
!> `loggerE` Hook Member \[**NAME**\] failed
<b>异常原因</b>
**异常原因**
Hook 目标方法、构造方法时发生错误。
<b>解决方案</b>
**解决方案**
此问题通常由 Hook Framework 产生,请检查对应的日志内容,若问题持续出现请携带完整日志进行反馈。
!> `loggerE` Hooked Member with a finding error by <b>CLASS</b>
!> `loggerE` Hooked Member with a finding error by **CLASS**
<b>异常原因</b>
**异常原因**
在 Hook 执行后被 Hook 的 `member``null` 且已经设置目标 Hook 方法、构造类。
<b>解决方案</b>
**解决方案**
请检查此错误发生前的上一个错误日志,或许在查找方法、构造方法的时候发生了找不到方法、构造方法的错误。
!> `loggerE` Hooked Member cannot be non-null by <b>CLASS</b>
!> `loggerE` Hooked Member cannot be non-null by **CLASS**
<b>异常原因</b>
**异常原因**
在 Hook 执行后被 Hook 的 `member``null` 且没有设置目标 Hook 方法、构造类。
@@ -112,7 +112,7 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你已经在 Hook 之前正确设置了要 Hook 的方法、构造方法的查询方式。
@@ -130,49 +130,49 @@ injectMember {
}
```
!> `loggerE` No Method name "<b>NAME</b>" matched
!> `loggerE` No Method name "**NAME**" matched
<b>异常原因</b>
**异常原因**
在使用 `allMethods` 查询需要 Hook 的方法时一个也没有找到。
<b>解决方案</b>
**解决方案**
请确认当前 `Class` 中一定存在一个可以匹配此方法名称的方法。
!> `loggerE` No Constructor matched
<b>异常原因</b>
**异常原因**
在使用 `allConstructors` 查询需要 Hook 的构造方法时一个也没有找到。
<b>解决方案</b>
**解决方案**
请确认当前 `Class` 是否存在至少一个构造方法。
!> `loggerE` Hooked All Members with an error in Class \[<b>NAME</b>\]
!> `loggerE` Hooked All Members with an error in Class \[**NAME**\]
<b>异常原因</b>
**异常原因**
在 Hook 过程中发生了任意的异常。
<b>解决方案</b>
**解决方案**
这是一个异常汇总提醒,只要 Hook 方法体内发生了异常就会打印此日志,请仔细查看从这里往上的具体异常是什么。
!> `loggerE` Try to hook <b>NAME</b>\[<b>NAME</b>\] got an Exception
!> `loggerE` Try to hook **NAME**\[**NAME**\] got an Exception
<b>异常原因</b>
**异常原因**
在 Hook 开始时发生了任意的异常。
<b>解决方案</b>
**解决方案**
这是一个 Hook 开始就发生异常的提醒,请仔细查看具体的异常是什么以重新确定问题。
!> `loggerE` Method/Constructor/Field match type "<b>TYPE</b>" not allowed
!> `loggerE` Method/Constructor/Field match type "**TYPE**" not allowed
<b>异常原因</b>
**异常原因**
在查找方法、构造方法以及变量时设置了不允许的参数类型。
@@ -194,7 +194,7 @@ field {
}
```
<b>解决方案</b>
**解决方案**
在查询中 `param``returnType``type` 中仅接受 `Class``String``VariousClass` 类型的传值,不可传入参数实例。
@@ -218,29 +218,29 @@ field {
}
```
!> `loggerE` NoSuchMethod/NoSuchConstructor/NoSuchField happend in \[<b>NAME</b>\]
!> `loggerE` NoSuchMethod/NoSuchConstructor/NoSuchField happend in \[**NAME**\]
<b>异常原因</b>
**异常原因**
在查找方法、构造方法以及变量时并未找到目标方法、构造方法以及变量。
<b>解决方案</b>
**解决方案**
请确认你的查询条件是否能正确匹配到目标 `Class` 中的指定方法、构造方法以及变量。
!> `loggerE` Trying <b>COUNT</b> times and all failure by RemedyPlan
!> `loggerE` Trying **COUNT** times and all failure by RemedyPlan
<b>异常原因</b>
**异常原因**
使用 `RemedyPlan` 重新查找方法、构造方法时依然没有找到方法、构造方法。
<b>解决方案</b>
**解决方案**
请确认你设置的 `RemedyPlan` 参数以及宿主内存在的 `Class`,再试一次。
!> `loggerE` Try to get field instance failed
<b>异常原因</b>
**异常原因**
在使用变量查询结果的 `get` 方法后并没有成功得到对应的实例。
@@ -252,13 +252,13 @@ field {
}.get(instance)...
```
<b>解决方案</b>
**解决方案**
请确认当前变量所在的实例是静态的还是动态的,并查看错误日志检查传入的实例类型是否正确。
!> `loggerE` You must set a condition when finding a Method/Constructor/Field
<b>异常原因</b>
**异常原因**
在查找方法、构造方法以及变量时并未设置任何条件。
@@ -270,13 +270,13 @@ method {
}
```
<b>解决方案</b>
**解决方案**
请将查询条件补充完整并再试一次。
!> `loggerE` Can't find this Method/Constructor/Field \[<b>NAME</b>\] because classSet is null
!> `loggerE` Can't find this Method/Constructor/Field \[**NAME**\] because classSet is null
<b>异常原因</b>
**异常原因**
在查找方法、构造方法以及变量时所设置的 `Class` 实例为 `null`
@@ -289,13 +289,13 @@ TargetClass.method {
}
```
<b>解决方案</b>
**解决方案**
这种情况比较少见,请检查你要查询的目标 `Class` 是否被正确赋值并检查整个 Hook 流程和使用范围。
!> `loggerE` Field match type class is not found
<b>异常原因</b>
**异常原因**
在查找变量时所设置的查询条件中 `type``Class` 实例未被找到。
@@ -309,13 +309,13 @@ field {
}
```
<b>解决方案</b>
**解决方案**
请检查查询条件中 `type``Class` 是否存在,然后再试一次。
!> `loggerE` Method match returnType class is not found
<b>异常原因</b>
**异常原因**
在查找方法时所设置的查询条件中 `returnType``Class` 实例未被找到。
@@ -329,13 +329,13 @@ method {
}
```
<b>解决方案</b>
**解决方案**
请检查查询条件中 `returnType``Class` 是否存在,然后再试一次。
!> `loggerE` Method/Constructor match paramType\[<b>INDEX</b>\] class is not found
!> `loggerE` Method/Constructor match paramType\[**INDEX**\] class is not found
<b>异常原因</b>
**异常原因**
在查找方法、构造方法时所设置的查询条件中 `param``index` 号下标的 `Class` 实例未被找到。
@@ -347,7 +347,7 @@ method {
}
```
<b>解决方案</b>
**解决方案**
请检查查询条件中 `param``index` 号下标的 `Class` 是否存在,然后再试一次。
@@ -357,7 +357,7 @@ method {
!> `IllegalStateException` App is dead, You cannot call to appContext
<b>异常原因</b>
**异常原因**
> 第一种情况
@@ -383,7 +383,7 @@ encase {
ModuleApplication.appContext...
```
<b>解决方案</b>
**解决方案**
> 第一种情况
@@ -395,7 +395,7 @@ ModuleApplication.appContext...
!> `IllegalStateException` YukiHookModulePrefs not allowed in Custom Hook API
<b>异常原因</b>
**异常原因**
在 Hook 自身 APP(非 Xposed 模块) 中使用了 `YukiHookModulePrefs`
@@ -414,23 +414,23 @@ class MyApplication : Application() {
}
```
<b>解决方案</b>
**解决方案**
你只能在 [作为 Xposed 模块使用](config/xposed-using) 时使用 `YukiHookModulePrefs`,在 Hook 自身 APP 中请使用原生的 `Sp` 存储。
!> `IllegalStateException` Xposed modulePackageName load failed, please reset and rebuild it
<b>异常原因</b>
**异常原因**
在 Hook 过程中使用 `YukiHookModulePrefs` 时无法读取装载时的 `modulePackageName` 导致不能确定自身模块的包名。
<b>解决方案</b>
**解决方案**
请仔细阅读 [这里](config/xposed-using?id=modulepackagename-参数) 的帮助文档,正确配置模块的 Hook 入口类包名。
!> `IllegalStateException` If you want to use module prefs, you must set the context instance first
<b>异常原因</b>
**异常原因**
在模块中使用了 `YukiHookModulePrefs` 存储数据但并未传入 `Context` 实例。
@@ -447,7 +447,7 @@ class MainActivity : AppCompatActivity() {
}
```
<b>解决方案</b>
**解决方案**
`Activity` 中推荐使用 `modulePrefs` 方法来装载 `YukiHookModulePrefs`
@@ -466,19 +466,19 @@ class MainActivity : AppCompatActivity() {
}
```
!> `IllegalStateException` Key-Value type <b>TYPE</b> is not allowed
!> `IllegalStateException` Key-Value type **TYPE** is not allowed
<b>异常原因</b>
**异常原因**
在使用 `YukiHookModulePrefs``get``put` 方法时传入了不支持的存储类型。
<b>解决方案</b>
**解决方案**
`YukiHookModulePrefs` 支持的类型只有 `String``Set<String>``Int``Float``Long``Boolean`,请传入支持的类型。
!> `IllegalStateException` HookParam Method args index must be >= 0
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `args().last()` 但是目标 `param` 为空或 `args` 中的 `index` 设置了小于 0 的数值。
@@ -496,13 +496,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,且不能对 `args` 的下标设置小于 0 的数值。
!> `IllegalStateException` HookParam instance got null! Is this a static member?
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `instance` 变量或 `instance` 方法但获取不到当前实例的对象。
@@ -520,13 +520,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你 Hook 的方法是否为静态类型,静态类型的方法没有实例,不能使用此功能,若非静态方法,请检查实例是否已经销毁。
!> `IllegalStateException` Current hook Method type is wrong or null
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `method` 变量但获取不到当前实例的方法实例。
@@ -542,13 +542,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你 Hook 的方法是构造方法还是普通方法并使用对应类型的方法获取指定的实例。
!> `IllegalStateException` Current hook Constructor type is wrong or null
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `constructor` 变量但获取不到当前实例的方法实例。
@@ -564,13 +564,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你 Hook 的方法是普通方法还是构造方法并使用对应类型的方法获取指定的实例。
!> `IllegalStateException` HookParam instance cannot cast to <b>TYPE</b>
!> `IllegalStateException` HookParam instance cannot cast to **TYPE**
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `instance` 方法指定了错误的类型。
@@ -586,13 +586,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认当前 Hook 实例的正确类型并重新填写泛型中的类型,若不能确定请使用 `Any` 或直接使用 `instance` 变量。
!> `IllegalStateException` HookParam Method args is empty, mabe not has args
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `ArgsModifyer.set` 方法但是当前实例的方法参数数组为空。
@@ -608,13 +608,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你 Hook 的目标方法、构造方法的方法参数数量是否不为空,否则你无法使用此功能。
!> `IllegalStateException` HookParam Method args index out of bounds, max is <b>NUMBER</b>
!> `IllegalStateException` HookParam Method args index out of bounds, max is **NUMBER**
<b>异常原因</b>
**异常原因**
`HookParam` 中调用 `ArgsModifyer.set` 方法指定了超出方法参数下标的数组序号。
@@ -630,13 +630,13 @@ injectMember {
}
```
<b>解决方案</b>
**解决方案**
请确认你 Hook 的目标方法、构造方法的方法参数个数,并重新设置数组下标。
!> `IllegalStateException` PackageParam got null ClassLoader
<b>异常原因</b>
**异常原因**
`PackageParam` 中调用了 `appClassLoader` 变量但是无法获取到实例对象。
@@ -649,13 +649,13 @@ encase {
}
```
<b>解决方案</b>
**解决方案**
这种情况几乎不存在,除非模块被装载的宿主或目标 Xposed 框架自身存在问题,若真的发生了此问题,请携带详细日志进行反馈。
!> `IllegalStateException` PackageParam got null appContext
<b>异常原因</b>
**异常原因**
`PackageParam` 中调用了 `appContext` 变量但是无法获取到实例对象。
@@ -668,23 +668,23 @@ encase {
}
```
<b>解决方案</b>
**解决方案**
`appContext` 在宿主环境初始化完成之前有大的概率可能是空的,请延迟获取或在宿主的 Hook 方法回调方法体内再使用此变量。
!> `IllegalStateException` VariousClass match failed of those <b>CLASSES</b>
!> `IllegalStateException` VariousClass match failed of those **CLASSES**
<b>异常原因</b>
**异常原因**
在使用 `VariousClass` 创建不确定的 `Class` 对象时全部的 `Class` 都没有被找到。
<b>解决方案</b>
**解决方案**
检查当前 Hook 的宿主内是否存在其中能够匹配的 `Class` 后,再试一次。
!> `IllegalStateException` Cannot get hook class "<b>NAME</b>" cause <b>THROWABLE</b>
!> `IllegalStateException` Cannot get hook class "**NAME**" cause **THROWABLE**
<b>异常原因</b>
**异常原因**
`hook` 方法体非 `onPrepareHook` 方法内调用了 `instanceClass` 变量且当前 Hook 的 `Class` 不存在。
@@ -697,7 +697,7 @@ TargetClass.hook {
}
```
<b>解决方案</b>
**解决方案**
`hook` 内直接使用 `instanceClass` 是很危险的,若 Class 不存在则会直接导致 Hook 进程“死掉”。
@@ -705,7 +705,7 @@ TargetClass.hook {
!> `IllegalStateException` Hook Members is empty, hook aborted
<b>异常原因</b>
**异常原因**
使用了 `hook` 方法体但其中并没有填写内容。
@@ -717,13 +717,13 @@ TargetClass.hook {
}
```
<b>解决方案</b>
**解决方案**
你必须在 `hook` 方法体内加入至少一个 `injectMember` 方法。
!> `IllegalStateException` paramTypes is empty, please use emptyParam() instead
<b>异常原因</b>
**异常原因**
在查找方法、构造方法时保留了空的 `param` 方法。
@@ -737,7 +737,7 @@ method {
}
```
<b>解决方案</b>
**解决方案**
若要标识此方法、构造方法没有参数,你可以有如下设置方法。

View File

@@ -49,7 +49,7 @@ class MyApplication : Application() {
### [Pine](https://github.com/canyie/pine)
> <b>所需 Xposed API 依赖</b> `top.canyie.pine:xposed`
> **所需 Xposed API 依赖** `top.canyie.pine:xposed`
> 示例如下
@@ -68,7 +68,7 @@ override fun attachBaseContext(base: Context?) {
### [SandHook](https://github.com/asLody/SandHook)
> <b>所需 Xposed API 依赖</b> `com.swift.sandhook:xposedcompat` 或 `com.swift.sandhook:xposedcompat_new`
> **所需 Xposed API 依赖** `com.swift.sandhook:xposedcompat` 或 `com.swift.sandhook:xposedcompat_new`
> 示例如下
@@ -90,7 +90,7 @@ override fun attachBaseContext(base: Context?) {
### [Whale](https://github.com/asLody/whale)
> <b>所需 Xposed API 依赖</b> `com.wind.xposed:xposed-on-whale`
> **所需 Xposed API 依赖** `com.wind.xposed:xposed-on-whale`
请参考 [xposed-hook-based-on-whale](https://github.com/WindySha/xposed-hook-based-on-whale)。

View File

@@ -22,13 +22,13 @@ annotation class InjectYukiHookWithXposed(val sourcePath: String, val modulePack
!> `@InjectYukiHookWithXposed` 注解的 `Class` 必须实现 `YukiHookXposedInitProxy` 接口。
!> 在你当前项目中的所有 `Class` 标记中<b>只能存在一次</b>,若<b>存在多个声明自动处理程序<u>会在编译时抛出异常</u></b>,你可以自定义其相关参数。
!> 在你当前项目中的所有 `Class` 标记中**只能存在一次**,若**存在多个声明自动处理程序<u>会在编译时抛出异常</u>**,你可以自定义其相关参数。
#### sourcePath 参数
`sourcePath` 参数决定了自动处理程序自动查找并匹配你当前项目路径的重要标识,此参数的内容为相对路径匹配,默认参数为 `src/main`
!> 如果你的项目不在 `...app/src/main...` 或你手动使用 `sourceSets` 设置了项目路径,你就需要手动设置 `sourcePath` 参数,<b>否则自动处理程序将无法识别你的项目路径并<u>会在编译时抛出异常</u></b>
!> 如果你的项目不在 `...app/src/main...` 或你手动使用 `sourceSets` 设置了项目路径,你就需要手动设置 `sourcePath` 参数,**否则自动处理程序将无法识别你的项目路径并<u>会在编译时抛出异常</u>**
> 示例如下