Welcome 微信登录

首页 / 操作系统 / Linux / Android开机流程

Zygote进程在init.rc中有service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-serverzygote进程通过init进程启动,zygote进程就奠定了Android的基础。从zygote的main()开始,见/frameworks/base/cmds/app_process/app_main.cppint main(int argc, const char * const argv[])
{
 ......
 if(0 == strcmp("--zygote", arg)){
  ......
  runtime.start("com.android.internel.os.ZygoteInit",
   startSystemServer);
 ......
}接下来运行/frameworks/base/core/jni/AndroidRuntime.cpp的start()
void AndroidRuntime::start(const char * className, const bool startSystemServer)
{
 ......
 classNameStr = env->NewStringUTF(className);
 ......
 startMeth = env->GetStaticMethodID(startClass, "main",
         "([Ljava/lang/String;)V");
 ......
}
因此运行/frameworks/base/java/com/android/internal/os/ZygoteInit.java的main().
public static void main(String argv[]){
 ......
 registerZygoteSocket();
 preloadClasses();
 if(argc[1].equals("true")){
  startSystemServer();
 }
 ......}