本文承接上一篇文章android8.1启动过程(六) zygote进程分析2_we1less的博客-优快云博客
SystemServer进程主要用于创建系统服务,AMS、WMS、PMS都是由它来创建的
在上一篇说道启动systemserver
启动systemserver AOSP/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
if (startSystemServer) {
Runnable r = forkSystemServer(abiList, socketName, zygoteServer);
// {@code r == null} in the parent (zygote) process, and {@code r != null} in the
// child (system_server) process.
if (r != null) {
r.run();
return;
}
}
forkSystemServer
private static Runnable forkSystemServer(String abiList, String socketName,
ZygoteServer zygoteServer) {
...
/* Hardcoded command line to start the system server */
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,1032,3001,3002,3003,3006,3007,3009,3010",
"--capabilities=" + capabilities + "," + capabilities,
"--nice-name=system_server",
"--runtime-args",
"com.android.server.SystemServer",
};
ZygoteConnection.Arguments parsedArgs = null;
int pid;
try {
parsedArgs = new ZygoteConnection.Arguments(args);
ZygoteConnection.applyDebuggerSystemProperty(parsedArgs);
ZygoteConnection.applyInvokeWithSystemProperty(parsedArgs);
/* Request to fork the system server process */
pid = Zygote.forkSystemServer(
parsedArgs.uid, parsedArgs.gid,
parsedArgs.gids,
parsedArgs.debugFlags,
null,
parsedArgs.permittedCapabilities,
parsedArgs.effectiveCapabilities);
} catch (IllegalArgumentException ex) {
throw new RuntimeException(ex);
}
/* For child process */
if (pid == 0) {
if (hasSecondZygote(abiList)) {
waitForSecondaryZygote(socketName);
}
zygoteServer.closeServerSocket();
return handleSystemServerProcess(parsedArgs);
}
return null;
}
【1】ZygoteConnection.Arguments(args); AOSP/frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java 里面的一个静态内部类 它将上述String数组中的参数传递进去
class ZygoteConnection {
private static final String TAG = "Zygote";
...
static class Arguments {
...
Arguments(String args[]) throws IllegalArgumentException {
parseArgs(args);
}
...
}
}
parseArgs 传递的参数就是
String args[] = {
"--setuid=1000",
"--setgid=1000",
"--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1021,1023,1032,3001,3002,3003,3006,3007,3009,3010",
"--capabilities=" + capabilities + "," + capabilities,
"--nice-name=system_server",
"--runtime-args",
&nb

本文详细解析了Android系统启动过程中,Zygote进程如何孵化SystemServer进程的过程。从ZygoteInit.java的forkSystemServer方法开始,通过参数解析创建SystemServer进程,接着调用nativeZygoteInit启动Binder线程池,最终通过反射调用SystemServer的main方法,启动系统服务。
最低0.47元/天 解锁文章
1432

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



