Android 是一種基于 Linux 的開放源代碼軟件棧,為廣泛的設備和機型而創(chuàng)建。下圖所示為 Android 平臺的主要組件。

Linux 內(nèi)核
Android 平臺的基礎是 Linux 內(nèi)核。例如,Android Runtime (ART) 依靠 Linux 內(nèi)核來執(zhí)行底層功能,例如線程和低層內(nèi)存管理。
使用 Linux 內(nèi)核可讓 Android 利用主要安全功能,并且允許設備制造商為著名的內(nèi)核開發(fā)硬件驅動程序。
硬件抽象層 (HAL)
硬件抽象層 (HAL) 提供標準界面,向更高級別的 Java API 框架顯示設備硬件功能。HAL 包含多個庫模塊,其中每個模塊都為特定類型的硬件組件實現(xiàn)一個界面,例如相機或藍牙模塊。當框架 API 要求訪問設備硬件時,Android 系統(tǒng)將為該硬件組件加載庫模塊。
Android Runtime
對于運行 Android 5.0(API 級別 21)或更高版本的設備,每個應用都在其自己的進程中運行,并且有其自己的 Android Runtime (ART) 實例。ART 編寫為通過執(zhí)行 DEX 文件在低內(nèi)存設備上運行多個虛擬機,DEX 文件是一種專為 Android 設計的字節(jié)碼格式,經(jīng)過優(yōu)化,使用的內(nèi)存很少。編譯工具鏈(例如 Jack)將 Java 源代碼編譯為 DEX 字節(jié)碼,使其可在 Android 平臺上運行。
ART 的部分主要功能包括:
- 預先 (AOT) 和即時 (JIT) 編譯
- 優(yōu)化的垃圾回收 (GC)
- 更好的調(diào)試支持,包括專用采樣分析器、詳細的診斷異常和崩潰報告,并且能夠設置監(jiān)視點以監(jiān)控特定字段
在 Android 版本 5.0(API 級別 21)之前,Dalvik 是 Android Runtime。如果您的應用在 ART 上運行效果很好,那么它應該也可在 Dalvik 上運行,但反過來不一定。
Android 還包含一套核心運行時庫,可提供 Java API 框架使用的 Java 編程語言大部分功能,包括一些 Java 8 語言功能。
原生 C/C++ 庫
許多核心 Android 系統(tǒng)組件和服務(例如 ART 和 HAL)構建自原生代碼,需要以 C 和 C++ 編寫的原生庫。Android 平臺提供 Java 框架 API 以向應用顯示其中部分原生庫的功能。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支持在應用中繪制和操作 2D 和 3D 圖形。
如果開發(fā)的是需要 C 或 C++ 代碼的應用,可以使用 Android NDK 直接從原生代碼訪問某些原生平臺庫。
Java API 框架
您可通過以 Java 語言編寫的 API 使用 Android OS 的整個功能集。這些 API 形成創(chuàng)建 Android 應用所需的構建塊,它們可簡化核心模塊化系統(tǒng)組件和服務的重復使用,包括以下組件和服務:
- 豐富、可擴展的視圖系統(tǒng),可用以構建應用的 UI,包括列表、網(wǎng)格、文本框、按鈕甚至可嵌入的網(wǎng)絡瀏覽器
- 資源管理器,用于訪問非代碼資源,例如本地化的字符串、圖形和布局文件
- 通知管理器,可讓所有應用在狀態(tài)欄中顯示自定義提醒
- Activity 管理器,用于管理應用的生命周期,提供常見的導航返回棧
- 內(nèi)容提供程序,可讓應用訪問其他應用(例如“聯(lián)系人”應用)中的數(shù)據(jù)或者共享其自己的數(shù)據(jù)
開發(fā)者可以完全訪問 Android 系統(tǒng)應用使用的框架 API。
系統(tǒng)應用
Android 隨附一套用于電子郵件、短信、日歷、互聯(lián)網(wǎng)瀏覽和聯(lián)系人等的核心應用。平臺隨附的應用與用戶可以選擇安裝的應用一樣,沒有特殊狀態(tài)。因此第三方應用可成為用戶的默認網(wǎng)絡瀏覽器、短信 Messenger 甚至默認鍵盤(有一些例外,例如系統(tǒng)的“設置”應用)。
系統(tǒng)應用可用作用戶的應用,以及提供開發(fā)者可從其自己的應用訪問的主要功能。例如,如果您的應用要發(fā)短信,您無需自己構建該功能,可以改為調(diào)用已安裝的短信應用向您指定的接收者發(fā)送消息。