diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index 3add2f4b..f6bb092a 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -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() diff --git a/edxp-core/template_override/common/util_functions.sh b/edxp-core/template_override/common/util_functions.sh index 425d0143..56eeb124 100644 --- a/edxp-core/template_override/common/util_functions.sh +++ b/edxp-core/template_override/common/util_functions.sh @@ -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` diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/Router.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/Router.java index 20feee6e..2f6b06ee 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/Router.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/entry/Router.java @@ -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); diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/BlackWhiteListProxy.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/BlackWhiteListProxy.java index fd565e66..02b1feda 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/BlackWhiteListProxy.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/BlackWhiteListProxy.java @@ -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) { diff --git a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/NormalProxy.java b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/NormalProxy.java index f63052d9..476977ae 100644 --- a/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/NormalProxy.java +++ b/edxp-sandhook/src/main/java/com/elderdrivers/riru/edxp/sandhook/proxy/NormalProxy.java @@ -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(); } } diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/entry/Router.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/entry/Router.java index 58bce36f..79753847 100644 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/entry/Router.java +++ b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/entry/Router.java @@ -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())); diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/BlackWhiteListProxy.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/BlackWhiteListProxy.java index 1e290d81..ea9fa7b5 100644 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/BlackWhiteListProxy.java +++ b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/BlackWhiteListProxy.java @@ -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) { diff --git a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/NormalProxy.java b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/NormalProxy.java index 73756752..2327c6be 100644 --- a/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/NormalProxy.java +++ b/edxp-whale/src/main/java/com/elderdrivers/riru/edxp/whale/proxy/NormalProxy.java @@ -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(); } } diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java index 6f4f5f17..ee5ae5bf 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/entry/Router.java @@ -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(); } diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java index 5beb56ab..5f2578c7 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/BlackWhiteListProxy.java @@ -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) { diff --git a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java index 4fad6cdb..c0bfcbf7 100644 --- a/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java +++ b/edxp-yahfa/src/main/java/com/elderdrivers/riru/edxp/yahfa/proxy/NormalProxy.java @@ -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(); } } diff --git a/hiddenapi-stubs/libs/framework-stub.jar b/hiddenapi-stubs/libs/framework-stub.jar index ec5fe443..7688f4fd 100644 Binary files a/hiddenapi-stubs/libs/framework-stub.jar and b/hiddenapi-stubs/libs/framework-stub.jar differ