diff --git a/Bridge/src/main/java/com/elderdrivers/riru/xposed/entry/Router.java b/Bridge/src/main/java/com/elderdrivers/riru/xposed/entry/Router.java index 7d358fb5..5aa1d10c 100644 --- a/Bridge/src/main/java/com/elderdrivers/riru/xposed/entry/Router.java +++ b/Bridge/src/main/java/com/elderdrivers/riru/xposed/entry/Router.java @@ -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(); } } diff --git a/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java b/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java index d361b38a..63a73723 100644 --- a/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java +++ b/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java @@ -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(); } diff --git a/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/NormalProxy.java b/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/NormalProxy.java index 20988054..7303c4ce 100644 --- a/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/NormalProxy.java +++ b/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/NormalProxy.java @@ -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