From bfe31837adab9c5c3df591f5bd0318baf39f17b6 Mon Sep 17 00:00:00 2001 From: vvb2060 Date: Wed, 14 Jul 2021 21:38:45 +0800 Subject: [PATCH] Add getLdLibraryPath (#812) --- .../util/InMemoryDelegateLastClassLoader.java | 20 +++++++++++-- .../java/hidden/ByteBufferDexClassLoader.java | 4 +++ .../dalvik/system/BaseDexClassLoader.java | 28 +------------------ 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/util/InMemoryDelegateLastClassLoader.java b/core/src/main/java/org/lsposed/lspd/util/InMemoryDelegateLastClassLoader.java index f7a2dde7..a8485ec7 100644 --- a/core/src/main/java/org/lsposed/lspd/util/InMemoryDelegateLastClassLoader.java +++ b/core/src/main/java/org/lsposed/lspd/util/InMemoryDelegateLastClassLoader.java @@ -114,6 +114,18 @@ public final class InMemoryDelegateLastClassLoader extends ByteBufferDexClassLoa return null; } + @Override + public String getLdLibraryPath() { + var result = new StringBuilder(); + for (var directory : nativeLibraryDirs) { + if (result.length() > 0) { + result.append(':'); + } + result.append(directory); + } + return result.toString(); + } + @Override protected URL findResource(String name) { try { @@ -152,12 +164,14 @@ public final class InMemoryDelegateLastClassLoader extends ByteBufferDexClassLoa return new CompoundEnumeration<>(resources); } - public static InMemoryDelegateLastClassLoader loadApk(File apk, String librarySearchPath, ClassLoader parent) { + public static InMemoryDelegateLastClassLoader loadApk(File apk, + String librarySearchPath, + ClassLoader parent) { var byteBuffers = new ArrayList(); try (var apkFile = new ZipFile(apk)) { - int secondaryNumber = 2; + int secondary = 2; for (var dexFile = apkFile.getEntry("classes.dex"); dexFile != null; - dexFile = apkFile.getEntry("classes" + secondaryNumber + ".dex"), secondaryNumber++) { + dexFile = apkFile.getEntry("classes" + secondary + ".dex"), secondary++) { try (var in = apkFile.getInputStream(dexFile)) { var byteBuffer = ByteBuffer.allocate(in.available()); byteBuffer.mark(); diff --git a/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java b/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java index e9c86146..d61149a9 100644 --- a/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java +++ b/hiddenapi-bridge/src/main/java/hidden/ByteBufferDexClassLoader.java @@ -12,4 +12,8 @@ public class ByteBufferDexClassLoader extends BaseDexClassLoader { public ByteBufferDexClassLoader(ByteBuffer[] dexFiles, String librarySearchPath, ClassLoader parent) { super(dexFiles, librarySearchPath, parent); } + + public String getLdLibraryPath() { + return super.getLdLibraryPath(); + } } diff --git a/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java b/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java index 129cd920..13379131 100644 --- a/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java +++ b/hiddenapi-stubs/src/main/java/dalvik/system/BaseDexClassLoader.java @@ -6,9 +6,7 @@ package dalvik.system; import java.io.File; -import java.net.URL; import java.nio.ByteBuffer; -import java.util.Enumeration; public class BaseDexClassLoader extends ClassLoader { public BaseDexClassLoader(String dexPath, File optimizedDirectory, String librarySearchPath, ClassLoader parent) { @@ -23,31 +21,7 @@ public class BaseDexClassLoader extends ClassLoader { throw new RuntimeException("Stub!"); } - protected Class findClass(String name) throws ClassNotFoundException { - throw new RuntimeException("Stub!"); - } - - protected URL findResource(String name) { - throw new RuntimeException("Stub!"); - } - - protected Enumeration findResources(String name) { - throw new RuntimeException("Stub!"); - } - - public String findLibrary(String name) { - throw new RuntimeException("Stub!"); - } - - protected synchronized Package getPackage(String name) { - throw new RuntimeException("Stub!"); - } - - public String toString() { - throw new RuntimeException("Stub!"); - } - - public void addDexPath(String dexPath) { + public String getLdLibraryPath() { throw new RuntimeException("Stub!"); } }