Instant modules: allow black/white mode to preload modules

This commit is contained in:
solohsu 2019-06-26 13:16:50 +08:00
parent 1df3d88c13
commit d06cb1ffbd
4 changed files with 15 additions and 21 deletions

View File

@ -1,4 +1,4 @@
version: '0.4.5.2_beta({build})' version: '0.4.5.3_beta({build})'
environment: environment:
ANDROID_HOME: C:\android-sdk-windows ANDROID_HOME: C:\android-sdk-windows

View File

@ -43,11 +43,10 @@ public class BlackWhiteListProxy extends BaseProxy {
String appDataDir) { String appDataDir) {
final boolean isDynamicModulesMode = ConfigManager.isDynamicModulesEnabled(); final boolean isDynamicModulesMode = ConfigManager.isDynamicModulesEnabled();
if (isDynamicModulesMode) { if (isDynamicModulesMode) {
// should never happen onForkPreForDynamicMode(false);
return; } else {
onForkPreForNonDynamicMode(false);
} }
// only enter here when isDynamicModulesMode is off
onForkPreForNonDynamicMode(false);
} }
public void forkAndSpecializePost(int pid, String appDataDir, String niceName) { public void forkAndSpecializePost(int pid, String appDataDir, String niceName) {
@ -59,17 +58,23 @@ public class BlackWhiteListProxy extends BaseProxy {
long effectiveCapabilities) { long effectiveCapabilities) {
final boolean isDynamicModulesMode = ConfigManager.isDynamicModulesEnabled(); final boolean isDynamicModulesMode = ConfigManager.isDynamicModulesEnabled();
if (isDynamicModulesMode) { if (isDynamicModulesMode) {
// should never happen onForkPreForDynamicMode(true);
return; } else {
onForkPreForNonDynamicMode(true);
} }
// only enter here when isDynamicModulesMode is off
onForkPreForNonDynamicMode(true);
} }
public void forkSystemServerPost(int pid) { public void forkSystemServerPost(int pid) {
onForkPostCommon(true, getDataPathPrefix() + "android", "system_server"); 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. * Some details are different between main zygote and secondary zygote.
*/ */

View File

@ -4,7 +4,7 @@ import org.gradle.internal.os.OperatingSystem
apply plugin: 'com.android.library' apply plugin: 'com.android.library'
// Values set here will be overriden by AppVeyor, feel free to modify during development. // 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 def buildVersionCode = 10000
if (System.env.APPVEYOR_BUILD_VERSION != null) { if (System.env.APPVEYOR_BUILD_VERSION != null) {

View File

@ -233,12 +233,6 @@ namespace edxp {
jlong permitted_capabilities, jlong permitted_capabilities,
jlong effective_capabilities) { jlong effective_capabilities) {
app_data_dir_ = env->NewStringUTF(SYSTEM_SERVER_DATA_DIR); 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); PrepareJavaEnv(env);
// jump to java code // jump to java code
FindAndCall(env, "forkSystemServerPre", "(II[II[[IJJ)V", uid, gid, gids, runtime_flags, FindAndCall(env, "forkSystemServerPre", "(II[II[[IJJ)V", uid, gid, gids, runtime_flags,
@ -273,11 +267,6 @@ namespace edxp {
jstring app_data_dir) { jstring app_data_dir) {
app_data_dir_ = app_data_dir; app_data_dir_ = app_data_dir;
nice_name_ = nice_name; 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); PrepareJavaEnv(env);
FindAndCall(env, "forkAndSpecializePre", FindAndCall(env, "forkAndSpecializePre",
"(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;)V", "(II[II[[IILjava/lang/String;Ljava/lang/String;[I[IZLjava/lang/String;Ljava/lang/String;)V",