Fix compat mode not working correctly along with black/white list mode
This commit is contained in:
parent
f74cf04361
commit
628a3ce5da
|
|
@ -2,19 +2,15 @@ package com.elderdrivers.riru.xposed.entry;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.elderdrivers.riru.xposed.Main;
|
|
||||||
import com.elderdrivers.riru.xposed.core.HookMain;
|
import com.elderdrivers.riru.xposed.core.HookMain;
|
||||||
|
import com.elderdrivers.riru.xposed.dexmaker.DynamicBridge;
|
||||||
import com.elderdrivers.riru.xposed.entry.bootstrap.AppBootstrapHookInfo;
|
import com.elderdrivers.riru.xposed.entry.bootstrap.AppBootstrapHookInfo;
|
||||||
import com.elderdrivers.riru.xposed.entry.bootstrap.SysBootstrapHookInfo;
|
import com.elderdrivers.riru.xposed.entry.bootstrap.SysBootstrapHookInfo;
|
||||||
import com.elderdrivers.riru.xposed.entry.bootstrap.SysInnerHookInfo;
|
import com.elderdrivers.riru.xposed.entry.bootstrap.SysInnerHookInfo;
|
||||||
import com.elderdrivers.riru.xposed.entry.hooker.SystemMainHooker;
|
import com.elderdrivers.riru.xposed.entry.hooker.SystemMainHooker;
|
||||||
import com.elderdrivers.riru.xposed.util.InlinedMethodCallers;
|
|
||||||
import com.elderdrivers.riru.xposed.util.Utils;
|
import com.elderdrivers.riru.xposed.util.Utils;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
import de.robv.android.xposed.XposedHelpers;
|
|
||||||
import de.robv.android.xposed.XposedInit;
|
import de.robv.android.xposed.XposedInit;
|
||||||
|
|
||||||
public class Router {
|
public class Router {
|
||||||
|
|
@ -87,5 +83,6 @@ public class Router {
|
||||||
|
|
||||||
public static void onEnterChildProcess() {
|
public static void onEnterChildProcess() {
|
||||||
forkCompleted = true;
|
forkCompleted = true;
|
||||||
|
DynamicBridge.onForkPost();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,8 @@ public class BlackWhiteListProxy {
|
||||||
// when isDynamicModulesMode is not on
|
// when isDynamicModulesMode is not on
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
|
// call this to ensure the flag is set to false ASAP
|
||||||
|
Router.prepare(false);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for secondary zygote
|
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for secondary zygote
|
||||||
if (!isDynamicModulesMode) {
|
if (!isDynamicModulesMode) {
|
||||||
Router.loadModulesSafely();
|
Router.loadModulesSafely();
|
||||||
|
|
@ -34,7 +36,7 @@ public class BlackWhiteListProxy {
|
||||||
}
|
}
|
||||||
Main.appDataDir = appDataDir;
|
Main.appDataDir = appDataDir;
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
Router.prepare(false);
|
Router.onEnterChildProcess();
|
||||||
Router.installBootstrapHooks(false);
|
Router.installBootstrapHooks(false);
|
||||||
Router.loadModulesSafely();
|
Router.loadModulesSafely();
|
||||||
}
|
}
|
||||||
|
|
@ -46,6 +48,8 @@ public class BlackWhiteListProxy {
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for main zygote
|
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for main zygote
|
||||||
|
// set startsSystemServer flag used when loadModules
|
||||||
|
Router.prepare(true);
|
||||||
// we never install bootstrap hooks here in black/white list mode
|
// we never install bootstrap hooks here in black/white list mode
|
||||||
// because installed hooks would be propagated to all child processes of main zygote
|
// because installed hooks would be propagated to all child processes of main zygote
|
||||||
// hence we cannot install hooks for processes like com.android.phone process who are
|
// hence we cannot install hooks for processes like com.android.phone process who are
|
||||||
|
|
@ -65,7 +69,7 @@ public class BlackWhiteListProxy {
|
||||||
}
|
}
|
||||||
Main.appDataDir = getDataPathPrefix() + "android";
|
Main.appDataDir = getDataPathPrefix() + "android";
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
Router.prepare(true);
|
Router.onEnterChildProcess();
|
||||||
Router.installBootstrapHooks(true);
|
Router.installBootstrapHooks(true);
|
||||||
Router.loadModulesSafely();
|
Router.loadModulesSafely();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,6 @@ package com.elderdrivers.riru.xposed.proxy.yahfa;
|
||||||
|
|
||||||
import com.elderdrivers.riru.xposed.Main;
|
import com.elderdrivers.riru.xposed.Main;
|
||||||
import com.elderdrivers.riru.xposed.config.ConfigManager;
|
import com.elderdrivers.riru.xposed.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.xposed.dexmaker.DynamicBridge;
|
|
||||||
import com.elderdrivers.riru.xposed.entry.Router;
|
import com.elderdrivers.riru.xposed.entry.Router;
|
||||||
import com.elderdrivers.riru.xposed.util.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.xposed.util.PrebuiltMethodsDeopter;
|
||||||
|
|
||||||
|
|
@ -19,6 +18,7 @@ public class NormalProxy {
|
||||||
Main.appDataDir = appDataDir;
|
Main.appDataDir = appDataDir;
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for secondary zygote
|
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for secondary zygote
|
||||||
|
// call this to ensure the flag is set to false ASAP
|
||||||
Router.prepare(false);
|
Router.prepare(false);
|
||||||
// install bootstrap hooks for secondary zygote
|
// install bootstrap hooks for secondary zygote
|
||||||
Router.installBootstrapHooks(false);
|
Router.installBootstrapHooks(false);
|
||||||
|
|
@ -31,7 +31,6 @@ public class NormalProxy {
|
||||||
// TODO consider processes without forkAndSpecializePost called
|
// TODO consider processes without forkAndSpecializePost called
|
||||||
Main.reopenFilesAfterForkNative();
|
Main.reopenFilesAfterForkNative();
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
DynamicBridge.onForkPost();
|
|
||||||
// load modules for each app process on its forked if dynamic modules mode is on
|
// load modules for each app process on its forked if dynamic modules mode is on
|
||||||
Router.loadModulesSafely();
|
Router.loadModulesSafely();
|
||||||
}
|
}
|
||||||
|
|
@ -41,6 +40,7 @@ public class NormalProxy {
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
Main.appDataDir = getDataPathPrefix() + "android";
|
Main.appDataDir = getDataPathPrefix() + "android";
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
|
// set startsSystemServer flag used when loadModules
|
||||||
Router.prepare(true);
|
Router.prepare(true);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for main zygote
|
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for main zygote
|
||||||
// install bootstrap hooks for main zygote as early as possible
|
// install bootstrap hooks for main zygote as early as possible
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue