<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
在init.rc文件里,可以看到加载下面的服务:
service
zygote /system/bin/app_process -Xzygote /system/bin --zygote
--start-system-server
socket
zygote stream 666
onrestart
write /sys/android_power/request_state wake
onrestart
write /sys/power/state on
onrestart
restart media
zygote服务的代码在目录:
Android-2.0/frameworks/base/cmds/app_process
zygote服务主要作用就是创建一个服务监听用户的命令,并且根据用户的命令创建应用程序运行。
它的主要入口函数代码如下:
int
main(int argc, const char* const argv[])
{
//
These are global variables in ProcessState.cpp
mArgC
= argc;
mArgV
= argv;
mArgLen
= 0;
for
(int i=0; i<argc; i++) {
mArgLen
+= strlen(argv[i]) + 1;
}
mArgLen--;
AppRuntime
runtime;
这里创建JAVA运行库对象。
const
char *arg;
const
char *argv0;
argv0
= argv[0];
//
Process command line arguments
//
ignore argv[0]
argc--;
argv++;
//
Everything up to '--' or first non '-' arg goes to the vm
int
i = runtime.addVmArguments(argc, argv);
这里添加命令行参数。
//
Next arg is parent directory
if
(i < argc) {
runtime.mParentDir = argv[i++];
}
//
Next arg is startup classname or "--zygote"
if
(i < argc) {
arg
= argv[i++];
if
(0 == strcmp("--zygote", arg)) {
bool
startSystemServer = (i < argc) ?
strcmp(argv[i], "--start-system-server")
== 0 : false;
setArgv0(argv0, "zygote");
set_process_name("zygote");
runtime.start("com.android.internal.os.ZygoteInit",
startSystemServer);
这里根据命令行参数来创建JAVA虚拟机,并从
com.android.internal.os.ZygoteInit开始运行,然后启动所有JAVA的服务。
}
else {
set_process_name(argv0);
runtime.mClassName = arg;
//
Remainder of args get passed to startup class main()
runtime.mArgC = argc-i;
runtime.mArgV = argv+i;
LOGV("App process is starting with
pid=%d, class=%s./n",
getpid(), runtime.getClassName());
runtime.start();
}
}
else {
LOG_ALWAYS_FATAL("app_process: no
class name or --zygote supplied.");
fprintf(stderr, "Error: no class name
or --zygote supplied./n");
app_usage();
return
10;
}
}