From 1075743360383c98b3d64169aff3781e4bdd7a26 Mon Sep 17 00:00:00 2001 From: Nullptr Date: Fri, 3 Sep 2021 19:16:45 +0800 Subject: [PATCH] [core] fix loading embedded module so (#1036) * [core] fix loading embedded module so * [core] move if out of for * [core] make cpp master happy * [core] make cpp master happy once more Co-authored-by: LoveSy --- .../org/lsposed/lspd/models/PreLoadedApk.aidl | 1 + .../de/robv/android/xposed/XposedInit.java | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/aidl/org/lsposed/lspd/models/PreLoadedApk.aidl b/core/src/main/aidl/org/lsposed/lspd/models/PreLoadedApk.aidl index 643e9d67..85c8fbab 100644 --- a/core/src/main/aidl/org/lsposed/lspd/models/PreLoadedApk.aidl +++ b/core/src/main/aidl/org/lsposed/lspd/models/PreLoadedApk.aidl @@ -1,6 +1,7 @@ package org.lsposed.lspd.models; parcelable PreLoadedApk { + String hostApk; List preLoadedDexes; List moduleClassNames; List moduleLibraryNames; 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 7532002b..dfe4c918 100644 --- a/core/src/main/java/de/robv/android/xposed/XposedInit.java +++ b/core/src/main/java/de/robv/android/xposed/XposedInit.java @@ -336,8 +336,22 @@ public final class XposedInit { var sb = new StringBuilder(); var abis = Process.is64Bit() ? Build.SUPPORTED_64_BIT_ABIS : Build.SUPPORTED_32_BIT_ABIS; - for (String abi : abis) { - sb.append(apk).append("!/lib/").append(abi).append(File.pathSeparator); + if (file.hostApk != null) { + try { + var runtime = XposedHelpers.callStaticMethod(Class.forName("dalvik.system.VMRuntime"), "getRuntime"); + var arch = (String) XposedHelpers.callMethod(runtime, "vmInstructionSet"); + var hostDir = new File(file.hostApk).getParent(); + for (String abi : abis) { + sb.append(hostDir).append("/lib/").append(arch).append("/").append(name).append(".so!/lib/").append(abi).append(File.pathSeparator); + } + } catch (ClassNotFoundException e) { + Log.e(TAG, " Cannot load module: " + name, e); + return false; + } + } else { + for (String abi : abis) { + sb.append(apk).append("!/lib/").append(abi).append(File.pathSeparator); + } } var librarySearchPath = sb.toString();