安卓開機流程分析: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()方法。


分享到:


相關文章: