在 Android 8.0 及更高版本中,较低级别的层被重写以采用新的、更加模块化的架构。运行 Android 8.0 及更高版本的设备必须支持用 HIDL 编写的 HAL,但下面列出了一些例外情况。这些 HAL 可以被绑定或直通。在 Android 11 中,还支持使用 AIDL 编写的 HAL。所有 AIDL HAL 均已绑定。
粘合剂化的 HAL 。以 HAL 接口定义语言 (HIDL) 或 Android 接口定义语言 (AIDL) 表示的 HAL。这些 HAL 取代了早期 Android 版本中使用的传统 HAL 和旧版 HAL。在 Binderized HAL 中,Android 框架和 HAL 使用 Binder 进程间通信 (IPC) 调用相互通信。所有搭载 Android 8.0 或更高版本的设备都必须仅支持绑定化 HAL。
直通 HAL 。 HIDL 包装的传统或旧版 HAL这些 HAL 包装现有的 HAL,并且可以以绑定和相同进程(直通)模式为 HAL 提供服务。升级到 Android 8.0 的设备可以使用直通 HAL。
HAL 模式要求
设备 | 直通 | 粘合剂化 |
---|---|---|
搭载 Android 8.0 启动 | 直通 HAL中列出的 HAL 必须是直通的。 | 所有其他 HAL 均已绑定(包括作为供应商扩展的 HAL)。 |
升级至安卓8.0 | 直通 HAL中列出的 HAL 必须是直通的。 | 绑定 HAL 中列出的 HAL必须进行绑定。 |
供应商映像提供的所有其他 HAL 都可以处于直通或绑定模式。在完全符合 Treble 标准的设备中,所有这些都必须进行绑定。 |
粘合剂化的 HAL
Android 要求在所有 Android 设备上绑定以下 HAL,无论它们是启动设备还是升级设备:
-
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