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:
@@ -31,6 +31,7 @@ package com.highcapable.yukihookapi
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import com.highcapable.yukihookapi.YukiHookAPI.configs
|
||||
import com.highcapable.yukihookapi.YukiHookAPI.encase
|
||||
import com.highcapable.yukihookapi.hook.core.finder.ConstructorFinder
|
||||
@@ -139,6 +140,17 @@ object YukiHookAPI {
|
||||
*/
|
||||
var isEnableModulePrefsCache = true
|
||||
|
||||
/**
|
||||
* 是否启用当前 Xposed 模块自身 [Resources] 缓存功能
|
||||
*
|
||||
* - 为防止内存复用过高问题 - 此功能默认启用
|
||||
*
|
||||
* - ❗关闭后每次使用 [PackageParam.moduleAppResources] 都会重新创建 - 可能会造成运行缓慢
|
||||
*
|
||||
* 你可以手动调用 [PackageParam.refreshModuleAppResources] 来刷新缓存
|
||||
*/
|
||||
var isEnableModuleAppResourcesCache = true
|
||||
|
||||
/**
|
||||
* 是否启用 [Member] 缓存功能
|
||||
*
|
||||
|
@@ -32,6 +32,7 @@ package com.highcapable.yukihookapi.hook.param
|
||||
import android.app.Application
|
||||
import android.content.pm.ApplicationInfo
|
||||
import android.content.res.Resources
|
||||
import com.highcapable.yukihookapi.YukiHookAPI
|
||||
import com.highcapable.yukihookapi.hook.bean.HookClass
|
||||
import com.highcapable.yukihookapi.hook.bean.HookResources
|
||||
import com.highcapable.yukihookapi.hook.bean.VariousClass
|
||||
@@ -139,7 +140,9 @@ open class PackageParam(@PublishedApi internal var wrapper: PackageParamWrapper?
|
||||
* @return [YukiModuleResources]
|
||||
* @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
|
||||
}
|
||||
|
||||
/** 刷新当前 Xposed 模块自身 [Resources] */
|
||||
fun refreshModuleAppResources() = YukiHookBridge.refreshModuleAppResources()
|
||||
|
||||
/**
|
||||
* 装载并 Hook 指定、全部包名的 APP
|
||||
*
|
||||
|
@@ -77,6 +77,12 @@ object YukiHookBridge {
|
||||
/** 当前 Xposed 模块自身 [Resources] */
|
||||
internal var moduleAppResources: YukiModuleResources? = null
|
||||
|
||||
/**
|
||||
* 获取当前 Xposed 模块自身动态 [Resources]
|
||||
* @return [YukiModuleResources] or null
|
||||
*/
|
||||
internal val dynamicModuleAppResources get() = runCatching { YukiModuleResources.createInstance(moduleAppFilePath) }.getOrNull()
|
||||
|
||||
/**
|
||||
* 模块是否装载了 Xposed 回调方法
|
||||
*
|
||||
@@ -185,6 +191,11 @@ object YukiHookBridge {
|
||||
}
|
||||
}
|
||||
|
||||
/** 刷新当前 Xposed 模块自身 [Resources] */
|
||||
internal fun refreshModuleAppResources() {
|
||||
dynamicModuleAppResources?.let { moduleAppResources = it }
|
||||
}
|
||||
|
||||
/**
|
||||
* 标识 Xposed API 装载完成
|
||||
*
|
||||
@@ -204,7 +215,7 @@ object YukiHookBridge {
|
||||
@YukiGenerateApi
|
||||
fun callXposedZygoteLoaded(sparam: IXposedHookZygoteInit.StartupParam) {
|
||||
moduleAppFilePath = sparam.modulePath
|
||||
moduleAppResources = YukiModuleResources.createInstance(moduleAppFilePath)
|
||||
refreshModuleAppResources()
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -53,7 +53,7 @@ class YukiModuleResources(private val baseInstance: XModuleResources) :
|
||||
* @param path Xposed 模块 APK 路径
|
||||
* @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