書接上文
上一篇文章分享了Android第一號進程init的啟動流程,其中有一步就是啟動zygote。zygote的啟動是通過init.zygote.rc文件進行配置的。
通過rc配置文件,知道啟動zygote是通過執行可執行文件app_process。
概述
app_process的源代碼在下面的路徑,裡面只有兩個文件,一個是源文件app_main.cpp,一個是編譯規則文件Android.mk:
Frameworks/base/cmds/app_process/
編譯規則文件
Frameworks/base/cmds/app_process/Android.mk
Makefile,編譯生成可執行文件,生成的目標叫app_process。
源代碼分析
Frameworks/base/cmds/app_process/app_main.cpp
只有這一個文件,代碼量很少,316行。主流程如下:
下面分步看一下:
檢查是不是old kernels。
創建變量runtime,並初始化。
這段是過濾傳入的參數,添加到runtime的option。所以/system/bin參數會被過濾掉,實際傳入option:-Xzygote、--zygote、--start-system-server。
根據傳入的參數初始化局部變量。Zygote=true,niceName=zygote,startSystemServer=true。
創建向量args並賦值,args賦值為:start-system-server,--abi-list=armv7。
用前面創建的niceName,設置進程的名字。
zygote為true,調用runtime的start()方法,執行Java文件"com.android.internal.os.ZygoteInit",並傳入args參數。至此app_process的流程就分析完了。
接著AndroidRuntime會執行ZygoteInit的main()方法。
閱讀更多 做事情的幻想家 的文章