From d06cb1ffbd5d3a41f044eb6208630c0e2d9801cd Mon Sep 17 00:00:00 2001 From: solohsu Date: Wed, 26 Jun 2019 13:16:50 +0800 Subject: [PATCH] Instant modules: allow black/white mode to preload modules --- appveyor.yml | 2 +- .../riru/edxp/proxy/BlackWhiteListProxy.java | 21 ++++++++++++------- edxp-core/build.gradle | 2 +- .../src/main/cpp/main/src/edxp_context.cpp | 11 ---------- 4 files changed, 15 insertions(+), 21 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index d2e288cf..62a1ffa2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '0.4.5.2_beta({build})' +version: '0.4.5.3_beta({build})' environment: ANDROID_HOME: C:\android-sdk-windows diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BlackWhiteListProxy.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BlackWhiteListProxy.java index abac4db2..0ff1f134 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BlackWhiteListProxy.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/proxy/BlackWhiteListProxy.java @@ -43,11 +43,10 @@ public class BlackWhiteListProxy extends BaseProxy { String appDataDir) { final boolean isDynamicModulesMode = ConfigManager.isDynamicModulesEnabled(); if (isDynamicModulesMode) { - // should never happen - return; + onForkPreForDynamicMode(false); + } else { + onForkPreForNonDynamicMode(false); } - // only enter here when isDynamicModulesMode is off - onForkPreForNonDynamicMode(false); } public void forkAndSpecializePost(int pid, String appDataDir, String niceName) { @@ -59,17 +58,23 @@ public class BlackWhiteListProxy extends BaseProxy { long effectiveCapabilities) { final boolean isDynamicModulesMode = ConfigManager.isDynamicModulesEnabled(); if (isDynamicModulesMode) { - // should never happen - return; + onForkPreForDynamicMode(true); + } else { + onForkPreForNonDynamicMode(true); } - // only enter here when isDynamicModulesMode is off - onForkPreForNonDynamicMode(true); } public void forkSystemServerPost(int pid) { onForkPostCommon(true, getDataPathPrefix() + "android", "system_server"); } + private void onForkPreForDynamicMode(boolean isSystemServer) { + mRouter.onForkStart(); + mRouter.initResourcesHook(); + mRouter.prepare(isSystemServer); + mRouter.loadModulesSafely(true, false); + } + /** * Some details are different between main zygote and secondary zygote. */ diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index b5a428b5..5f64bf33 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -4,7 +4,7 @@ import org.gradle.internal.os.OperatingSystem apply plugin: 'com.android.library' // Values set here will be overriden by AppVeyor, feel free to modify during development. -def buildVersionName = 'v0.4.5.2_beta' +def buildVersionName = 'v0.4.5.3_beta' def buildVersionCode = 10000 if (System.env.APPVEYOR_BUILD_VERSION != null) { diff --git a/edxp-core/src/main/cpp/main/src/edxp_context.cpp b/edxp-core/src/main/cpp/main/src/edxp_context.cpp index 37dc6198..e6a3a38d 100644 --- a/edxp-core/src/main/cpp/main/src/edxp_context.cpp +++ b/edxp-core/src/main/cpp/main/src/edxp_context.cpp @@ -233,12 +233,6 @@ namespace edxp { jlong permitted_capabilities, jlong effective_capabilities) { app_data_dir_ = env->NewStringUTF(SYSTEM_SERVER_DATA_DIR); - bool is_black_white_list_mode = ConfigManager::GetInstance()->IsBlackWhiteListEnabled(); - bool is_dynamic_modules_mode = ConfigManager::GetInstance()->IsDynamicModulesEnabled(); - if (is_black_white_list_mode && is_dynamic_modules_mode) { - // when black/white list is on, never inject into zygote if dynamic modules mode is on - return; - } PrepareJavaEnv(env); // jump to java code FindAndCall(env, "forkSystemServerPre", "(II[II[[IJJ)V", uid, gid, gids, runtime_flags, @@ -273,11 +267,6 @@ namespace edxp { jstring app_data_dir) { app_data_dir_ = app_data_dir; nice_name_ = nice_name; - if (ConfigManager::GetInstance()->IsBlackWhiteListEnabled() && - ConfigManager::GetInstance()->IsDynamicModulesEnabled()) { - // when black/white list is on, never inject into zygote if dynamic modules mode is on - return; - } PrepareJavaEnv(env); FindAndCall(env, "forkAndSpecializePre", "(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;)V",