Fix compat mode not working correctly along with black/white list mode

This commit is contained in:
solohsu 2019-03-01 23:50:31 +08:00
parent f74cf04361
commit 628a3ce5da
3 changed files with 10 additions and 9 deletions

View File

@ -2,19 +2,15 @@ package com.elderdrivers.riru.xposed.entry;
import android.text.TextUtils;
import com.elderdrivers.riru.xposed.Main;
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.SysBootstrapHookInfo;
import com.elderdrivers.riru.xposed.entry.bootstrap.SysInnerHookInfo;
import com.elderdrivers.riru.xposed.entry.hooker.SystemMainHooker;
import com.elderdrivers.riru.xposed.util.InlinedMethodCallers;
import com.elderdrivers.riru.xposed.util.Utils;
import java.util.Arrays;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.XposedInit;
public class Router {
@ -87,5 +83,6 @@ public class Router {
public static void onEnterChildProcess() {
forkCompleted = true;
DynamicBridge.onForkPost();
}
}

View File

@ -18,6 +18,8 @@ public class BlackWhiteListProxy {
// when isDynamicModulesMode is not on
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
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
if (!isDynamicModulesMode) {
Router.loadModulesSafely();
@ -34,7 +36,7 @@ public class BlackWhiteListProxy {
}
Main.appDataDir = appDataDir;
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
Router.prepare(false);
Router.onEnterChildProcess();
Router.installBootstrapHooks(false);
Router.loadModulesSafely();
}
@ -46,6 +48,8 @@ public class BlackWhiteListProxy {
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
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
// 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
@ -65,7 +69,7 @@ public class BlackWhiteListProxy {
}
Main.appDataDir = getDataPathPrefix() + "android";
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
Router.prepare(true);
Router.onEnterChildProcess();
Router.installBootstrapHooks(true);
Router.loadModulesSafely();
}

View File

@ -2,7 +2,6 @@ package com.elderdrivers.riru.xposed.proxy.yahfa;
import com.elderdrivers.riru.xposed.Main;
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.util.PrebuiltMethodsDeopter;
@ -19,6 +18,7 @@ public class NormalProxy {
Main.appDataDir = appDataDir;
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for secondary zygote
// call this to ensure the flag is set to false ASAP
Router.prepare(false);
// install bootstrap hooks for secondary zygote
Router.installBootstrapHooks(false);
@ -31,7 +31,6 @@ public class NormalProxy {
// TODO consider processes without forkAndSpecializePost called
Main.reopenFilesAfterForkNative();
Router.onEnterChildProcess();
DynamicBridge.onForkPost();
// load modules for each app process on its forked if dynamic modules mode is on
Router.loadModulesSafely();
}
@ -41,6 +40,7 @@ public class NormalProxy {
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
Main.appDataDir = getDataPathPrefix() + "android";
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
// set startsSystemServer flag used when loadModules
Router.prepare(true);
PrebuiltMethodsDeopter.deoptBootMethods(); // do it once for main zygote
// install bootstrap hooks for main zygote as early as possible