Fix native lib not found
This commit is contained in:
parent
8cbf468d59
commit
da34877db8
|
|
@ -38,9 +38,7 @@ import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.lang.reflect.Modifier;
|
import java.lang.reflect.Modifier;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.nio.file.FileAlreadyExistsException;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
import java.nio.file.attribute.PosixFilePermissions;
|
import java.nio.file.attribute.PosixFilePermissions;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
@ -49,7 +47,6 @@ import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import dalvik.system.PathClassLoader;
|
|
||||||
import de.robv.android.xposed.XC_MethodHook;
|
import de.robv.android.xposed.XC_MethodHook;
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
|
|
|
||||||
|
|
@ -34,19 +34,18 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
|
||||||
/**
|
/**
|
||||||
* Instantiate original AppComponentFactory<br/>
|
* Instantiate original AppComponentFactory<br/>
|
||||||
* This method will be called at <b>instantiateClassLoader</b> by <b>createOrUpdateClassLoaderLocked</b>
|
* This method will be called at <b>instantiateClassLoader</b> by <b>createOrUpdateClassLoaderLocked</b>
|
||||||
*
|
|
||||||
* @param cl PathClassLoader(originalApk)
|
|
||||||
**/
|
**/
|
||||||
private void initOriginalAppComponentFactory(ClassLoader cl, ApplicationInfo aInfo) {
|
private void initOriginalAppComponentFactory(ApplicationInfo aInfo) {
|
||||||
final String cacheApkPath = aInfo.dataDir + "/cache/origin_apk.bin";
|
final String cacheApkPath = aInfo.dataDir + "/cache/origin_apk.bin";
|
||||||
final String originalAppComponentFactoryClass = FileUtils.readTextFromInputStream(cl.getResourceAsStream(ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH));
|
final String originalAppComponentFactoryClass =
|
||||||
|
FileUtils.readTextFromInputStream(baseClassLoader.getResourceAsStream(ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
try (InputStream inputStream = cl.getResourceAsStream(ORIGINAL_APK_ASSET_PATH)) {
|
try (InputStream inputStream = baseClassLoader.getResourceAsStream(ORIGINAL_APK_ASSET_PATH)) {
|
||||||
Files.copy(inputStream, Paths.get(cacheApkPath));
|
Files.copy(inputStream, Paths.get(cacheApkPath));
|
||||||
} catch (FileAlreadyExistsException ignored) {
|
} catch (FileAlreadyExistsException ignored) {
|
||||||
}
|
}
|
||||||
appClassLoader = new PathClassLoader(cacheApkPath, cl.getParent());
|
appClassLoader = new PathClassLoader(cacheApkPath, aInfo.nativeLibraryDir, baseClassLoader.getParent());
|
||||||
if (originalAppComponentFactoryClass == null || originalAppComponentFactoryClass.isEmpty())
|
if (originalAppComponentFactoryClass == null || originalAppComponentFactoryClass.isEmpty())
|
||||||
originalAppComponentFactory = new AppComponentFactory();
|
originalAppComponentFactory = new AppComponentFactory();
|
||||||
else
|
else
|
||||||
|
|
@ -60,7 +59,9 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
|
||||||
@Override
|
@Override
|
||||||
public ClassLoader instantiateClassLoader(ClassLoader cl, ApplicationInfo aInfo) {
|
public ClassLoader instantiateClassLoader(ClassLoader cl, ApplicationInfo aInfo) {
|
||||||
baseClassLoader = cl;
|
baseClassLoader = cl;
|
||||||
initOriginalAppComponentFactory(cl, aInfo);
|
initOriginalAppComponentFactory(aInfo);
|
||||||
|
Log.d(TAG, "baseClassLoader is " + baseClassLoader);
|
||||||
|
Log.d(TAG, "appClassLoader is " + appClassLoader);
|
||||||
return originalAppComponentFactory.instantiateClassLoader(appClassLoader, aInfo);
|
return originalAppComponentFactory.instantiateClassLoader(appClassLoader, aInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue