Android 平臺架構系統啟動流程詳解

目錄

一、平臺架構模塊

1.1 Linux 內核?

1.2?硬件抽象層 (HAL)?

1.3?Android 運行時?

1.4?原生 C/C++ 庫?

1.5 Java API 框架?

1.6?系統應用?

二、系統啟動流程

2.1?Bootloader階段

2.2?內核啟動

2.3?Init進程(PID 1)

2.4?Zygote與System Server

2.5?系統就緒與用戶界面

2.6?優化與安全機制

三、關鍵分區與故障處理

四、總結

五、常見誤解澄清


一、平臺架構模塊

Android 是一個基于 Linux 的開源軟件堆棧,針對多種不同設備類型打造。圖 1 顯示了 Android 平臺的主要組件。

1.1 Linux 內核?

Android 平臺的基礎是 Linux 內核。例如,Android 運行時 (ART)?依賴 Linux 內核來實現底層功能,例如線程處理和低級內存管理。

使用 Linux 內核可讓 Android 利用關鍵安全功能,并讓設備制造商能夠為知名內核開發硬件驅動程序。

1.2?硬件抽象層 (HAL)?

硬件抽象層 (HAL)?提供了用于向較高級別的?Java API 框架公開設備硬件功能的標準接口。HAL 由多個庫模塊組成,每個模塊都為特定類型的硬件組件(例如相機或藍牙模塊)實現一個接口。當框架 API 發出調用以訪問設備硬件時,Android 系統將為該硬件組件加載庫模塊。

**硬件抽象層(HAL)**通過標準接口實現了硬件能力與Java框架的解耦。其核心價值體現在:

  • 模塊化設計:每個硬件組件(如藍牙、傳感器)對應獨立.so庫

  • 動態加載機制:當應用調用Camera API時,系統自動加載對應的Camera HAL模塊

  • 版本兼容:通過HIDL接口定義語言保證跨版本兼容性

這種設計使得OEM廠商可以靈活實現硬件功能,同時保持應用層API的穩定性。

1.3?Android 運行時?

對于搭載 Android 5.0(API 級別 21)或更高版本的設備,每個應用都在其自己的進程中運行,并且有其自己的?Android 運行時 (ART)?實例。ART 編寫為通過執行 Dalvik 可執行文件格式 (DEX) 文件,在低內存設備上運行多個虛擬機。DEX 文件是一種專為 Android 設計的字節碼格式,針對最小的內存占用量進行了優化。構建工具(如?d8)可將 Java 源代碼編譯成 DEX 字節碼,此類字節碼可在 Android 平臺上運行。

ART 的部分主要功能包括:

  • 預先 (AOT) 和即時 (JIT) 編譯
  • 優化的垃圾回收 (GC)
  • 在 Android 9(API 級別 28)及更高版本中,可將應用軟件包的 DEX 文件轉換為更緊湊的機器代碼
  • 可提供更好的調試支持,包括專用采樣剖析器、詳細的診斷異常和崩潰報告,以及設置觀察點以監控特定字段的能力

在 Android 版本 5.0(API 級別 21)之前,Dalvik 是 Android 運行時。如果您的應用在 ART 上運行良好,那么它也可以在 Dalvik 上運行,但反過來不一定。

Android 還包含一套核心運行時庫,可提供 Java API 框架所使用的 Java 編程語言中的大部分功能,包括一些?Java 8 語言功能。

從Dalvik到ART的演進標志著Android性能的質的飛躍:

特性DalvikART
編譯方式JIT即時編譯AOT預先編譯
內存占用較高優化減少40%
啟動速度較慢提升50%以上
GC效率暫停時間較長并發標記清除

ART運行時的關鍵技術創新:

  • 支持Java 8 Lambda表達式

  • 引入Compact DEX格式減少安裝體積

  • 診斷工具支持內存泄漏檢測

  • 多Dex文件并行加載加速冷啟動

1.4?原生 C/C++ 庫?

許多核心 Android 系統組件和服務(如 ART 和 HAL)都是從需要用 C 和 C++ 編寫的原生庫的原生代碼構建的。Android 平臺提供 Java 框架 API,用于向應用提供其中一些原生庫的功能。例如,您可以通過 Android 框架的?Java OpenGL API?訪問?OpenGL ES,以支持在應用中繪制和操控 2D 和 3D 圖形。

如果開發的是需要 C 或 C++ 代碼的應用,可以使用?Android NDK?直接從原生代碼訪問某些原生平臺庫。

1.5 Java API 框架?

您可通過以 Java 語言編寫的 API 使用 Android 操作系統的整個功能集。這些 API 是創建 Android 應用所需的構建塊的基礎,可簡化核心、模塊系統組件和服務的重復使用,包括以下組件和服務:

  • 豐富且可擴展的視圖系統,可用于構建應用界面,包括列表、網格、文本框、按鈕,甚至可嵌入的網絡瀏覽器
  • 資源管理器,用于訪問非代碼資源,例如本地化的字符串、圖形和布局文件
  • 通知管理器,可讓所有應用在狀態欄中顯示自定義提醒
  • 一個?activity 管理器,用于管理應用的生命周期,并提供常見的導航返回堆棧
  • Content Provider,可讓應用訪問其他應用(例如“通訊錄”應用)中的數據或共享自己的數據

開發者可以完全訪問 Android 系統應用使用的相同框架 API。

1.6?系統應用?

Android 隨附一套用于電子郵件、短信、日歷、互聯網瀏覽和通訊錄等的核心應用。平臺隨附的應用與用戶可以選擇安裝的應用一樣,沒有特殊狀態。因此,第三方應用可以成為用戶的默認網絡瀏覽器、短信應用甚至默認鍵盤。但有一些例外情況,例如系統的“設置”應用。

系統應用既可用作用戶體驗應用,又能提供開發者可從自己的應用訪問的關鍵功能。例如,如果您希望應用發送短信,則無需自行構建該功能。您可以改為調用已安裝的短信應用,將消息發送給您指定的接收者。

二、系統啟動流程

Android啟動流程的大致步驟:

1. 電源啟動,執行Boot ROM中的代碼,加載Bootloader。

2. Bootloader加載內核和initramfs到內存。

3. 內核初始化硬件和驅動,掛載文件系統,啟動init進程

4. init進程解析init.rc,啟動系統服務,包括Zygote

5. Zygote啟動System Server,System Server啟動各種系統服務。

6. 系統服務啟動完成后,啟動Launcher,進入用戶界面。

此流程體現了Android從硬件初始化到用戶交互的完整鏈路,結合Linux內核與獨特的Android服務設計,確保了系統的高效啟動與運行。

Android系統的啟動流程是一個復雜但結構化的過程,涉及多個階段的協同工作。以下是整理后的詳細流程:

2.1?Bootloader階段

  • Boot ROM:設備上電后,執行芯片內固化的代碼(Boot ROM),初始化硬件并加載第一階段的Bootloader。

  • Bootloader:通常分為多個階段(如Primary和Secondary),負責驗證簽名、加載內核和initramfs到內存。常見的Bootloader如U-Boot或廠商定制版本。

2.2?內核啟動

  • Linux內核初始化:內核解壓后,初始化CPU、內存、設備驅動等,掛載根文件系統(通常為ramdisk)。

  • 掛載系統分區:內核掛載/system(只讀)、/data(讀寫)等分區,可能涉及dm-verity驗證系統完整性。

2.3?Init進程(PID 1)

  • 解析init.rc腳本:執行早期初始化(如創建目錄、設置權限),啟動核心守護進程(ueventd、logd)。

  • 啟動關鍵服務

    • Zygote:通過app_process啟動,預加載Java核心類和資源,監聽Socket等待孵化應用進程。

    • Service Manager:Binder IPC的核心管理服務。

    • SurfaceFlinger:圖形合成服務,負責渲染UI。

    • Media Server:多媒體相關服務。

2.4?Zygote與System Server

  • Zygote孵化System Server:Zygote fork出System Server進程(Java層核心)。

  • System Server啟動

    • Binder線程池初始化:啟用跨進程通信。

    • 核心服務啟動順序

      1. Activity Manager:管理應用生命周期。

      2. Package Manager:管理應用安裝與信息。

      3. Window Manager:窗口管理。

      4. Power ManagerBattery Service等其他服務。

    • 服務依賴管理:確保服務按正確順序啟動。

2.5?系統就緒與用戶界面

  • Launcher啟動:System Server完成后,Activity Manager啟動主屏幕應用(如Launcher3)。

  • 廣播通知:發送ACTION_BOOT_COMPLETED,告知應用系統啟動完成。

2.6?優化與安全機制

  • 并行啟動:Android 8.0+采用并行初始化服務,縮短啟動時間。

  • 安全驗證:Bootloader驗證內核簽名,dm-verity確保系統分區完整性。

三、關鍵分區與故障處理

  • 分區結構/boot(內核+ramdisk)、/system(系統應用)、/recovery(恢復模式)、/data(用戶數據)。

  • 異常處理:啟動失敗時進入Recovery模式或Fastboot,進行系統修復。

四、總結

  • 第一個用戶進程init?進程(PID 1)。

  • 核心作用:架起內核與用戶空間的橋梁,管理所有后續進程的啟動。

  • 關鍵文件/init?二進制文件、init.rc?配置文件。

五、常見誤解澄清

  • Zygote 不是第一個用戶進程:雖然 Zygote 是 Java 層應用進程的起點,但它是由?init?進程通過解析?init.rc?腳本啟動的。

  • 內核線程 vs 用戶進程:內核啟動階段會運行內核線程(如?kthreadd),但這些屬于內核空間,不屬于用戶進程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71615.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Windows下Gitbook快速入門使用】

Windows下Gitbook快速入門使用 1 工具安裝1.1 Node.js下載安裝1.1 環境變量1.2 npm配置1.3 安裝gitbook 2 gitbook使用2.1 gitbook 無法執行2.2 gitbook常用命令 Gitbook是一個軟件,使用Git和Markdown來編排書本; GitBook helps you pushlish beautiful …

RK3588V2--HYM8563TS RTC 實時時鐘適配移植

1. 什么是RTC RTC(Real-Time Clock,實時時鐘)是一種電子設備或芯片,它用于保持當前時間和日期,即使系統關閉或斷電也能持續計時。RTC 通常用于計算機、嵌入式系統、物聯網設備等需要精確時間管理的場景。 1.1 RTC 的…

MHA集群

一.MHA集群 MHA master high avavibility 主服務器高可用 如上圖所示,我們之前說過,如果在主從復制架構中主服務器出現故障,就需要我們將從服務器作為主服務器,等故障的主服務器修復好之后,再將修好的主服務器作為從服…

10 【HarmonyOS NEXT】 仿uv-ui組件開發之Avatar頭像組件開發教程(一)

溫馨提示:本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦! 目錄 第一篇:Avatar 組件基礎概念與設計1. 組件概述2. 接口設計2.1 形狀類型定義2.2 尺寸類型定義2.3 組件屬性接口 3. 設計原則4. 使用…

微信小程序+SpringBoot的單詞學習小程序平臺(程序+論文+講解+安裝+修改+售后)

感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相關問題都可以給我留言咨詢,我會一一回復,希望幫助更多的人。 系統背景 (一)社會需求背景 在全球化的大背景下,英語作為國際…

鴻蒙HarmonyOS評論功能小demo

評論頁面小demo 效果展示 1.拆解組件,分層搭建 我們將整個評論頁面拆解為三個組件,分別是頭部導航,評論項,回復三個部分,然后統一在index界面導入 2.頭部導航界面搭建 Preview Component struct HmNavBar {// 屬性&a…

解析 SQL,就用 sqlparse!

文章目錄 解析 SQL,就用 sqlparse!一、背景:為什么你需要 sqlparse?二、什么是 sqlparse?三、如何安裝 sqlparse?四、簡單易用的庫函數1\. parse(sql)2\. format(sql, **options)3\. split(sql)4\. get_typ…

點云軟件VeloView開發環境搭建與編譯

官方編譯說明 LidarView / LidarView-Superbuild GitLab 我的編譯過程: 安裝vs2019,windows sdk,qt5.14.2(沒安裝到5.15.7),git,cmake3.31,python3.7.9,ninja下載放到…

【一文學會 HTML5】

目錄 HTML概述基本概念HTML 發展歷程HTML 基本結構 網頁基本標簽標題標簽&#xff08;<h1> - <h6>&#xff09;段落標簽&#xff08;<p>&#xff09;換行標簽&#xff08;<br>&#xff09;水平線標簽&#xff08;<hr>&#xff09;注釋&#xff0…

Spring Boot面試問答

1. Spring Boot 基礎知識 問題 1:什么是Spring Boot?它與Spring框架有何不同? 回答: Spring Boot是基于Spring框架的一個開源框架,旨在簡化新Spring應用的初始化和開發過程。與傳統的Spring框架相比,Spring Boot提供了以下優勢: 自動配置:根據項目依賴自動配置Spring…

DeepSeek系列模型技術報告的閱讀筆記

DeepSeek系列模型技術報告的閱讀筆記 之前仔細閱讀了DeepSeek系列模型的主要技術方面內容與發展脈絡&#xff0c;以下是DeepSeek系列模型技術報告的筆記&#xff0c;有錯誤的地方歡迎指正&#xff01; 文章目錄 DeepSeek系列模型技術報告的閱讀筆記GQADeepseek MoEAbstractIn…

MyBatis @Param 注解詳解:多參數傳遞與正確使用方式

Param 注解主要用于 MyBatis 進行參數傳遞時給 SQL 語句中的參數 起別名&#xff0c;通常用于 多參數 方法&#xff0c;使參數在 XML Mapper 文件或注解 SQL 語句中更清晰易用。 1. 基本用法 在 Mapper 接口中使用 Param 來為參數命名&#xff0c;避免 MyBatis 解析時出現參數…

OpenBMC:BmcWeb connect讀取http請求

OpenBMC:BmcWeb構造connect對象-CSDN博客 OpenBMC:BmcWeb server.run-CSDN博客 1.構造了connect對象后,通過connection->start()開始處理來自客戶端的請求 //http\http_connection.hpp void start() {...startDeadline();readClientIp();boost::beast::async_detect_ssl…

SparkStreaming之04:調優

SparkStreaming調優 一 、要點 4.1 SparkStreaming運行原理 深入理解 4.2 調優策略 4.2.1 調整BlockReceiver的數量 案例演示&#xff1a; object MultiReceiverNetworkWordCount {def main(args: Array[String]) {val sparkConf new SparkConf().setAppName("Networ…

軟考初級程序員知識點匯總

以下是計算機技術與軟件專業技術資格&#xff08;水平&#xff09;考試&#xff08;簡稱“軟考”&#xff09;中 程序員&#xff08;初級&#xff09; 考試的核心知識點匯總&#xff0c;涵蓋考試大綱的主要方向&#xff0c;幫助你系統復習&#xff1a; 一、計算機基礎 計算機組…

Gauss數據庫omm用戶無法連接處理

確保gauss數據庫服務已經打開 重啟gauss服務 gs_om -t restart 連接gauss gsql -d postgres -p 26000 -r 結果發現 查看數據庫運行情況 gs_om -t status --detail 我們可以看到 cluster_state 的值是 Unavailable 不可用 那么問題大概率是出現在了這里 然后我們再查看一…

36-Openwrt wifi命令工具iwconfig、iwinfo、iwpriv、iwlist

增對wifi的調試命令有很多,這邊列出我們常用的命令提供參考,方便查看信息定位問題。 1、iwconfig 查看當前 WIFI 的工作信道以及工作帶寬模式: root@openwrt:/# iwconfig ra0 ra0 mt7603e ESSID:"openwrt" Mode:Managed Channel:8 Access Point: DC:4B…

Android 低功率藍牙之BluetoothGattDescriptor詳解

BluetoothGattDescriptor 詳解 BluetoothGattDescriptor 是 Android 中用于表示藍牙低功耗&#xff08;BLE&#xff09;設備中 GATT&#xff08;Generic Attribute Profile&#xff09;描述符 的類。描述符是 GATT 架構中的一種屬性&#xff0c;用于提供關于 特征值&#xff0…

計算機畢業設計Python+DeepSeek-R1大模型醫療問答系統 知識圖譜健康膳食推薦系統 食譜推薦系統 醫療大數據(源碼+LW文檔+PPT+講解)

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

數字體驗推薦TOP8提升用戶參與

數字內容體驗推薦核心優勢 在數字化競爭日益激烈的市場環境中&#xff0c;數字內容體驗的差異化優勢已成為企業突圍的關鍵。通過智能算法驅動的個性化推薦系統&#xff0c;能夠精準捕捉用戶行為軌跡與興趣偏好&#xff0c;實現內容與受眾的動態匹配。這種技術不僅顯著提升頁面…