Google Android 作業系統架構說明
最近因為有些專案 ,都是用到 Google Android 作業系統。雖然 Google Android 作業系統出來很久了。但是對於不常使用 Google Android 作業系統的人,是不清楚 什麼是 Android 作業系統架構?所以就花點時間整理一下資料。
Android 作業系統架構總覽
Android 是一個基於 Linux 核心的開源行動作業系統,其架構採用「軟體堆疊 (Software Stack)」的設計。這種分層架構的優點是,上層的開發者無需關心底層硬體的複雜實作,只需呼叫框架提供的 API 即可,同時也讓 Android 能夠輕易地被移植到不同的硬體平台上。
整個架構大致可分為五個主要層級,由下至上分別是:
2.硬體抽象層 (Hardware Abstraction Layer, HAL)
3.原生 C/C++ 函式庫 (Native C/C++ Libraries) 與 Android 執行環境 (Android Runtime, ART)
4.應用程式框架層 (Application Framework)
5.應用程式層 (Applications)
這是 Android 作業系統的詳細架構圖:
Android 架構分層詳解表格
總結:
可以將整個 Android 架構想像成一棟大樓:
Linux Kernel 是大樓的地基,提供穩固的支撐。
HAL 就像是牆壁裡的標準化水電管線接口,無論你裝什麼牌子的水龍頭(硬體),只要符合規格就能接上。
原生函式庫與 ART 是大樓的鋼筋水泥與機電系統,提供了建築的核心功能與動力。
應用程式框架 是裝潢好的隔間、門窗與開關面板,讓住戶(開發者)可以輕鬆地打造自己的空間。
應用程式 就是住戶自己擺放的家具與家電,是使用者最終體驗到的部分。
這種分層設計讓每一層各司其職,既保證了系統的穩定性與安全性,也賦予了 Android 極大的靈活性與可擴展性。
這是 Android 作業系統的詳細架構圖:
詳細說明這張 Android 作業系統的詳細架構圖。這張圖清晰地劃分了五個主要的層級,並展示了每個層級中的關鍵組件及其相互關係。
讓我們從底層開始,逐層向上分析:
1. Linux 核心層 (Linux Kernel)
這是整個 Android 系統的基石,基於一個經過修改和優化的 Linux 核心。它直接與硬體交互,負責最底層的系統資源管理。
元件與功能:
Drivers (驅動程式): 這是核心層最重要的部分,包含了各種硬體的驅動程式,例如:
Display: 顯示螢幕的驅動。
Wi-Fi: 無線網路驅動。
Audio: 音訊輸入輸出的驅動。
USB: USB 介面驅動。
Camera: 相機感應器驅動。
還有許多其他的驅動程式,如藍牙、GPS、NFC 等,它們在這裡處理與硬體的直接通訊。
Power Management (電源管理): 負責管理設備的電源消耗,包括電池、處理器頻率調整、螢幕背光等,以確保電池續航力。
Process Management (程序管理): 創建、調度、結束應用程式和系統服務的程序,並分配它們的 CPU 時間。
Memory Management (記憶體管理): 管理系統的實體和虛擬記憶體,分配記憶體給各個程序,並處理記憶體回收。
Security (安全機制): 提供基本的系統安全功能,例如基於使用者 ID 的程序隔離,每個應用程式都運行在自己的沙箱中,防止惡意應用程式影響其他應用程式或系統。
作用: 提供作業系統最底層的核心服務,管理硬體資源,並為上層提供一個抽象化的硬體介面。
2. 硬體抽象層 (Hardware Abstraction Layer, HAL)
HAL 位於 Linux 核心和上層框架之間,它是一個介面層,定義了硬體廠商必須實現的標準介面。
元件與功能:
HAL 由一系列標準化的介面模組組成,例如:
Audio HAL: 處理音訊輸入/輸出。
Camera HAL: 處理相機的圖片捕獲和設定。
Bluetooth HAL: 處理藍牙通訊。
Sensor HAL: 處理各種感應器(如加速度計、陀螺儀)的數據。
GPS HAL: 處理全球定位系統的數據。
JNI (Java Native Interface): 圖中箭頭顯示了 HAL 與上層之間的互動通常會透過 JNI,這允許 Java 層的程式碼呼叫 C/C++ 實現的功能。
作用: 將 Android 框架與底層 Linux 核心的硬體驅動程式解耦。這意味著 Google 在開發 Android 系統時,只需按照 HAL 定義的標準介面來編寫框架層,而硬體製造商只需按照這些介面規範來實作 HAL 模組和其底層的驅動程式,即可讓 Android 系統在其硬體上運行。這大大提升了 Android 的可移植性。
3. 原生 C/C++ 函式庫 (Native C/C++ Libraries) & Android 執行環境 (Android Runtime, ART)
這一層提供了許多核心的系統服務和應用程式的執行環境。
原生 C/C++ 函式庫 (左側綠色區塊):
這是一組用 C/C++ 編寫的高效能函式庫,為 Android 系統提供了許多底層功能。
libc (Bionic): Android 特有的 C 標準函式庫,針對行動裝置進行了優化。
Media Framework: 支援多種音訊和視訊格式的播放和錄製(例如,基於 OpenCORE 或 Stagefright)。
SQLite: 輕量級的嵌入式關聯式資料庫引擎,廣泛用於應用程式資料存儲。
OpenGL ES & Vulkan: 用於高效能 2D/3D 圖形渲染的標準 API,是遊戲和圖形密集型應用程式的基礎。
WebKit/Blink: 網頁瀏覽器引擎的核心,用於 WebView 和 Chrome 瀏覽器。
Skia: 2D 圖形渲染引擎,用於 UI 繪製。
Android 執行環境 (Android Runtime, ART) (右側綠色區塊):
Core Libraries (核心函式庫): 提供了 Java/Kotlin 語言所需的大部分功能,例如集合、I/O、網路等。
ART Virtual Machine (ART 虛擬機): Android 5.0 之後用來取代 Dalvik (DVM) 的執行環境。它採用 AOT (Ahead-of-Time) 預先編譯技術,在應用程式安裝時就將其 DEX 程式碼編譯成機器碼,這顯著提升了應用程式的執行效率和啟動速度,並改善了電池續航力。它也負責垃圾回收 (Garbage Collection) 和其他記憶體管理任務。
作用: 原生函式庫提供高效能的底層功能支援,而 ART 則提供應用程式的執行環境,將 Java/Kotlin 程式碼轉換為可在裝置上運行的形式,並管理其生命週期和資源。
4. 應用程式框架層 (Application Framework)
這是 Android 開發者最常接觸的一層。它提供了豐富的 Java/Kotlin API,讓開發者無需深入了解底層細節,就能輕鬆開發應用程式。
元件與功能 (橙色區塊):
Activity Manager: 管理所有應用程式的 Activity (活動) 生命週期,包括啟動、暫停、恢復、停止等,並管理 Activity 堆疊。
Window Manager: 管理所有視窗的顯示、層次和操作,如調整大小、移動等。
Content Providers: 提供一種標準機制,讓應用程式可以安全地共享數據給其他應用程式,例如聯絡人數據。
View System: 構建使用者介面 (UI) 的基礎,包含了各種 UI 元件 (Widgets),如按鈕 (Buttons)、文字框 (TextViews)、列表 (ListViews) 等。
Package Manager: 管理系統中所有已安裝的應用程式(APK 包)的資訊,例如權限、版本等。
Telephony Manager: 提供與電話通訊相關的功能,如撥打電話、接收簡訊等。
Resource Manager: 管理應用程式中的非程式碼資源,如圖片、字串、佈局檔案 (XML)、樣式等。
Location Manager: 提供定位服務,獲取裝置的地理位置信息。
Notification Manager: 管理狀態列和鎖定螢幕上的通知。
作用: 提供一套標準化、高層次的 API,簡化了應用程式開發,使得開發者可以專注於應用程式的業務邏輯,而無需處理複雜的底層系統調用。應用程式透過這些 API 與底層服務交互。
5. 應用程式層 (Applications)
這是使用者直接看到和互動的層級,包含了所有運行在 Android 設備上的應用程式。
元件與功能 (紫色區塊):
System Apps (系統應用程式): 這些是 Android 系統預裝的核心應用程式,例如:
Phone (電話): 用於通話。
Camera (相機): 用於拍照和錄影。
Browser (瀏覽器): 網頁瀏覽器。
Contacts (聯絡人): 聯絡人管理。
Clock (時鐘): 時鐘、鬧鐘、計時器。
Gallery (圖庫): 圖片和影片瀏覽。
User/Third-party Apps (使用者/第三方應用程式): 這些是使用者從 Google Play Store 或其他來源下載並安裝的應用程式,例如:
LINE: 即時通訊軟體。
YouTube: 影音平台。
Instagram: 社交媒體。
任何您安裝的遊戲、工具、社交應用程式等。
作用: 作為使用者與 Android 裝置互動的介面,提供各種功能和服務。
層級之間的互動
圖中的箭頭表示了層級之間的通訊和依賴關係:
應用程式 (Applications) 透過 應用程式框架 (Application Framework) 提供的 API 進行開發和運行。
應用程式框架 (Application Framework) 的許多功能最終會透過 JNI 呼叫 原生 C/C++ 函式庫 或 Android 執行環境 (ART)。
原生 C/C++ 函式庫 和 ART 又會透過標準介面與 硬體抽象層 (HAL) 交互。
硬體抽象層 (HAL) 則負責與最底層的 Linux 核心 中的驅動程式通訊,以操作實際的硬體。
這種分層結構的優點是:各層之間職責明確,高內聚低耦合,有利於系統的穩定性、安全性、開發效率和跨硬體平台的移植性。





留言
張貼留言