在 Android 8.0 及更高版本中,較低級別的層被重新編寫以採用新的、更加模塊化的架構。運行 Android 8.0 及更高版本的設備必須支持以 HIDL 編寫的 HAL,但下面列出了一些例外情況。這些 HAL 可以綁定或直通。在 Android 11 中,還支持使用 AIDL 編寫的 HAL。所有 AIDL HAL 都是綁定的。
綁定的 HAL 。 HAL 以 HAL 接口定義語言 (HIDL) 或 Android 接口定義語言 (AIDL) 表示。這些 HAL 取代了早期 Android 版本中使用的傳統 HAL 和遺留 HAL。在 Binderized HAL 中,Android 框架和 HAL 使用 Binder 進程間通信 (IPC) 調用相互通信。所有搭載 Android 8.0 或更高版本的設備必須僅支持綁定化 HAL。
直通 HAL 。 HIDL 包裝的傳統 HAL 或舊版 HAL這些 HAL 包裝現有的 HAL,並且可以在綁定和相同進程(直通)模式下為 HAL 提供服務。升級到 Android 8.0 的設備可以使用直通 HAL。
HAL 模式要求
設備 | 透傳 | 粘合劑化 |
---|---|---|
使用 Android 8.0 啟動 | 直通 HAL中列出的 HAL 必須是直通的。 | 所有其他 HAL 都已綁定(包括作為供應商擴展的 HAL)。 |
升級到安卓8.0 | 直通 HAL中列出的 HAL 必須是直通的。 | Binderized HAL中列出的 HAL 必須經過綁定。 |
供應商映像提供的所有其他 HAL 都可以處於直通或綁定模式。在完全兼容 Treble 的設備中,所有這些都必須綁定。 |
綁定 HAL
Android 要求在所有 Android 設備上綁定以下 HALS,無論它們是啟動設備還是升級設備:
-
android.hardware.biometrics.fingerprint@2.1
。替換 Android 8.0 中不再存在的fingerprintd
。 -
android.hardware.configstore@1.0
。 Android 8.0 中的新功能。 -
android.hardware.dumpstate@1.0
。此HAL 提供的原始接口無法填充並更改。因此,必須在給定設備上重新實現dumpstate_board
(這是一個可選的 HAL)。 -
android.hardware.graphics.allocator@2.0
。需要在 Android 8.0 中進行綁定,這樣文件描述符就不必在受信任和不受信任的進程之間共享。 -
android.hardware.radio@1.0
。替換rild
提供的接口,它存在於自己的進程中。 -
android.hardware.usb@1.0
。 Android 8.0 中的新功能。 -
android.hardware.wifi@1.0
。 Android 8.0 中的新功能,替換了加載到system_server
中的舊版 Wi-Fi HAL 庫 android.hardware.wifi.supplicant@1.0
。現有wpa_supplicant
進程上的 HIDL 接口。
直通 HAL
Android 要求以下 HAL 在所有 Android 設備上都處於直通模式,無論它們是啟動設備還是升級設備:
-
android.hardware.graphics.mapper@1.0
。將內存映射到它所在的進程中。 -
android.hardware.renderscript@1.0
。在同一進程中傳遞項目(相當於openGL
)。
上面未列出的所有 HAL 都必須為啟動設備綁定。
同進程 HAL
同一進程 HAL (SP-HAL) 始終在使用它們的同一進程中打開。它們包括所有未在 HIDL 中表達的 HAL 以及一些未綁定的 HAL。 SP-HAL 集中的成員資格僅由 Google 控制,無一例外。
SP-HAL 包括以下內容:
-
openGL
-
Vulkan
-
android.hidl.memory@1.0
(Android系統提供,始終直通) -
android.hardware.graphics.mapper@1.0
android.hardware.renderscript@1.0