Android启动, 首先kernel内核自动载入内存运行,它主要功能是完成各个设备驱动的初始化,例如,照相机,蓝牙,电话等驱动。
这部分启动完后就开始按照init.rc 文件中开始启动系统进程
init.rc 的路径为:platform/system/core/rootdir/init.rc 现在开始分析此文件。
此文件中可以看到如下格式:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
socket zygote stream 66
onrestart write /sys/android_power/request_start wake
onrestart write /sys/power/state on
onrestart restart media
onrestart restart netd
这种格式,是指明要启动一系列系统级的服务, 如上,
service zygoet:就是启动了一个zygote服务,
/system/bin/app_process:进程bin文件的具体路径,可以zygote是对应着app_process进程,
其余的参数,等会儿解释,
app_pocess文件的路径为:/platform/frameworks/base/cmds/app_process/app_main.cpp,打开此文件,
可以看到此文件中的main()函数,由此可以得出结论,这个main()函数就是zygote服务的入口,
那么,刚才init.rc中service中的参数也就明白了,可以对应到
main(int argc,const char* const argv[]) 的参数中,会用到。
此外,此文件中还有一个重要的类,如下定义:
class AppRuntime:public AndroidRuntime { }
其中类AndroidRuntime类路径为:/platform/frameworks/base/core/jni/AndroidRuntime.cpp
此类用于启动java运行环境,其中一句最重要的代码为:
main(int argc,const char* const argv[]) {
.....
AppRuntime runtime;
runtime.start("com.android.internal.os.Zygoteinit",startSystemServer);
......
}
此句是执行 ZygoetInit类,用于初始化Zygote服务, 下面开始分析ZygoteInit类: