Fix some device system's "classLoader" maybe wrong in "XC_InitPackageResources.InitPackageResourcesParam"

This commit is contained in:
2022-05-29 01:15:44 +08:00
parent 3419430b8d
commit ffc141346c

View File

@@ -56,6 +56,7 @@ import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiModuleResources
import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources import com.highcapable.yukihookapi.hook.xposed.bridge.dummy.YukiResources
import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector import com.highcapable.yukihookapi.hook.xposed.bridge.inject.YukiHookBridge_Injector
import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel import com.highcapable.yukihookapi.hook.xposed.channel.YukiHookDataChannel
import dalvik.system.PathClassLoader
import de.robv.android.xposed.* import de.robv.android.xposed.*
import de.robv.android.xposed.callbacks.XC_InitPackageResources import de.robv.android.xposed.callbacks.XC_InitPackageResources
import de.robv.android.xposed.callbacks.XC_LoadPackage import de.robv.android.xposed.callbacks.XC_LoadPackage
@@ -184,6 +185,8 @@ object YukiHookBridge {
/** /**
* 创建、修改 [PackageParamWrapper] * 创建、修改 [PackageParamWrapper]
*
* 忽略在 [type] 不为 [HookEntryType.ZYGOTE] 时 [appClassLoader] 为空导致首次使用 [XposedBridge.BOOTCLASSLOADER] 装载的问题
* @param type 当前正在进行的 Hook 类型 * @param type 当前正在进行的 Hook 类型
* @param packageName 包名 * @param packageName 包名
* @param processName 当前进程名 * @param processName 当前进程名
@@ -201,19 +204,21 @@ object YukiHookBridge {
appResources: YukiResources? = null appResources: YukiResources? = null
) = run { ) = run {
if (packageParamWrappers[packageName] == null) if (packageParamWrappers[packageName] == null)
PackageParamWrapper( if (type == HookEntryType.ZYGOTE || appClassLoader != null)
type = type, PackageParamWrapper(
packageName = packageName ?: SYSTEM_FRAMEWORK_NAME, type = type,
processName = processName ?: SYSTEM_FRAMEWORK_NAME, packageName = packageName ?: SYSTEM_FRAMEWORK_NAME,
appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER, processName = processName ?: SYSTEM_FRAMEWORK_NAME,
appInfo = appInfo, appClassLoader = appClassLoader ?: XposedBridge.BOOTCLASSLOADER,
appResources = appResources appInfo = appInfo,
).also { packageParamWrappers[packageName ?: SYSTEM_FRAMEWORK_NAME] = it } appResources = appResources
).also { packageParamWrappers[packageName ?: SYSTEM_FRAMEWORK_NAME] = it }
else null
else packageParamWrappers[packageName]?.also { else packageParamWrappers[packageName]?.also {
it.type = type it.type = type
if (packageName?.isNotBlank() == true) it.packageName = packageName if (packageName?.isNotBlank() == true) it.packageName = packageName
if (processName?.isNotBlank() == true) it.processName = processName if (processName?.isNotBlank() == true) it.processName = processName
if (appClassLoader != null) it.appClassLoader = appClassLoader if (appClassLoader != null && (type == HookEntryType.ZYGOTE || appClassLoader is PathClassLoader)) it.appClassLoader = appClassLoader
if (appInfo != null) it.appInfo = appInfo if (appInfo != null) it.appInfo = appInfo
if (appResources != null) it.appResources = appResources if (appResources != null) it.appResources = appResources
} }