Android HAL 层概览

引子

按照既定的计划,在讲解了 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 8 以前的 HAL,传统 HAL

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

Android 8 到 Android 10 的 HIDL HAL

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

Android 11 以后的 AIDL HAL

在这个阶段,HAL 层以进程加 Binder 服务的形式存在,App 直接通过 AIDL 访问到 HAL 层的 Binder 服务来操作硬件。

总结

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

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

参考资料

相关推荐
似霰28 分钟前
传统 Hal 开发笔记6----App 访问硬件服务
android·framework·hal
爱装代码的小瓶子1 小时前
【c++知识铺子】封装map和set(详细版)
android·java·c++
私人珍藏库1 小时前
AutoGLM无需豆包手机,让AI自动帮你点外卖-刷视频
android·ai·智能手机·工具·软件·辅助·autoglm
孤舟簔笠翁2 小时前
【Android驱动14】Android系统Crash工具使用方法和分析
android
帅得不敢出门3 小时前
MTK Android11 APP调用OTA升级
android·java·开发语言·framework
2501_915909063 小时前
苹果应用加密方案的一种方法,在没有源码的前提下,如何处理 IPA 的安全问题
android·安全·ios·小程序·uni-app·iphone·webview
用户2018792831673 小时前
Android App 换肤原理:用 "装修小房子" 故事浅谈
android
百锦再3 小时前
与AI沟通的正确方式——AI提示词:原理、策略与精通之道
android·java·开发语言·人工智能·python·ui·uni-app
2501_915909063 小时前
iOS 项目中常被忽略的 Bundle ID 管理问题
android·ios·小程序·https·uni-app·iphone·webview
dora3 小时前
如何防防防之防抓包伪造请求
android·安全