1. 程式人生 > >Android的5層平臺架構

Android的5層平臺架構

Android 是一種基於 Linux 的開放原始碼軟體棧,為廣泛的裝置和機型而建立。下圖所示為 Android 平臺的主要元件。
這裡寫圖片描述

Android 軟體棧

Linux 核心

Android 平臺的基礎是 Linux 核心。例如,Android Runtime (ART) 依靠 Linux 核心來執行底層功能,例如執行緒和低層記憶體管理。

使用 Linux 核心可讓 Android 利用主要安全功能,並且允許裝置製造商為著名的核心開發硬體驅動程式。

硬體抽象層 (HAL)

硬體抽象層 (HAL) 提供標準介面,向更高級別的 Java API 框架顯示裝置硬體功能。HAL 包含多個庫模組,其中每個模組都為特定型別的硬體元件實現一個介面,例如相機或藍芽模組。當框架 API 要求訪問裝置硬體時,Android 系統將為該硬體元件載入庫模組。

Android Runtime

對於執行 Android 5.0(API 級別 21)或更高版本的裝置,每個應用都在其自己的程序中執行,並且有其自己的 Android Runtime (ART) 例項。ART 編寫為通過執行 DEX 檔案在低記憶體裝置上執行多個虛擬機器,DEX 檔案是一種專為 Android 設計的位元組碼格式,經過優化,使用的記憶體很少。編譯工具鏈(例如 Jack)將 Java 原始碼編譯為 DEX 位元組碼,使其可在 Android 平臺上執行。

ART 的部分主要功能包括:

預先 (AOT) 和即時 (JIT) 編譯
優化的垃圾回收 (GC)
更好的除錯支援,包括專用取樣分析器、詳細的診斷異常和崩潰報告,並且能夠設定監視點以監控特定欄位
在 Android 版本 5.0(API 級別 21)之前,Dalvik 是 Android Runtime。如果您的應用在 ART 上執行效果很好,那麼它應該也可在 Dalvik 上執行,但反過來不一定。

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

原生 C/C++ 庫

許多核心 Android 系統元件和服務(例如 ART 和 HAL)構建自原生程式碼,需要以 C 和 C++ 編寫的原生庫。Android 平臺提供 Java 框架 API 以嚮應用顯示其中部分原生庫的功能。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支援在應用中繪製和操作 2D 和 3D 圖形。

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

Java API 框架

您可通過以 Java 語言編寫的 API 使用 Android OS 的整個功能集。這些 API 形成建立 Android 應用所需的構建塊,它們可簡化核心模組化系統元件和服務的重複使用,包括以下元件和服務:

豐富、可擴充套件的 View System,可用以構建應用的 UI,包括列表、網格、文字框、按鈕甚至可嵌入的網路瀏覽器
Resource Manager,用於訪問非程式碼資源,例如本地化的字串、圖形和佈局檔案
Notification Manager,可讓所有應用在狀態列中顯示自定義提醒
Activity Manager,用於管理應用的生命週期,提供常見的導航返回棧
Content Providers,可讓應用訪問其他應用(例如“聯絡人”應用)中的資料或者共享其自己的資料
開發者可以完全訪問 Android 系統應用使用的框架 API。

系統應用

Android 隨附一套用於電子郵件、簡訊、日曆、網際網路瀏覽和聯絡人等的核心應用。平臺隨附的應用與使用者可以選擇安裝的應用一樣,沒有特殊狀態。因此第三方應用可成為使用者的預設網路瀏覽器、簡訊 Messenger 甚至預設鍵盤(有一些例外,例如系統的“設定”應用)。

系統應用可用作使用者的應用,以及提供開發者可從其自己的應用訪問的主要功能。例如,如果您的應用要發簡訊,您無需自己構建該功能,可以改為呼叫已安裝的簡訊應用向您指定的接收者傳送訊息。

我的微信二維碼如下,歡迎交流討論

這裡寫圖片描述

歡迎關注《IT面試題彙總》微信訂閱號。每天推送經典面試題和麵試心得技巧

微信訂閱號二維碼如下:

這裡寫圖片描述