Treble架构(解决碎片化问题)

背景

在安卓8.0之前,设备制造商若要更新到新版的成本和难度非常高,导致安卓新版发布后更新率非常低。

为什么难?

安卓系统的代码分为两大类,一类是谷歌维护原生的代码称为Android OS framework代码。另一类是芯片厂商和手机厂商定制的代码,也就是HAL层的代码也称为vendor代码

在安卓8之前,因为HAL是以.so库的形式存在,与framework位于同一进程,导致任何更新都需重新编译、打包HAL层。所以framework与HAL同生共死的状态(耦合在一起)。

如果说安卓系统的framework的代码更新到7.0,那么vendor代码也要升级到7.0才行。

所以treble架构的核心问题就是要把这两部分代码彻底分离

如何做到这一点?

刚刚讲了,framework通过JNI与HAL紧密耦合。

于是安卓将他们分开,让HAL单独一个进程。

那么此时framework和HAL就变成了进程间通信了。

问题又来了,进程间通信消耗资源更多,所以需要进行更多优化。

于是安卓又搞了一个HIDL服务来解决。

AIDL

学习HIDL前,我们先来了解AIDL。

AIDL是一种用于在 Android 应用中实现进程间通信(IPC)的接口定义语言。值得一提的是,应用层与framework层大多数用的就是AIDL进行进程间通信。

  • 通过 AIDL 定义接口,然后在服务端和客户端分别实现该接口。服务端创建 Binder 子类并实现接口方法,客户端通过绑定服务端的 Service 来获取接口实例,从而实现跨进程通信。
  • 当需要在不同应用或进程之间进行高效的数据传递和方法调用时,且对性能要求较高,可优先考虑使用 AIDL。例如,在一个大型的 Android 应用中,不同组件可能运行在不同的进程中,需要通过 AIDL 来实现它们之间的通信。

HIDL(在Android10后也渐渐被新版本的AIDL所取代)

HIDL也是基于Binder来实现的。不过它有着更多优化。新加入了/dev/hwbinder(只用于HIDL通信,framework和vendor,vendor和vendor)和/dev/vndbinder(vendor与vendor进程间AIDL通信)来与原先的/dev/binder(app与framework进程AIDL通信)做分离,减少竞争提高效率。

意义

目标是在无需重新构建 HAL 的情况下替换框架,将 HAL 由供应商或 SOC 制造商构建并放置在设备的 /vendor 分区中,安卓框架则可在自己的分区中通过 OTA 被替换,而无需重新编译 HAL。

作用

1.为framework和vendor提供通信手段。

2.提示framework和vendor通信效率。

       Scatter-gather:减少数据传输中拷贝的次数。

       Shared memory:支持共享内存在进程间传输大数据。

       Fast Message Queue:通过无锁队列技术进行进程间的高效消息传递。

区别于AIDL

使用场景

  • AIDL:主要用于应用程序层,允许不同应用的组件之间进行通信,如 Activity、Service 等应用组件之间的交互。
  • HIDL:主要用于硬件抽象层(HAL),是 Android 系统与硬件设备之间的接口定义语言,用于描述硬件模块的接口,使硬件供应商能够为不同的 Android 设备实现相同的硬件功能。

性能

  • AIDL:基于 Android 的 Binder 机制实现 IPC,虽然能够满足一般的进程间通信需求,但在性能上相对较弱,尤其是在处理大量数据或高频通信时,可能会有性能瓶颈。
  • HIDL:通常被认为比 AIDL 更轻量级且具有更高的性能,它使用了更高效的序列化机制和通信方式,能够更好地支持低功耗和低延迟的硬件设备,适用于对性能要求较高的场景。

VNDK(开发工具包——HAL)

VNDK 是一组专门用于供应商实现其 HAL 的库集合。

  • VNDK-core:是 VNDK 的核心部分,包含了一些基础的、稳定的原生库,这些库通常是与硬件紧密相关的,用于支持常见的硬件功能和性能优化。
  • VNDK-SP:即 VNDK Shared Platform,是一部分预定义的符合条件的 VNDK 库,这些库可以在不同的 Android 版本上保持稳定的 API/ABI,以便供应商能够在多个 Android 版本上重用代码,减少适配工作。
  • LL-NDK:Low Level Native Development Kit,是已知稳定的 Framework 共享库,它们的开发者致力于保持其 API/ABI 稳定性,包括 libEGL.so、libGLESv1_CM.so、libGLESv2.so 等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值