在Zygote.forkSystemServer返回后看代码如下:
–javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
/* For child process */
if (pid == 0) {
if (hasSecondZygote(abiList)) {
waitForSecondaryZygote(socketName);
}
zygoteServer.closeServerSocket();//关闭子进程的socket
return handleSystemServerProcess(parsedArgs);
}
由于SystemServer是复制Zygote的进程,因此也会包含Zygote的zygoteServer,对于SystemServer没有其他作用,需要先将其关闭;通过调用handleSystemServerProcess:处理一下systemServer的任务
–javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
private static Runnable handleSystemServerProcess(ZygoteArguments parsedArgs) {
// set umask to 0077 so new files and directories will default to owner-only permissions.
Os.umask(S_IRWXG | S_IRWXO);
if (parsedArgs.mNiceName != null) {
Process.setArgV0(parsedArgs.mNiceName);
}
final String systemServerClasspath = Os.getenv("SYSTEMSERVERCLASSPATH");//获取一下systemServer的系统环境的路径 adb shell env SYSTEMSERVERCLASSPATH
/*SYSTEMSERVERCLASSPATH=/system/framework/com.android.location.provider.jar
:/system/framework/services.jar
:/apex/com.android.adservices/javalib/service-adservices.jar
:/apex/com.android.adservices/javalib/service- sdksandbox.jar
:/apex/com.android.appsearch/javalib/service-appsearch.jar
:/apex/com.android.art/javalib/service-art.jar
:/apex/com.android.media/javalib/service-media-s.jar
:/apex/com.android.permission/javalib/service-permission.jar*/
if (systemServerClasspath != null) { //刚刚进行了搜索这里不会空
// Capturing profiles is only supported for debug or eng builds since selinux normally
// prevents it.
if (shouldProfileSystemServer() && (Build.IS_USERDEBUG || Build.IS_ENG)) {//这里为false adb shell getprop SYSTEMS