Android 是以 Linux 為基礎的開放原始碼軟體堆疊,適用於多種裝置和板型規格。圖 1 顯示 Android 平台的主要元件。

圖 1. Android 軟體堆疊。
Linux kernel
Android 平台的基礎是 Linux kernel。舉例來說,Android 執行階段 (ART) 必須使用 Linux kernel,才能提供執行緒和低階記憶體管理等基礎功能。
使用 Linux kernel 可讓 Android 利用主要安全性功能,並讓裝置製造商為知名核心開發硬體驅動程式。
硬體抽象層 (HAL)
硬體抽象層 (HAL) 提供標準介面,可讓裝置硬體功能向更高層級的 Java API 架構公開。HAL 包含多個程式庫模組,每個模組都會針對相機或藍牙模組等特定類型的硬體元件實作介面。當架構 API 發出存取裝置硬體的呼叫時,Android 系統會載入該硬體元件的程式庫模組。
Android 執行階段
在搭載 Android 5.0 (API 級別 21) 以上版本的裝置中,每個應用程式都會以自己的程序執行,也有專屬的 Android 執行階段 (ART) 執行個體。ART 會執行 Dalvik Executable 格式 (DEX) 檔案,專門為 Android 設計經過最佳化處理的位元碼格式,盡可能減少記憶體用量,藉此在低記憶體的裝置上執行多部虛擬機器。建構工具 (例如 d8
) 會將 Java 來源編譯為 DEX 位元碼,以便在 Android 平台上執行。
ART 的主要功能包括:
- 預先 (AOT) 和及時 (JIT) 編譯
- 最佳化垃圾收集 (GC)
- 在 Android 9 (API 級別 28) 以上版本中,將應用程式套件的 DEX 檔案轉換為更精簡的機器程式碼
- 更有效地支援偵錯功能,包括專屬的取樣分析器、詳細的診斷例外狀況和當機回報,以及設定觀察點來監控特定欄位的功能。
在 Android 5.0 (API 級別 21) 之前,Dalvik 是 Android 執行階段。如果應用程式在 ART 上運作正常,那麼也可以在 Dalvik 上運作,但反向標記不一定是 true。
Android 也包含一組核心執行階段程式庫,可提供 Java 程式設計語言的大部分功能,包括 Java API 架構使用的 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 作業系統的完整功能集。這些 API 可簡化用於建立 Android 應用程式的建構模塊,您可以簡化核心模組系統元件和服務的重複使用程序,包括:
- 一個豐富且可擴充的檢視系統,可用來建構應用程式的使用者介面,包括清單、格線、文字方塊、按鈕,甚至是可嵌入的網路瀏覽器
- 資源管理員:提供非程式碼資源的存取權,例如本地化字串、圖形和版面配置檔案
- 通知管理員,可讓所有應用程式在狀態列中顯示自訂快訊
- 活動管理員,可管理應用程式生命週期,並提供常見的導覽返回堆疊
- 內容供應器,可讓應用程式存取其他應用程式 (例如「聯絡人」應用程式) 的資料,或分享自己的資料
開發人員具備 Android 系統應用程式所用架構 API 的完整存取權,
系統應用程式
Android 內建一組核心應用程式,可用於電子郵件、簡訊、日曆、網際網路瀏覽、聯絡人等。平台隨附的應用程式在使用者選擇安裝的應用程式之間沒有特殊狀態。因此,第三方應用程式可能會成為使用者的預設網路瀏覽器、簡訊簡訊,甚至是預設鍵盤。但部分例外狀況 (例如系統的「設定」應用程式) 也適用。
系統應用程式可做為使用者的應用程式使用,並提供開發人員可透過自己的應用程式存取的重要功能。舉例來說,假如您想讓應用程式傳送簡訊,則不必自行建構這項功能。您可以改為叫用任何已安裝的簡訊應用程式,以便傳送訊息給您指定的收件者。