From afe74b536bf4ae5f936613059eed5d0c60cc2cb7 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 27 Jul 2023 01:37:54 +0800 Subject: [PATCH] Only clear modules' LoadedApks rather than all (#2647) --- core/src/main/java/de/robv/android/xposed/XposedInit.java | 4 +++- .../main/java/org/lsposed/lspd/impl/LSPosedContext.java | 7 ++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/de/robv/android/xposed/XposedInit.java b/core/src/main/java/de/robv/android/xposed/XposedInit.java index defee355..6cd49140 100644 --- a/core/src/main/java/de/robv/android/xposed/XposedInit.java +++ b/core/src/main/java/de/robv/android/xposed/XposedInit.java @@ -237,12 +237,14 @@ public final class XposedInit { } public static void loadModules(ActivityThread at) { + var packages = (ArrayMap) XposedHelpers.getObjectField(at, "mPackages"); serviceClient.getModulesList().forEach(module -> { loadedModules.put(module.packageName, Optional.empty()); if (!LSPosedContext.loadModule(at, module)) { loadedModules.remove(module.packageName); + } else { + packages.remove(module.packageName); } - ((ArrayMap) XposedHelpers.getObjectField(ActivityThread.currentActivityThread(), "mPackages")).clear(); }); } diff --git a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java index bd2ad4de..8e2e0f41 100644 --- a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java +++ b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java @@ -143,6 +143,7 @@ public class LSPosedContext extends XposedContext { Log.e(TAG, " This may cause strange issues and must be fixed by the module developer."); return false; } + module.applicationInfo.packageName = module.packageName; // Just in case var loadedApk = at.getPackageInfoNoCheck(module.applicationInfo, null); XposedHelpers.setObjectField(loadedApk, "mClassLoader", mcl); XposedHelpers.setObjectField(loadedApk, "mDataDir", appDir); @@ -217,13 +218,13 @@ public class LSPosedContext extends XposedContext { Log.e(TAG, " Failed to load class " + moduleClass, e); } } - Log.d(TAG, "Loaded module " + module.packageName + ": " + ctx); module.file.moduleLibraryNames.forEach(NativeAPI::recordNativeEntrypoint); - return true; + Log.d(TAG, "Loaded module " + module.packageName + ": " + ctx); } catch (Throwable e) { Log.d(TAG, "Loading module " + module.packageName, e); + return false; } - return false; + return true; } @Override