Added ModuleApplication function and merge findClass function to Xposed API

This commit is contained in:
2022-04-15 04:30:34 +08:00
parent 099ac65e55
commit b64c9a4d69
15 changed files with 287 additions and 21 deletions

View File

@@ -12,7 +12,7 @@
- 方便移植 快速上手
<font size=3 style="opacity: 0.6">`更新时间 2022-04-13 13:57`</font>
<font size=3 style="opacity: 0.6">`更新时间 2022-04-15 04:30`</font>
[GitHub](https://github.com/fankes/YukiHookAPI)
[Get Started](#介绍)

View File

@@ -18,6 +18,8 @@
[filename](public/PrefsData.md ':include')
[filename](public/ModuleApplication.md ':include')
[filename](public/ComponentTypeFactory.md ':include')
[filename](public/GraphicsTypeFactory.md ':include')

View File

@@ -0,0 +1,76 @@
## ModuleApplication [class]
```kotlin
open class ModuleApplication: Application()
```
<b>变更记录</b>
`v1.0.76` `新增`
<b>功能描述</b>
> 这是对使用 `YukiHookAPI` Xposed 模块实现中的一个扩展功能。
在你的 Xposed 模块的 `Application` 中继承此类。
或在 `AndroidManifest.xml``application` 标签中指定此类。
目前可实现功能如下
- 全局共享模块中静态的 `appContext`
- 在模块与宿主中装载 `YukiHookAPI.Config` 以确保 `YukiHookAPI.Configs.debugTag` 不需要重复定义
- 在模块中使用系统隐藏 API核心技术引用了开源项目 [FreeReflection](https://github.com/tiann/FreeReflection)
<b>功能示例</b>
将此类继承到你的自定义 `Application` 上。
> 示例如下
```kotlin
package com.demo
class MyApplication: ModuleApplication() {
override fun onCreate() {
super.onCreate()
}
}
```
`AndroidManifest.xml``application` 标签中指定自定义的 `Application`
> 示例如下
```xml
<application
android:name="com.demo.MyApplication"
...>
```
如果你不需要自定义 `Application` 可以直接将 `ModuleApplication` 设置到 `AndroidManifest.xml``application` 标签中。
> 示例如下
```xml
<application
android:name="com.highcapable.yukihookapi.hook.xposed.application.ModuleApplication"
...>
```
### appContext [field]
```kotlin
val appContext: ModuleApplication
```
<b>变更记录</b>
`v1.0.76` `新增`
<b>功能描述</b>
> 全局静态 `Application` 实例。

View File

@@ -355,6 +355,23 @@ method {
> 这些异常会直接导致 APP 停止运行(FC),同时会在控制台打印 `E` 级别的日志,还会造成 Hook 进程“死掉”。
!> `IllegalStateException` App is dead, You cannot call to appContext
<b>异常原因</b>
使用 `ModuleApplication` 时调用了 `appContext` 功能但是 APP 可能已经被销毁或没有正确启动。
> 示例如下
```kotlin
// 调用了此变量但是 APP 可能已被销毁或没有正确启动
ModuleApplication.appContext
```
<b>解决方案</b>
这种情况基本不存在,由于 `appContext` 是在 `onCreate` 中被赋值的,除非遇到多进程并发启动或 APP 没有启动完成前被反射调用了父类的 `onCreate` 方法。
!> `IllegalStateException` YukiHookModulePrefs not allowed in Custom Hook API
<b>异常原因</b>

View File

@@ -104,6 +104,10 @@ class MainHook : YukiHookXposedInitProxy {
}
```
你还可以将你的模块 APP 的 `Application` 继承于 `ModuleApplication` 以实现更多功能。
详情请参考 [ModuleApplication](api/document?id=moduleapplication-class)。
然后,你就可以开始编写 Hook 代码了。
有关作为 Xposed 模块使用的相关配置详细内容,你可以 [点击这里](config/xposed-using) 继续阅读。