mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Added ModuleApplication function and merge findClass function to Xposed API
This commit is contained in:
@@ -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](#介绍)
|
||||
|
@@ -18,6 +18,8 @@
|
||||
|
||||
[filename](public/PrefsData.md ':include')
|
||||
|
||||
[filename](public/ModuleApplication.md ':include')
|
||||
|
||||
[filename](public/ComponentTypeFactory.md ':include')
|
||||
|
||||
[filename](public/GraphicsTypeFactory.md ':include')
|
||||
|
76
docs/api/public/ModuleApplication.md
Normal file
76
docs/api/public/ModuleApplication.md
Normal 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` 实例。
|
@@ -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>
|
||||
|
@@ -104,6 +104,10 @@ class MainHook : YukiHookXposedInitProxy {
|
||||
}
|
||||
```
|
||||
|
||||
你还可以将你的模块 APP 的 `Application` 继承于 `ModuleApplication` 以实现更多功能。
|
||||
|
||||
详情请参考 [ModuleApplication](api/document?id=moduleapplication-class)。
|
||||
|
||||
然后,你就可以开始编写 Hook 代码了。
|
||||
|
||||
有关作为 Xposed 模块使用的相关配置详细内容,你可以 [点击这里](config/xposed-using) 继续阅读。
|
||||
|
Reference in New Issue
Block a user