mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-04 09:45:19 +08:00
Added refreshModuleAppResources function
This commit is contained in:
@@ -67,6 +67,11 @@ class HookEntry : IYukiHookXposedInit {
|
|||||||
// 若无和模块频繁交互数据在宿主重新启动之前建议开启
|
// 若无和模块频繁交互数据在宿主重新启动之前建议开启
|
||||||
// 若需要实时交互数据建议关闭或从 [YukiHookModulePrefs] 中进行动态配置
|
// 若需要实时交互数据建议关闭或从 [YukiHookModulePrefs] 中进行动态配置
|
||||||
isEnableModulePrefsCache = true
|
isEnableModulePrefsCache = true
|
||||||
|
// 是否启用当前 Xposed 模块自身 [Resources] 缓存功能
|
||||||
|
// 一般情况下模块的 Resources 是不会改变的 - 但是在语言区域更改、分辨率更改等情况下 - 就需要刷新缓存
|
||||||
|
// 若无上述需求 - 在宿主重新启动之前建议开启
|
||||||
|
// 你可以手动调用 [PackageParam.refreshModuleAppResources] 来刷新缓存
|
||||||
|
isEnableModuleAppResourcesCache = true
|
||||||
// 是否启用 [Member] 缓存功能
|
// 是否启用 [Member] 缓存功能
|
||||||
// 为防止 [Member] 复用过高造成的系统 GC 问题 - 此功能默认启用
|
// 为防止 [Member] 复用过高造成的系统 GC 问题 - 此功能默认启用
|
||||||
// 除非缓存的 [Member] 发生了混淆的问题 - 否则建议启用
|
// 除非缓存的 [Member] 发生了混淆的问题 - 否则建议启用
|
||||||
|
@@ -216,6 +216,20 @@ fun resources(): HookResources
|
|||||||
|
|
||||||
请调用 `HookResources.hook` 方法开始 Hook。
|
请调用 `HookResources.hook` 方法开始 Hook。
|
||||||
|
|
||||||
|
### refreshModuleAppResources [method]
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
fun refreshModuleAppResources()
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.0.87` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
|
> 刷新当前 Xposed 模块自身 `Resources`。
|
||||||
|
|
||||||
### loadApp [method]
|
### loadApp [method]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
|
@@ -152,12 +152,32 @@ var isEnableModulePrefsCache: Boolean
|
|||||||
|
|
||||||
你可以手动在 `YukiHookModulePrefs` 中自由开启和关闭缓存功能以及清除缓存。
|
你可以手动在 `YukiHookModulePrefs` 中自由开启和关闭缓存功能以及清除缓存。
|
||||||
|
|
||||||
|
#### isEnableModuleAppResourcesCache [field]
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
var isEnableModuleAppResourcesCache: Boolean
|
||||||
|
```
|
||||||
|
|
||||||
|
**变更记录**
|
||||||
|
|
||||||
|
`v1.0.87` `新增`
|
||||||
|
|
||||||
|
**功能描述**
|
||||||
|
|
||||||
|
> 是否启用当前 Xposed 模块自身 `Resources` 缓存功能。
|
||||||
|
|
||||||
|
为防止内存复用过高问题,此功能默认启用。
|
||||||
|
|
||||||
|
你可以手动调用 `PackageParam.refreshModuleAppResources` 来刷新缓存。
|
||||||
|
|
||||||
|
!> 关闭后每次使用 `PackageParam.moduleAppResources` 都会重新创建,可能会造成运行缓慢。
|
||||||
|
|
||||||
#### isEnableMemberCache [field]
|
#### isEnableMemberCache [field]
|
||||||
|
|
||||||
```kotlin
|
```kotlin
|
||||||
var isEnableMemberCache: Boolean
|
var isEnableMemberCache: Boolean
|
||||||
```
|
```
|
||||||
|
ø
|
||||||
**变更记录**
|
**变更记录**
|
||||||
|
|
||||||
`v1.0.68` `新增`
|
`v1.0.68` `新增`
|
||||||
@@ -211,6 +231,7 @@ class HookEntryClass : IYukiHookXposedInit {
|
|||||||
isDebug = true
|
isDebug = true
|
||||||
isAllowPrintingLogs = true
|
isAllowPrintingLogs = true
|
||||||
isEnableModulePrefsCache = true
|
isEnableModulePrefsCache = true
|
||||||
|
isEnableModuleAppResourcesCache = true
|
||||||
isEnableMemberCache = true
|
isEnableMemberCache = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -233,6 +254,7 @@ class HookEntryClass : IYukiHookXposedInit {
|
|||||||
isDebug = true
|
isDebug = true
|
||||||
isAllowPrintingLogs = true
|
isAllowPrintingLogs = true
|
||||||
isEnableModulePrefsCache = true
|
isEnableModulePrefsCache = true
|
||||||
|
isEnableModuleAppResourcesCache = true
|
||||||
isEnableMemberCache = true
|
isEnableMemberCache = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,6 +276,7 @@ class HookEntryClass : IYukiHookXposedInit {
|
|||||||
YukiHookAPI.Configs.isDebug = true
|
YukiHookAPI.Configs.isDebug = true
|
||||||
YukiHookAPI.Configs.isAllowPrintingLogs = true
|
YukiHookAPI.Configs.isAllowPrintingLogs = true
|
||||||
YukiHookAPI.Configs.isEnableModulePrefsCache = true
|
YukiHookAPI.Configs.isEnableModulePrefsCache = true
|
||||||
|
YukiHookAPI.Configs.isEnableModuleAppResourcesCache = true
|
||||||
YukiHookAPI.Configs.isEnableMemberCache = true
|
YukiHookAPI.Configs.isEnableMemberCache = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -31,6 +31,7 @@ package com.highcapable.yukihookapi
|
|||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.Resources
|
||||||
import com.highcapable.yukihookapi.YukiHookAPI.configs
|
import com.highcapable.yukihookapi.YukiHookAPI.configs
|
||||||
import com.highcapable.yukihookapi.YukiHookAPI.encase
|
import com.highcapable.yukihookapi.YukiHookAPI.encase
|
||||||
import com.highcapable.yukihookapi.hook.core.finder.ConstructorFinder
|
import com.highcapable.yukihookapi.hook.core.finder.ConstructorFinder
|
||||||
@@ -139,6 +140,17 @@ object YukiHookAPI {
|
|||||||
*/
|
*/
|
||||||
var isEnableModulePrefsCache = true
|
var isEnableModulePrefsCache = true
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用当前 Xposed 模块自身 [Resources] 缓存功能
|
||||||
|
*
|
||||||
|
* - 为防止内存复用过高问题 - 此功能默认启用
|
||||||
|
*
|
||||||
|
* - ❗关闭后每次使用 [PackageParam.moduleAppResources] 都会重新创建 - 可能会造成运行缓慢
|
||||||
|
*
|
||||||
|
* 你可以手动调用 [PackageParam.refreshModuleAppResources] 来刷新缓存
|
||||||
|
*/
|
||||||
|
var isEnableModuleAppResourcesCache = true
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否启用 [Member] 缓存功能
|
* 是否启用 [Member] 缓存功能
|
||||||
*
|
*
|
||||||
|
@@ -32,6 +32,7 @@ package com.highcapable.yukihookapi.hook.param
|
|||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
|
import com.highcapable.yukihookapi.YukiHookAPI
|
||||||
import com.highcapable.yukihookapi.hook.bean.HookClass
|
import com.highcapable.yukihookapi.hook.bean.HookClass
|
||||||
import com.highcapable.yukihookapi.hook.bean.HookResources
|
import com.highcapable.yukihookapi.hook.bean.HookResources
|
||||||
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
||||||
@@ -139,7 +140,9 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
|||||||
* @return [YukiModuleResources]
|
* @return [YukiModuleResources]
|
||||||
* @throws IllegalStateException 如果当前 Hook Framework 不支持此功能
|
* @throws IllegalStateException 如果当前 Hook Framework 不支持此功能
|
||||||
*/
|
*/
|
||||||
val moduleAppResources get() = YukiHookBridge.moduleAppResources ?: error("Current Hook Framework not support moduleAppResources")
|
val moduleAppResources
|
||||||
|
get() = (if (YukiHookAPI.Configs.isEnableModuleAppResourcesCache) YukiHookBridge.moduleAppResources
|
||||||
|
else YukiHookBridge.dynamicModuleAppResources) ?: error("Current Hook Framework not support moduleAppResources")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获得当前使用的存取数据对象缓存实例
|
* 获得当前使用的存取数据对象缓存实例
|
||||||
@@ -174,6 +177,9 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
|||||||
this.wrapper = anotherParam.wrapper
|
this.wrapper = anotherParam.wrapper
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 刷新当前 Xposed 模块自身 [Resources] */
|
||||||
|
fun refreshModuleAppResources() = YukiHookBridge.refreshModuleAppResources()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 装载并 Hook 指定、全部包名的 APP
|
* 装载并 Hook 指定、全部包名的 APP
|
||||||
*
|
*
|
||||||
|
@@ -77,6 +77,12 @@ object YukiHookBridge {
|
|||||||
/** 当前 Xposed 模块自身 [Resources] */
|
/** 当前 Xposed 模块自身 [Resources] */
|
||||||
internal var moduleAppResources: YukiModuleResources? = null
|
internal var moduleAppResources: YukiModuleResources? = null
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前 Xposed 模块自身动态 [Resources]
|
||||||
|
* @return [YukiModuleResources] or null
|
||||||
|
*/
|
||||||
|
internal val dynamicModuleAppResources get() = runCatching { YukiModuleResources.createInstance(moduleAppFilePath) }.getOrNull()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模块是否装载了 Xposed 回调方法
|
* 模块是否装载了 Xposed 回调方法
|
||||||
*
|
*
|
||||||
@@ -185,6 +191,11 @@ object YukiHookBridge {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 刷新当前 Xposed 模块自身 [Resources] */
|
||||||
|
internal fun refreshModuleAppResources() {
|
||||||
|
dynamicModuleAppResources?.let { moduleAppResources = it }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 标识 Xposed API 装载完成
|
* 标识 Xposed API 装载完成
|
||||||
*
|
*
|
||||||
@@ -204,7 +215,7 @@ object YukiHookBridge {
|
|||||||
@YukiGenerateApi
|
@YukiGenerateApi
|
||||||
fun callXposedZygoteLoaded(sparam: IXposedHookZygoteInit.StartupParam) {
|
fun callXposedZygoteLoaded(sparam: IXposedHookZygoteInit.StartupParam) {
|
||||||
moduleAppFilePath = sparam.modulePath
|
moduleAppFilePath = sparam.modulePath
|
||||||
moduleAppResources = YukiModuleResources.createInstance(moduleAppFilePath)
|
refreshModuleAppResources()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -53,7 +53,7 @@ class YukiModuleResources(private val baseInstance: XModuleResources) :
|
|||||||
* @param path Xposed 模块 APK 路径
|
* @param path Xposed 模块 APK 路径
|
||||||
* @return [YukiModuleResources]
|
* @return [YukiModuleResources]
|
||||||
*/
|
*/
|
||||||
fun createInstance(path: String) = YukiModuleResources(XModuleResources.createInstance(path, null))
|
internal fun createInstance(path: String) = YukiModuleResources(XModuleResources.createInstance(path, null))
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user