Fix crashes when forking webview_zygote on OnePlus devices
This commit is contained in:
parent
b99089fafa
commit
17c703e74e
|
|
@ -2,10 +2,10 @@ import org.gradle.internal.os.OperatingSystem
|
||||||
|
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
version "v0.4.1.0_beta"
|
version "v0.4.1.2_beta"
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
versionCode = "4101"
|
versionCode = "4120"
|
||||||
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.0_beta (4101)"
|
EDXP_VERSION="0.4.1.2_beta (4120)"
|
||||||
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`
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import com.elderdrivers.riru.edxp.sandhook.entry.bootstrap.SysInnerHookInfo;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.bootstrap.WorkAroundHookInfo;
|
import com.elderdrivers.riru.edxp.sandhook.entry.bootstrap.WorkAroundHookInfo;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.hooker.SystemMainHooker;
|
import com.elderdrivers.riru.edxp.sandhook.entry.hooker.SystemMainHooker;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
import com.swift.sandhook.SandHookConfig;
|
|
||||||
import com.swift.sandhook.xposedcompat.XposedCompat;
|
import com.swift.sandhook.xposedcompat.XposedCompat;
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
@ -32,9 +31,12 @@ public class Router {
|
||||||
|
|
||||||
static boolean useSandHook = false;
|
static boolean useSandHook = false;
|
||||||
|
|
||||||
public static void prepare(boolean isSystem) {
|
public static void initResourcesHook() {
|
||||||
startWorkAroundHook();
|
startWorkAroundHook(); // for OnePlus devices
|
||||||
XposedBridge.initXResources();
|
XposedBridge.initXResources();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void prepare(boolean isSystem) {
|
||||||
// this flag is needed when loadModules
|
// this flag is needed when loadModules
|
||||||
startsSystemServer = isSystem;
|
startsSystemServer = isSystem;
|
||||||
}
|
}
|
||||||
|
|
@ -125,8 +127,15 @@ public class Router {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void onEnterChildProcess() {
|
public static void onForkStart() {
|
||||||
|
forkCompleted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onForkFinish() {
|
||||||
forkCompleted = true;
|
forkCompleted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onEnterChildProcess() {
|
||||||
DynamicBridge.onForkPost();
|
DynamicBridge.onForkPost();
|
||||||
//enable compile in child process
|
//enable compile in child process
|
||||||
//SandHook.enableCompiler(!XposedInit.startsSystemServer);
|
//SandHook.enableCompiler(!XposedInit.startsSystemServer);
|
||||||
|
|
|
||||||
|
|
@ -2,17 +2,17 @@ package com.elderdrivers.riru.edxp.sandhook.proxy;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
|
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
||||||
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
||||||
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
|
||||||
import static com.elderdrivers.riru.edxp.Main.isAppNeedHook;
|
import static com.elderdrivers.riru.edxp.Main.isAppNeedHook;
|
||||||
|
import static com.elderdrivers.riru.edxp.util.FileUtils.getDataPathPrefix;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 1. Non dynamic mode
|
* 1. Non dynamic mode
|
||||||
|
|
@ -73,6 +73,8 @@ public class BlackWhiteListProxy {
|
||||||
* Some details are different between main zygote and secondary zygote.
|
* Some details are different between main zygote and secondary zygote.
|
||||||
*/
|
*/
|
||||||
private static void onForkPreForNonDynamicMode(boolean isSystemServer) {
|
private static void onForkPreForNonDynamicMode(boolean isSystemServer) {
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
ConfigManager.setDynamicModulesMode(false);
|
ConfigManager.setDynamicModulesMode(false);
|
||||||
// set startsSystemServer flag used when loadModules
|
// set startsSystemServer flag used when loadModules
|
||||||
Router.prepare(isSystemServer);
|
Router.prepare(isSystemServer);
|
||||||
|
|
@ -92,20 +94,25 @@ public class BlackWhiteListProxy {
|
||||||
Main.niceName = niceName;
|
Main.niceName = niceName;
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
Router.onEnterChildProcess();
|
|
||||||
if (!isDynamicModulesMode) {
|
if (!isDynamicModulesMode) {
|
||||||
Main.reopenFilesAfterForkNative();
|
Main.reopenFilesAfterForkNative();
|
||||||
}
|
}
|
||||||
|
Router.onEnterChildProcess();
|
||||||
if (!checkNeedHook(appDataDir, niceName)) {
|
if (!checkNeedHook(appDataDir, niceName)) {
|
||||||
// if is blacklisted, just stop here
|
// if is blacklisted, just stop here
|
||||||
|
Router.onForkFinish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (isDynamicModulesMode) {
|
||||||
|
Router.initResourcesHook();
|
||||||
|
}
|
||||||
Router.prepare(isSystemServer);
|
Router.prepare(isSystemServer);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods();
|
PrebuiltMethodsDeopter.deoptBootMethods();
|
||||||
Router.installBootstrapHooks(isSystemServer);
|
Router.installBootstrapHooks(isSystemServer);
|
||||||
if (isDynamicModulesMode) {
|
if (isDynamicModulesMode) {
|
||||||
Router.loadModulesSafely(false);
|
Router.loadModulesSafely(false);
|
||||||
}
|
}
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean checkNeedHook(String appDataDir, String niceName) {
|
private static boolean checkNeedHook(String appDataDir, String niceName) {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
package com.elderdrivers.riru.edxp.sandhook.proxy;
|
package com.elderdrivers.riru.edxp.sandhook.proxy;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
import com.elderdrivers.riru.edxp.sandhook.entry.Router;
|
||||||
|
|
||||||
|
|
@ -15,6 +15,8 @@ public class NormalProxy {
|
||||||
boolean startChildZygote, String instructionSet,
|
boolean startChildZygote, String instructionSet,
|
||||||
String appDataDir) {
|
String appDataDir) {
|
||||||
// mainly for secondary zygote
|
// mainly for secondary zygote
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
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
|
// call this to ensure the flag is set to false ASAP
|
||||||
|
|
@ -36,10 +38,13 @@ public class NormalProxy {
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
// 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(false);
|
Router.loadModulesSafely(false);
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void forkSystemServerPre(int uid, int gid, int[] gids, int debugFlags, int[][] rlimits,
|
public static void forkSystemServerPre(int uid, int gid, int[] gids, int debugFlags, int[][] rlimits,
|
||||||
long permittedCapabilities, long effectiveCapabilities) {
|
long permittedCapabilities, long effectiveCapabilities) {
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
// set startsSystemServer flag used when loadModules
|
// set startsSystemServer flag used when loadModules
|
||||||
|
|
@ -65,6 +70,7 @@ public class NormalProxy {
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
// reload module list if dynamic mode is on
|
// reload module list if dynamic mode is on
|
||||||
Router.loadModulesSafely(false);
|
Router.loadModulesSafely(false);
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ import android.text.TextUtils;
|
||||||
|
|
||||||
import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
|
import com.elderdrivers.riru.edxp.config.EdXpConfigGlobal;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
import com.elderdrivers.riru.edxp.whale.config.WhaleHookProvider;
|
|
||||||
import com.elderdrivers.riru.edxp.whale.config.WhaleEdxpConfig;
|
import com.elderdrivers.riru.edxp.whale.config.WhaleEdxpConfig;
|
||||||
|
import com.elderdrivers.riru.edxp.whale.config.WhaleHookProvider;
|
||||||
import com.elderdrivers.riru.edxp.whale.core.HookMain;
|
import com.elderdrivers.riru.edxp.whale.core.HookMain;
|
||||||
import com.elderdrivers.riru.edxp.whale.entry.bootstrap.AppBootstrapHookInfo;
|
import com.elderdrivers.riru.edxp.whale.entry.bootstrap.AppBootstrapHookInfo;
|
||||||
import com.elderdrivers.riru.edxp.whale.entry.bootstrap.SysBootstrapHookInfo;
|
import com.elderdrivers.riru.edxp.whale.entry.bootstrap.SysBootstrapHookInfo;
|
||||||
|
|
@ -25,10 +25,12 @@ public class Router {
|
||||||
|
|
||||||
private static volatile AtomicBoolean bootstrapHooked = new AtomicBoolean(false);
|
private static volatile AtomicBoolean bootstrapHooked = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
public static void initResourcesHook() {
|
||||||
|
startWorkAroundHook(); // for OnePlus devices
|
||||||
|
XposedBridge.initXResources();
|
||||||
|
}
|
||||||
|
|
||||||
public static void prepare(boolean isSystem) {
|
public static void prepare(boolean isSystem) {
|
||||||
startWorkAroundHook();
|
|
||||||
XposedBridge.initXResources();
|
|
||||||
// this flag is needed when loadModules
|
// this flag is needed when loadModules
|
||||||
XposedInit.startsSystemServer = isSystem;
|
XposedInit.startsSystemServer = isSystem;
|
||||||
}
|
}
|
||||||
|
|
@ -102,10 +104,18 @@ public class Router {
|
||||||
WorkAroundHookInfo.class.getName());
|
WorkAroundHookInfo.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void onEnterChildProcess() {
|
public static void onForkStart() {
|
||||||
|
forkCompleted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onForkFinish() {
|
||||||
forkCompleted = true;
|
forkCompleted = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void onEnterChildProcess() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static void logD(String prefix) {
|
public static void logD(String prefix) {
|
||||||
Utils.logD(String.format("%s: pkg=%s, prc=%s", prefix, AndroidAppHelper.currentPackageName(),
|
Utils.logD(String.format("%s: pkg=%s, prc=%s", prefix, AndroidAppHelper.currentPackageName(),
|
||||||
AndroidAppHelper.currentProcessName()));
|
AndroidAppHelper.currentProcessName()));
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,8 @@ public class BlackWhiteListProxy {
|
||||||
* Some details are different between main zygote and secondary zygote.
|
* Some details are different between main zygote and secondary zygote.
|
||||||
*/
|
*/
|
||||||
private static void onForkPreForNonDynamicMode(boolean isSystemServer) {
|
private static void onForkPreForNonDynamicMode(boolean isSystemServer) {
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
ConfigManager.setDynamicModulesMode(false);
|
ConfigManager.setDynamicModulesMode(false);
|
||||||
// set startsSystemServer flag used when loadModules
|
// set startsSystemServer flag used when loadModules
|
||||||
Router.prepare(isSystemServer);
|
Router.prepare(isSystemServer);
|
||||||
|
|
@ -92,20 +94,25 @@ public class BlackWhiteListProxy {
|
||||||
Main.niceName = niceName;
|
Main.niceName = niceName;
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
Router.onEnterChildProcess();
|
|
||||||
if (!isDynamicModulesMode) {
|
if (!isDynamicModulesMode) {
|
||||||
Main.reopenFilesAfterForkNative();
|
Main.reopenFilesAfterForkNative();
|
||||||
}
|
}
|
||||||
|
Router.onEnterChildProcess();
|
||||||
if (!checkNeedHook(appDataDir, niceName)) {
|
if (!checkNeedHook(appDataDir, niceName)) {
|
||||||
// if is blacklisted, just stop here
|
// if is blacklisted, just stop here
|
||||||
|
Router.onForkFinish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (isDynamicModulesMode) {
|
||||||
|
Router.initResourcesHook();
|
||||||
|
}
|
||||||
Router.prepare(isSystemServer);
|
Router.prepare(isSystemServer);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods();
|
PrebuiltMethodsDeopter.deoptBootMethods();
|
||||||
Router.installBootstrapHooks(isSystemServer);
|
Router.installBootstrapHooks(isSystemServer);
|
||||||
if (isDynamicModulesMode) {
|
if (isDynamicModulesMode) {
|
||||||
Router.loadModulesSafely(false);
|
Router.loadModulesSafely(false);
|
||||||
}
|
}
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean checkNeedHook(String appDataDir, String niceName) {
|
private static boolean checkNeedHook(String appDataDir, String niceName) {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ public class NormalProxy {
|
||||||
boolean startChildZygote, String instructionSet,
|
boolean startChildZygote, String instructionSet,
|
||||||
String appDataDir) {
|
String appDataDir) {
|
||||||
// mainly for secondary zygote
|
// mainly for secondary zygote
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
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
|
// call this to ensure the flag is set to false ASAP
|
||||||
|
|
@ -36,10 +38,13 @@ public class NormalProxy {
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
// 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(false);
|
Router.loadModulesSafely(false);
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void forkSystemServerPre(int uid, int gid, int[] gids, int debugFlags, int[][] rlimits,
|
public static void forkSystemServerPre(int uid, int gid, int[] gids, int debugFlags, int[][] rlimits,
|
||||||
long permittedCapabilities, long effectiveCapabilities) {
|
long permittedCapabilities, long effectiveCapabilities) {
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
// set startsSystemServer flag used when loadModules
|
// set startsSystemServer flag used when loadModules
|
||||||
|
|
@ -65,6 +70,7 @@ public class NormalProxy {
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
// reload module list if dynamic mode is on
|
// reload module list if dynamic mode is on
|
||||||
Router.loadModulesSafely(false);
|
Router.loadModulesSafely(false);
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,10 +26,12 @@ public class Router {
|
||||||
|
|
||||||
private static volatile AtomicBoolean bootstrapHooked = new AtomicBoolean(false);
|
private static volatile AtomicBoolean bootstrapHooked = new AtomicBoolean(false);
|
||||||
|
|
||||||
|
public static void initResourcesHook() {
|
||||||
|
startWorkAroundHook(); // for OnePlus devices
|
||||||
|
XposedBridge.initXResources();
|
||||||
|
}
|
||||||
|
|
||||||
public static void prepare(boolean isSystem) {
|
public static void prepare(boolean isSystem) {
|
||||||
startWorkAroundHook();
|
|
||||||
XposedBridge.initXResources();
|
|
||||||
// this flag is needed when loadModules
|
// this flag is needed when loadModules
|
||||||
XposedInit.startsSystemServer = isSystem;
|
XposedInit.startsSystemServer = isSystem;
|
||||||
}
|
}
|
||||||
|
|
@ -103,8 +105,15 @@ public class Router {
|
||||||
WorkAroundHookInfo.class.getName());
|
WorkAroundHookInfo.class.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void onEnterChildProcess() {
|
public static void onForkStart() {
|
||||||
|
forkCompleted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onForkFinish() {
|
||||||
forkCompleted = true;
|
forkCompleted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void onEnterChildProcess() {
|
||||||
DynamicBridge.onForkPost();
|
DynamicBridge.onForkPost();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@ import android.text.TextUtils;
|
||||||
import com.elderdrivers.riru.edxp.Main;
|
import com.elderdrivers.riru.edxp.Main;
|
||||||
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
import com.elderdrivers.riru.edxp.config.ConfigManager;
|
||||||
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
|
||||||
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
|
||||||
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
import com.elderdrivers.riru.edxp.util.ProcessUtils;
|
||||||
import com.elderdrivers.riru.edxp.util.Utils;
|
import com.elderdrivers.riru.edxp.util.Utils;
|
||||||
|
import com.elderdrivers.riru.edxp.yahfa.entry.Router;
|
||||||
|
|
||||||
import de.robv.android.xposed.XposedBridge;
|
import de.robv.android.xposed.XposedBridge;
|
||||||
|
|
||||||
|
|
@ -73,6 +73,8 @@ public class BlackWhiteListProxy {
|
||||||
* Some details are different between main zygote and secondary zygote.
|
* Some details are different between main zygote and secondary zygote.
|
||||||
*/
|
*/
|
||||||
private static void onForkPreForNonDynamicMode(boolean isSystemServer) {
|
private static void onForkPreForNonDynamicMode(boolean isSystemServer) {
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
ConfigManager.setDynamicModulesMode(false);
|
ConfigManager.setDynamicModulesMode(false);
|
||||||
// set startsSystemServer flag used when loadModules
|
// set startsSystemServer flag used when loadModules
|
||||||
Router.prepare(isSystemServer);
|
Router.prepare(isSystemServer);
|
||||||
|
|
@ -92,20 +94,25 @@ public class BlackWhiteListProxy {
|
||||||
Main.niceName = niceName;
|
Main.niceName = niceName;
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
Router.onEnterChildProcess();
|
|
||||||
if (!isDynamicModulesMode) {
|
if (!isDynamicModulesMode) {
|
||||||
Main.reopenFilesAfterForkNative();
|
Main.reopenFilesAfterForkNative();
|
||||||
}
|
}
|
||||||
|
Router.onEnterChildProcess();
|
||||||
if (!checkNeedHook(appDataDir, niceName)) {
|
if (!checkNeedHook(appDataDir, niceName)) {
|
||||||
// if is blacklisted, just stop here
|
// if is blacklisted, just stop here
|
||||||
|
Router.onForkFinish();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (isDynamicModulesMode) {
|
||||||
|
Router.initResourcesHook();
|
||||||
|
}
|
||||||
Router.prepare(isSystemServer);
|
Router.prepare(isSystemServer);
|
||||||
PrebuiltMethodsDeopter.deoptBootMethods();
|
PrebuiltMethodsDeopter.deoptBootMethods();
|
||||||
Router.installBootstrapHooks(isSystemServer);
|
Router.installBootstrapHooks(isSystemServer);
|
||||||
if (isDynamicModulesMode) {
|
if (isDynamicModulesMode) {
|
||||||
Router.loadModulesSafely(false);
|
Router.loadModulesSafely(false);
|
||||||
}
|
}
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean checkNeedHook(String appDataDir, String niceName) {
|
private static boolean checkNeedHook(String appDataDir, String niceName) {
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,8 @@ public class NormalProxy {
|
||||||
boolean startChildZygote, String instructionSet,
|
boolean startChildZygote, String instructionSet,
|
||||||
String appDataDir) {
|
String appDataDir) {
|
||||||
// mainly for secondary zygote
|
// mainly for secondary zygote
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
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
|
// call this to ensure the flag is set to false ASAP
|
||||||
|
|
@ -36,10 +38,13 @@ public class NormalProxy {
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
// 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(false);
|
Router.loadModulesSafely(false);
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void forkSystemServerPre(int uid, int gid, int[] gids, int debugFlags, int[][] rlimits,
|
public static void forkSystemServerPre(int uid, int gid, int[] gids, int debugFlags, int[][] rlimits,
|
||||||
long permittedCapabilities, long effectiveCapabilities) {
|
long permittedCapabilities, long effectiveCapabilities) {
|
||||||
|
Router.onForkStart();
|
||||||
|
Router.initResourcesHook();
|
||||||
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
final boolean isDynamicModulesMode = Main.isDynamicModulesEnabled();
|
||||||
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
ConfigManager.setDynamicModulesMode(isDynamicModulesMode);
|
||||||
// set startsSystemServer flag used when loadModules
|
// set startsSystemServer flag used when loadModules
|
||||||
|
|
@ -65,6 +70,7 @@ public class NormalProxy {
|
||||||
Router.onEnterChildProcess();
|
Router.onEnterChildProcess();
|
||||||
// reload module list if dynamic mode is on
|
// reload module list if dynamic mode is on
|
||||||
Router.loadModulesSafely(false);
|
Router.loadModulesSafely(false);
|
||||||
|
Router.onForkFinish();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue