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