Android系統架構包含以下組件:
- 應用框架。應用程序框架最常被應用程序開發人員使用。作為硬件開發人員,您應該了解開發人員 API,因為許多 API 直接映射到底層 HAL 接口,並且可以提供有關實現驅動程序的有用信息。
- 粘合劑 IPC 。 Binder 進程間通信 (IPC) 機制允許應用程序框架跨越進程邊界並調用 Android 系統服務代碼。這使高級框架 API 能夠與 Android 系統服務進行交互。在應用程序框架級別,這種通信對開發人員是隱藏的,並且看起來“正常工作”。
- 系統服務。系統服務是模塊化的、專注的組件,例如窗口管理器、搜索服務或通知管理器。應用程序框架 API 公開的功能與系統服務通信以訪問底層硬件。 Android 包括兩組服務:系統(如窗口管理器和通知管理器)和媒體(播放和錄製媒體所涉及的服務)。
- 硬件抽象層(HAL) 。 HAL 為硬件供應商定義了一個標準接口來實現,這使 Android 能夠對較低級別的驅動程序實現不可知論。使用 HAL 允許您在不影響或修改更高級別系統的情況下實現功能。 HAL 實現被打包到模塊中,並由 Android 系統在適當的時候加載。有關詳細信息,請參閱硬件抽象層 (HAL) 。
- Linux 內核。開發設備驅動程序類似於開發典型的 Linux 設備驅動程序。 Android 使用帶有一些特殊添加的 Linux 內核版本,例如 Low Memory Killer(一種更積極地保留內存的內存管理系統)、喚醒鎖(一種
PowerManager
系統服務)、Binder IPC 驅動程序和其他重要的功能用於移動嵌入式平台。這些添加主要用於系統功能,不影響驅動程序開發。您可以使用任何版本的內核,只要它支持所需的功能(例如 binder 驅動程序)。但是,我們建議使用最新版本的 Android 內核。有關詳細信息,請參閱構建內核。
HAL 接口定義語言(AIDL/HIDL)
Android 8.0 重新構建了 Android OS 框架(在一個名為Treble的項目中),以使製造商能夠更輕鬆、更快、更便宜地將設備更新到新版本的 Android。在這個新架構中,HAL 接口定義語言(HIDL,發音為“hide-l”)指定了 HAL 與其用戶之間的接口,從而無需重新構建 HAL 即可替換 Android 框架。在 Android 10 中,HIDL 功能被合併到 AIDL 中。從那時起,HIDL 被棄用,僅由尚未轉換為 AIDL 的子系統使用。
Treble 通過新的供應商接口將供應商實現(由矽製造商編寫的特定於設備的低級軟件)與 Android 操作系統框架分開。供應商或 SOC 製造商構建一次 HAL,並將其放置在設備上的/vendor
分區中;然後,可以將框架在其自己的分區中替換為無線 (OTA) 更新,而無需重新編譯 HAL。
舊版 Android 架構與當前基於 IDL 的架構之間的區別在於供應商接口的使用:
- 在 Android 7.x 及更早版本中,不存在正式的供應商接口,因此設備製造商必須更新大部分 Android 代碼才能將設備遷移到更新版本的 Android:
圖 2.舊版 Android 更新環境 - 在 Android 8.0 及更高版本中,新的穩定供應商接口提供對 Android 硬件特定部分的訪問,因此設備製造商只需更新 Android 操作系統框架即可交付新的 Android 版本,而無需芯片製造商進行額外工作:
圖 3.當前的 Android 更新環境
所有搭載 Android 8.0 及更高版本的新設備都可以利用新架構。為確保供應商實現的前向兼容性,供應商接口由供應商測試套件 (VTS)驗證,類似於兼容性測試套件 (CTS) 。您可以使用 VTS 在舊版和當前 Android 架構中自動執行 HAL 和 OS 內核測試。
架構資源
有關 Android 架構的詳細信息,請參閱以下部分:
- HAL 類型。描述綁定、直通、相同進程 (SP) 和舊版 HAL。
- 愛迪爾。關於 AIDL 的文檔,無論是一般使用還是作為 HAL 接口。
- HIDL(一般) 。包含有關 HAL 與其用戶之間的接口的一般信息。
- HIDL (C++) 。包含有關創建 HIDL 接口的 C++ 實現的詳細信息。
- HIDL(Java) 。包含有關 HIDL 接口的 Java 前端的詳細信息。
- 配置存儲 HAL 。描述用於訪問用於配置 Android 框架的只讀配置項的 API。
- 設備樹覆蓋。提供有關在 Android 中使用設備樹覆蓋 (DTO) 的詳細信息。
- 供應商原生開發工具包 (VNDK) 。描述用於實現供應商 HAL 的供應商專有庫集。
- 供應商接口對象 (VINTF) 。描述聚合有關設備的相關信息並通過可查詢的 API 使該信息可用的對象。
- 適用於 Android 8.0 的 SELinux 。詳細說明 SELinux 更改和自定義。
除了本網站上的資源外,Treble 團隊的成員還發布了Treble:通過在全球分佈的利益相關者的活躍軟件生態系統中創建平衡來實現快速軟件更新。該論文對 ACM 會員免費,非會員可以購買或閱讀摘要。