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 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();
} }
} }

View File

@ -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();
} }

View File

@ -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