2. Camera HAL架构演进:从传统HAL到HIDL再到AIDL的演进路线图

Camera HAL(硬件抽象层)是Android系统中连接Framework与底层Camera硬件的关键桥梁。随着Android版本的迭代,HAL的接口定义与通信机制经历了从传统HAL到HIDL,再到AIDL的三次重大演进。每一次演进都旨在解决上一代架构在模块化、稳定性、跨进程通信效率以及系统安全性方面的核心痛点。

核心演进驱动力: 从“硬编码共享库”到“接口定义语言驱动的Binder化服务”,Camera HAL的架构升级本质上是Android系统从单体式向模块化、可插拔、安全隔离的系统架构转型的缩影。

2.1 第一阶段:传统HAL(Legacy HAL)

传统HAL出现在Android 8.0之前,以camera_module_t和camera_device_t结构体为核心。Camera HAL以共享库(.so)的形式直接加载到mediaserver或cameraserver进程中运行。

  • 通信方式: 函数指针直接调用,无跨进程边界。
  • 部署形式: 编译为camera.<vendor>.so,由系统服务dlopen动态加载。
  • 主要问题: 稳定性差(HAL崩溃直接拖垮cameraserver)、版本耦合紧(Framework与HAL必须同步升级)、缺乏标准化接口约束。
架构缺陷: 传统HAL中,OEM厂商的HAL实现与Android Framework运行在同一进程空间,任何内存越界或空指针异常都会导致整个相机服务进程重启,严重影响用户体验。
传统HAL架构(Android 7.x及之前) Camera App Camera Framework (Java) cameraserver / mediaserver 进程 camera.<vendor>.so (Legacy HAL) Kernel Camera Driver 关键特征 • 函数指针直接调用 • 同进程无隔离 • 强耦合、难升级

2.2 第二阶段:HIDL HAL(Treble架构)

Android 8.0引入Project Treble,使用HIDL(HAL Interface Definition Language)将HAL接口标准化。Camera HAL被拆分为ICameraProvider、ICameraDevice、ICameraDeviceSession等HIDL接口,运行在独立的vendor进程中,通过Binderized或Passthrough模式与Framework通信。

对比维度 传统HAL HIDL HAL
接口定义 C结构体 + 函数指针 .hal文件 + 自动生成C++/Java桩代码
进程模型 同进程(cameraserver内) 独立vendor进程(Binderized模式)
版本管理 无版本概念,直接替换so 接口版本化(如@3.4),支持多版本共存
稳定性 HAL崩溃导致系统服务重启 HAL崩溃不影响Framework进程
升级灵活性 Framework与vendor必须同步升级 Framework与vendor可独立升级(VTS保障)
HIDL的关键贡献: 实现了Framework与vendor分区的严格隔离。OEM厂商可以仅更新vendor分区中的HAL实现,而无需等待Google的Framework OTA,大幅缩短了Android版本升级周期。
HIDL HAL架构(Treble时代,Android 8.x - 12) Camera App cameraserver (Framework分区) HIDL Binder (跨进程通信) vendor.camera-provider (vendor分区) ICameraDevice@3.4 ICameraDeviceSession@3.4 Kernel Camera Driver HIDL核心改进 • 接口标准化(.hal文件) • 进程隔离(vendor分区) • 版本化管理 • VTS兼容性测试

2.3 第三阶段:AIDL HAL(现代化演进)

从Android 13开始,Google推动Camera HAL从HIDL向AIDL(Android Interface Definition Language)迁移。AIDL HAL使用与Framework服务相同的Binder机制,统一了系统服务的接口定义语言,降低了维护成本并提升了跨进程通信效率。

  • 统一接口语言: 不再维护两套IDL(HIDL + AIDL),全部统一到AIDL生态。
  • 性能优化: AIDL的Binder传输在序列化/反序列化开销上优于HIDL,尤其适合Camera高吞吐的metadata和buffer传输场景。
  • 稳定性增强: 继承HIDL的进程隔离优势,同时利用AIDL的@VendorFlow、@SystemApi等注解实现更精细的访问控制。
  • 接口简化: 将HIDL中ICameraProvider、ICameraDevice、ICameraDeviceSession等接口合并为更简洁的AIDL接口层次。
关键变化: AIDL HAL不再需要独立的android.hardware.camera.provider HIDL服务注册,而是直接注册为标准的Android AIDL服务,与cameraserver通过ServiceManager进行服务发现。
AIDL HAL架构(Android 13+) Camera App cameraserver (Framework分区) AIDL Binder (统一Binder通信) camera.provider (vendor分区) ICameraProvider.aidl ICameraDevice.aidl ICameraDeviceSession.aidl Kernel Camera Driver AIDL核心优势 • 统一IDL生态 • 更低Binder开销 • 精细访问控制 • 接口层次简化 • ServiceManager注册

2.4 演进路线总结与对比

下表从接口定义、进程模型、性能、维护成本等维度,对三个阶段进行横向对比:

维度 传统HAL HIDL HAL AIDL HAL
Android版本 ≤ 7.x 8.x ~ 12 13+
接口语言 C结构体 .hal (HIDL) .aidl (AIDL)
进程隔离 无(同进程) 有(独立vendor进程) 有(独立vendor进程)
版本管理 无 接口版本化(@3.x) 接口版本化(aidl_api)
Binder开销 无(直接调用) 较高(HIDL Binder) 较低(优化Binder)
维护成本 低(但耦合高) 高(两套IDL) 低(统一AIDL)
升级灵活性 差(必须同步升级) 好(vendor独立升级) 好(vendor独立升级)