零配置初始化流程就一直过不去_安卓开机流程分析:app_process

fbe78901c09852184de8d3bc2013c164.png

书接上文

安卓第一号进程分析|init.rc文件分析

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

2bdca95cc76d35e5766595552ff2f32d.png

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

概述

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

Frameworks/base/cmds/app_process/

编译规则文件

Frameworks/base/cmds/app_process/Android.mk

00e2da3cd0d10b8d5260658ce2f6dc7a.png

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

源代码分析

Frameworks/base/cmds/app_process/app_main.cpp

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

c663beb22e917dbe79e7a40a0961fca5.png
1967f698b91a2e6b357afe8e81bb19c9.png

下面分步看一下:

51b489be596018a26d699eccd25a4879.png

检查是不是old kernels。

742711b5e0cfb53df2e63511b84ebb0c.png

创建变量runtime,并初始化。

edfa86de86d3ab9511ccb9896ed3d2b6.png

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

53a6e74afaf458620f8e18885fb3f771.png

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

e4721c51fcbce0bf943d671eeaf1320f.png

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

a9ba7fb7cfb69c4b7776c24d38e06b2a.png

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

285714f8df2e1251830b2959ab502f0b.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值