Instant modules: allow black/white mode to preload modules
This commit is contained in:
parent
1df3d88c13
commit
d06cb1ffbd
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue