Fix dummyClassLoader being detached when replacing app classloader
Fix #236.
This commit is contained in:
parent
065fe7b5c3
commit
50444072b0
|
|
@ -11,6 +11,7 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import dalvik.system.PathClassLoader;
|
import dalvik.system.PathClassLoader;
|
||||||
|
import de.robv.android.xposed.XposedBridge;
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
import de.robv.android.xposed.XposedHelpers;
|
||||||
|
|
||||||
public class ClassLoaderUtils {
|
public class ClassLoaderUtils {
|
||||||
|
|
@ -35,10 +36,12 @@ public class ClassLoaderUtils {
|
||||||
if (tmp == null) {
|
if (tmp == null) {
|
||||||
Utils.logD("before replacing =========================================>");
|
Utils.logD("before replacing =========================================>");
|
||||||
dumpClassLoaders(appClassLoader);
|
dumpClassLoaders(appClassLoader);
|
||||||
Field parentField = ClassLoader.class.getDeclaredField("parent");
|
ClassLoader myTopCL = curCL;
|
||||||
parentField.setAccessible(true);
|
if (curCL.getParent() == XposedBridge.dummyClassLoader) {
|
||||||
parentField.set(curCL, parent);
|
myTopCL = curCL.getParent();
|
||||||
parentField.set(lastChild, curCL);
|
}
|
||||||
|
XposedHelpers.setObjectField(myTopCL, "parent", parent);
|
||||||
|
XposedHelpers.setObjectField(lastChild, "parent", curCL);
|
||||||
Utils.logD("after replacing ==========================================>");
|
Utils.logD("after replacing ==========================================>");
|
||||||
dumpClassLoaders(appClassLoader);
|
dumpClassLoaders(appClassLoader);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,10 @@ import org.gradle.internal.os.OperatingSystem
|
||||||
|
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
version "v0.4.1.2_beta"
|
version "v0.4.1.4_beta"
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
versionCode = "4120"
|
versionCode = "4140"
|
||||||
module_name = "EdXposed"
|
module_name = "EdXposed"
|
||||||
jar_dest_dir = "${projectDir}/template_override/system/framework/"
|
jar_dest_dir = "${projectDir}/template_override/system/framework/"
|
||||||
is_windows = OperatingSystem.current().isWindows()
|
is_windows = OperatingSystem.current().isWindows()
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#!/system/bin/sh
|
#!/system/bin/sh
|
||||||
|
|
||||||
EDXP_VERSION="0.4.1.2_beta (4120)"
|
EDXP_VERSION="0.4.1.4_beta (4140)"
|
||||||
ANDROID_SDK=`getprop ro.build.version.sdk`
|
ANDROID_SDK=`getprop ro.build.version.sdk`
|
||||||
BUILD_DESC=`getprop ro.build.description`
|
BUILD_DESC=`getprop ro.build.description`
|
||||||
PRODUCT=`getprop ro.build.product`
|
PRODUCT=`getprop ro.build.product`
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@ package de.robv.android.xposed;
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
import android.app.AndroidAppHelper;
|
import android.app.AndroidAppHelper;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageParser;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.content.res.ResourcesImpl;
|
import android.content.res.ResourcesImpl;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue