From 2e0de88ecac9228e20d8e7f5ca8a9e083093e6be Mon Sep 17 00:00:00 2001 From: JingMatrix Date: Sat, 18 May 2024 21:31:04 +0200 Subject: [PATCH] Apply patch da1daf of mywalkb/LSPosed_mod From Android 14 QPR3 and forward, the classloader of injected app (com.android.shell) does not contain the apk manager, so in hook getClassLoader there is a new check when it got a negative response the apk manager is injected in classloader, so parasitic manager can start correctly. Co-authored-by: mywalk <66966897+mywalkb@users.noreply.github.com> --- .../lsposed/lspd/util/ParasiticManagerHooker.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/magisk-loader/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java b/magisk-loader/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java index ca506189..19e9671e 100644 --- a/magisk-loader/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java +++ b/magisk-loader/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java @@ -123,7 +123,17 @@ public class ParasiticManagerHooker { protected void afterHookedMethod(MethodHookParam param) { var pkgInfo = getManagerPkgInfo(null); if (pkgInfo != null && XposedHelpers.getObjectField(param.thisObject, "mApplicationInfo") == pkgInfo.applicationInfo) { - sendBinderToManager((ClassLoader) param.getResult(), managerService.asBinder()); + var sSourceDir = pkgInfo.applicationInfo.sourceDir; + var pathClassLoader = param.getResult(); + + Hookers.logD("LoadedApk getClassLoader " + pathClassLoader); + var pathList = XposedHelpers.getObjectField(pathClassLoader, "pathList"); + List lstDexPath = (List)XposedHelpers.callMethod(pathList, "getDexPaths"); + if (!lstDexPath.contains(sSourceDir)) { + Utils.logW("Could not find manager apk injected in classloader"); + XposedHelpers.callMethod(pathClassLoader, "addDexPath", sSourceDir); + } + sendBinderToManager((ClassLoader) pathClassLoader, managerService.asBinder()); unhooks[0].unhook(); } }