安卓开机流程分析:app

安卓开机流程分析:app_process

书接上文


上一篇文章分享了Android第一号进程init的启动流程,其中有一步就是启动zygote。zygote的启动是通过init.zygote.rc文件进行配置的。

安卓开机流程分析:app_process

通过rc配置文件,知道启动zygote是通过执行可执行文件app_process。

概述

app_process的源代码在下面的路径,里面只有两个文件,一个是源文件app_main.cpp,一个是编译规则文件Android.mk:

Frameworks/base/cmds/app_process/

编译规则文件

Frameworks/base/cmds/app_process/Android.mk

安卓开机流程分析:app_process

Makefile,编译生成可执行文件,生成的目标叫app_process。

源代码分析

Frameworks/base/cmds/app_process/app_main.cpp

只有这一个文件,代码量很少,316行。主流程如下:

安卓开机流程分析:app_process

安卓开机流程分析:app_process

下面分步看一下:

安卓开机流程分析:app_process

检查是不是old kernels。

安卓开机流程分析:app_process

创建变量runtime,并初始化。

安卓开机流程分析:app_process

这段是过滤传入的参数,添加到runtime的option。所以/system/bin参数会被过滤掉,实际传入option:-Xzygote、--zygote、--start-system-server。

安卓开机流程分析:app_process

根据传入的参数初始化局部变量。Zygote=true,niceName=zygote,startSystemServer=true。

安卓开机流程分析:app_process

创建向量args并赋值,args赋值为:start-system-server,--abi-list=armv7。

安卓开机流程分析:app_process

用前面创建的niceName,设置进程的名字。

安卓开机流程分析:app_process

zygote为true,调用runtime的start()方法,执行Java文件"com.android.internal.os.ZygoteInit",并传入args参数。至此app_process的流程就分析完了。

接着AndroidRuntime会执行ZygoteInit的main()方法。


分享到:


相關文章: