详细分析Android中实现Zygote的源码

2020-01-06 13:36:52丽君

易采站长站为您分析详细分析Android中实现Zygote的源码,包括底层的C/C++代码以及Java代码部分入口,需要的朋友可以参考下

概述

在Android系统中,所有的应用程序进程,以及用来运行系统关键服务的System进程都是由zygote进程负责创建的。因此,我们将它称为进程孵化器。zygote进程是通过复制自身的方式来创建System进程和应用程序进程的。由于zygote进程在启动时会在内部创建一个虚拟机实例,因此,通过复制zygote进程而得到的System进程和应用程序进程可以快速地在内部获得一个虚拟机实例拷贝。

zygote进程在启动完成之后,会马上将System进程启动起来,以便它可以将系统的关键服务启动起来。下面我们将介绍zygote进程的启动脚本,然后分析它和System进程的启动过程。

zygote分析

zygote进程的启动脚本如下:

 

 
  1. service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server  class main 
  2. socket zygote stream 660 root system  onrestart write /sys/android_power/request_state wake 
  3. onrestart write /sys/power/state on  onrestart restart media 
  4. onrestart restart netd 

解析配置文件

在我之前的一篇博客中已经分析了init进程是如何启动service服务了,需要了解的同学可以参考这篇文章:Android init进程——

通过zygote服务的启动脚本,我们可以知道,zygote进程的实际是二进制文件app_process的调用,我们就从这个应用程序的main函数入手去分析一下zygote进程的启动过程,源码如下(/frameworks/base/cmds/app_process/app_main.cpp):

 

 
  1. /**  * 将-Xzygote加入到JavaVMOption中,返回/system/bin参数指向的下标