引子

按照既定的方案,在讲解了 Activity 启动进程今后,接下来咱们就要讲 Activity 的显现进程了。可是 Activity 显现进程会涉及到两个 Hal 模块 Gralloc 和 Hardware Composer,不明白话,去看代码就会很懵逼。

所以咱们就先把 Hal 学了吧。

Android HAL(Hardware Abstract Layer)硬件抽象层,从字面意思能够看出是对硬件设备的抽象和封装,为 Android 在不同硬件设备供给一致的拜访接口。HAL 处于 Android framework 和 Linux kernel driver 之间,HAL 存在的含义有以下 2 个方面:

  • HAL 屏蔽了不同硬件设备的差异,为 Android 供给了一致的拜访硬件设备的接口。不同的硬件厂商遵循 HAL 规范来实现自己的硬件控制逻辑,Framework 开发者不必关心不同硬件设备的差异,只需要按照 HAL 供给的规范接口拜访硬件就能够了。
  • HAL 层协助硬件厂商躲藏了设备相关模块的中心细节。硬件厂商处于利益考虑,不希望揭露硬件设备相关的实现细节;有了HAL层之后,他们能够把一些中心的算法之类的东西的实现放在 HAL 层,而 HAL 层位于用户空间,不属于 linux 内核,和 android 源码一样遵循的是 Apache license 协议,这个是能够不开源的。

Android 经过多年的迭代,HAL 层也阅历了三个阶段:

  • Android 8 以前的 HAL,咱们称之为传统 HAL
  • Android 8 到 Android 10 的 HAL,为了更好的解耦 google 和硬件厂商之间的代码,Android 8 在 HAL 中引入了 HIDL,这个阶段的 HAL,咱们称之为 HIDL HAL
  • Android 11 开始,又引入了 AIDL 来简化 HDIL HAL,咱们称之为 AIDL HAL

googler 你们天天刷 KPI,不考虑下流的打工仔吗?

Android HAL 层概览

Android 8 以前的 HAL,传统 HAL

Android HAL 层概览

在这个阶段,HAL 层以 so 库的方法存在,Framework 层经过 JNI 加载到这些 so 库,然后 Framework 层经过 Binder 服务的方法向 App 供给操作硬件的接口。

Android 8 到 Android 10 的 HIDL HAL

Android HAL 层概览

在这个阶段,HAL 层以进程加 Binder 服务的方法存在,Framework 层经过 HIDL 调用到 HAL 层的 Binder 服务,然后 Framework 层经过 Binder 服务的方法向 App 供给操作硬件的接口。

Android 11 今后的 AIDL HAL

Android HAL 层概览

在这个阶段,HAL 层以进程加 Binder 服务的方法存在,App 直接经过 AIDL 拜访到 HAL 层的 Binder 服务来操作硬件。

总结

google 迭代了 3 类 HAL,实际改动的就是:

  • Hal 层的存在方法
  • 层级之间的通信方法。

参考资料