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 层的存在方式
  • 层级之间的通信方式。

参考资料

相关推荐
应用市场4 小时前
离线小游戏做“每日挑战”:日期当随机种子,整局存成 JSON,再加一个“我不是机器人”
android·kotlin·游戏开发
一铭111994 小时前
海豹办公 1.9.15 跨端办公软件实践 文档兼容 Access 数据库与移动 WebView 排错
android·数据库·electron·开源软件·access
geats人山人海5 小时前
java 7异常
android·java·开发语言
2601_962071006 小时前
Kimi K3 vs DeepSeek V4-Pro实测对比:2026年同一入口十道题,耗时与token消耗差在哪
android·java·数据库
右手吉他7 小时前
高通平台IA APN问题分析之二
android·物联网
夜雪一千8 小时前
MySQL 自增 ID 的底层原理与坑点
android·mysql·adb
不浪费一个字节8 小时前
一个纯 Python 实现的 APK 解析与设备操控工具箱
android
itmigrate8 小时前
PHP 导出大 CSV 时内存溢出的一次排查
android·开发语言·php
hai_android8 小时前
LiveEventBusCore 跨 Activity 通讯源码解析
android·kotlin·android jetpack
维克兜率天9 小时前
【维克】统计套利建模:从因子到信号的完整流程
android·开发语言·python·算法·kotlin