char prop[PROP_VALUE_MAX];
if (property_get(ABI_LIST_PROPERTY, prop, NULL) == 0) {
LOG_ALWAYS_FATAL(“app_process: Unable to determine ABI list from property %s.”,
ABI_LIST_PROPERTY);
return 11;
}
String8 abiFlag("–abi-list=");
abiFlag.append(prop);
args.add(abiFlag);
for (; i < argc; ++i) {
args.add(String8(argv[i]));
}
}
if (!niceName.isEmpty()) {
runtime.setArgv0(niceName.string());
set_process_name(niceName.string());
}
if (zygote) {
runtime.start(“com.android.internal.os.ZygoteInit”, args, zygote);//2
} else if (className) {
runtime.start(“com.android.internal.os.RuntimeInit”, args, zygote);
} else {
fprintf(stderr, “Error: no class name or --zygote supplied.\n”);
app_usage();
LOG_ALWAYS_FATAL(“app_process: no class name or --zygote supplied.”);
return 10;
}
}
注释1处如果startSystemServer为true的话(默认为true),将”start-system-server”放入启动的参数args。
注释2处调用注释2处这里调用runtime的start函数来启动zygote进程,并将args传入,这样启动zygote进程后,zygote进程会将SystemServer进程启动。我们知道runtime指的就是AppRuntime,AppRuntime声明也在app_main.cpp中,它继承AndroidRuntime,也就是我们调用start其实是调用AndroidRuntime的start函数:
frameworks/base/core/jni/AndroidRuntime.cpp
void AndroidRuntime::start(const char* className, const V

本文详细剖析了Android系统中Zygote进程的启动流程,从获取ABI列表到通过JNI调用ZygoteInit的main函数,再到启动SystemServer进程。Zygote作为Android系统的基础,其启动涉及本地和Java层的交互,包括创建ServerSocket、预加载类和资源,以及等待客户端请求等关键步骤。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



