Android源碼分析--Android系統啓動

Android系統啓動

其實Android系統的啓動最主要的內容無非是init、Zygote、SystemServer這三個進程的啓動,他們一起構成的鐵三角是Android系統的基礎。

啓動大綱

  1. 啓動電源以及引導程序加載

  2. 引導程序BootLoader啓動

  3. Linux內核啓動

  4. init進程啓動

  5. Zygote進程啓動

  6. SystemServer進程啓動

  7. Launcher啓動

啓動流程圖


啓動詳解

init進程啓動的準備工作

init進程是在Linux內核加載完成後啓動的,因此要想啓動init進程,必須先加載Linux內核,而Linux則是由引導程序BootLoader拉起來的。

  1. 當電源被按下後,引導芯片代碼(ROM)執行,並將引導程序BootLoader加載到RAM中執行。

  2. BootLoader運行,它的作用就是把系統OS拉起來並運行。

  3. Linux內核被拉起運行後,會設置緩存、被保護存儲器、計劃列表、加載驅動等,最後會在系統文件中尋找init.rc文件,啓動init進程。

init進程啓動

init進程主要用於初始化和啓動屬性服務,並啓動Zygote進程。init進程的源碼在system/core/init/init.cpp`下。

  1. 創建和掛載啓動所需要的文件目錄(tmpfs、devpts、proc、sysfs和selinuxfs),他們都是系統運行時目錄。

  2. 初始化並啓動屬性服務(類似window裏面的註冊表)。

  3. 解析init.rc配置文件。

  4. 啓動Zygote進程。

Zygote進程啓動

在Android系統中,DVM和ART、應用程序進程以及運行系統的關鍵服務SystemServer進程都是由Zygote進程來創建的,我們也可以將其稱爲孵化器。它通過fork的形式來創建應用程序進程和SystemServer進程。

  1. init進程調用app_main創建了AndroidRuntime,通過調用它的start方法來啓動Zygote。

  2. 在AndroidRuntime中創建了Java虛擬機,併爲其註冊了JNI方法

  3. 通過JNI反射調用ZygoteInit進入Zygote的Java框架層,最終啓動了Zygote進程。

ZygoteInit的main方法

這裏需要注意的是,之前的所以初始化操作都是在Native層進行的,直到我們通過JNI調用ZygoteInit的main方法後,我們才進入了Java框架層。

  1. 創建了一個Server端的socket(主要用於跨進程通信)。

  2. 預加載類和資源。

  3. 啓動SystemServer進程。

  4. 等待AMS(ActivityManagerService)請求創建新的應用程序進程。

SystemServer進程啓動

SystemServer進程主要用於創建和啓動系統服務,包括我們常用的AMS、WMS和PMS等。

  1. 啓動Binder線程池,用於與其他進程進行通信。

  2. 創建SystemServiceManager,其用於對系統的服務進行創建、啓動和生命週期的管理。

  3. 啓動各種系統服務(引導服務、核心服務和其他服務等)

Launcher啓動

Launcher通俗地說就是Android系統的桌面,是系統的門戶,用於啓動應用程序,其本質就是一個Activity,類名爲"com.android.launcher3.Launcher",點擊查看Launcher的AndroidManifest.xml。

  1. SystemServer調用AMS的 systemReady方法準備啓動Launcher

  2. AMS中又會調用ActivityStackSupervisor和ActivityStack進行一系列的準備工作,最終又調用了AMS的 startHomeActivityLocked方法,使用ActivityStarter的 startHomeActivityLocked啓動Launcher。

啓動架構示意圖

我們都知道Android系統架構是Linux Kernel、Android Runtime、Liberaries、Application Framework和Application這五個部分組成的,如下圖所示:

那麼Android系統在啓動過程中,都經歷了哪些架構組成部分呢?以下給出簡要的示意圖:

掃碼關注

本文分享自微信公衆號 - 我的Android開源之旅(openandroidxx)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章