Android系統架構包含以下組件:

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