<div id="post_detail">
<div class="post">
<h2>
<a id="cb_post_title_url" href="https://www.cnblogs.com/blogs-of-lxl/p/8656286.html">Android : android 8.0 audio 接口分析</a>
</h2>
<div id="cnblogs_post_body" class="blogpost-body" deep="3"><h4 id="1hidl-的概念" style="margin: 8px 0px 16px; padding: 0px; color: #4f4f4f; text-transform: none; line-height: 28px; text-indent: 0px; letter-spacing: normal; font-family: -apple-system, 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun; font-size: 20px; font-style: normal; font-weight: bold; word-spacing: 0px; white-space: normal; box-sizing: border-box; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;"><strong>1、HIDL 的概念</strong></h4>
HIDL 读作 hide-l,全称是 Hardware Interface Definition Language。它在 Android Project Treble 中被起草,在 Android 8.0 中被全面使用,其诞生目的是使 Android 可以在不重新编译 HAL 的情况下对 Framework 进行 OTA 升级。
使用 HIDL 描述的 HAL 描述文件替换旧的用头文件描述的 HAL 文件的过程称为 * HAL 的 binder 化(binderization)。所有运行 Android O 的设备都必须只支持 binder 化后的 HAL 模块。
已发布的 HIDL package包位于 Android 代码库的hardware/interfaces/
或vendor/<vendorName>
目录下。使用 HDIL 描述的 HAL 接口存放在这些目录下的.hal
文件中。比如我们可以在hardware/interfaces/audio/2.0/
目录下找到部分 Audio HAL 描述文件,如下:
Android.bp Android.mk IDevice.hal IDevicesFactory.hal IPrimaryDevice.hal IStream.hal IStreamIn.hal IStreamOutCallback.hal IStreamOut.hal types.hal
另外在frameworks/av/media/下多了个文件夹 libaudiohal :
Android.mk DeviceHalLocal.h DevicesFactoryHalLocal.h EffectHalHidl.h EffectsFactoryHalLocal.h StreamHalLocal.h ConversionHelperHidl.cpp DevicesFactoryHalHidl.cpp EffectBufferHalHidl.cpp EffectHalLocal.cpp HalDeathHandlerHidl.cpp ConversionHelperHidl.h DevicesFactoryHalHidl.h EffectBufferHalHidl.h EffectHalLocal.h include DeviceHalHidl.cpp DevicesFactoryHalHybrid.cpp EffectBufferHalLocal.cpp EffectsFactoryHalHidl.cpp Strea