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:
ANDROID_HOME: C:\android-sdk-windows

View File

@ -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.
*/

View File

@ -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) {

View File

@ -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",