android12/13/14上支持新加入Hidl的hal方法-No more HIDL interfaces can be added to Android. Please use AIDL

Android 10开始不支持创建新的HIDL 在Android 12创建新的HIDL时,会如下错误 [100% 4/4] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja FAILED: out/soong/build.ninja cd "$(dirname "out/soong/.bootstrap/bin/soong_build")" && BUILDER="$PWD/$(basename "out/soong/.bootstrap/bin/soong_buil 阅读详情
AI摘要

本文介绍如何解决在AOSP13中新增HIDL接口时遇到的编译错误,通过修改白名单让自定义HIDL通过编译,并提供相关代码和资料。

背景:

正常新版本比如aosp13,如果说新建一个Hidl想要进行运行,在编译开始时候就会报如下错误:

No more HIDL interfaces can be added to Android. Please use AIDL

即新版本让你不要再使用 HIDL interfaces而是使用AIDL方式

但是很多学员提出,公司和方案上就是要求做hidl,很多时候不是自己可以随意决定,所以那是否高版本就真的不可以进行hidl的开发么?如果这样为啥系统自带了很多hidl是怎么可以通过编译校验的呢?

修改掉编译报错:

先考虑让编译不报错:No more HIDL interfaces can be added to Android. Please use AIDL

那么得寻找哪里有这个报错,具体找到如下:
在这里插入图片描述可以看到具体是在如下目:
system/tools/hidl/build/hidl_interface.go:498

那么来看看这个代码部分
在这里插入图片描述

有一种暴力做法是直接把这个if判断都进行屏蔽

  if !canInterfaceExist(i.ModuleBase.Name()) {
            mctx.PropertyErrorf("name", "No more HIDL interfaces can be added to Android. Please use AIDL.")
            return
    }

但是这样可能会让系统整个版本任何人都可以添加hidl,这样确实不太合理波及范围太大。
那么有什么办法可以只让我们自己hidl通过么,类似白名单东西?

答案当然是有啦,比如android系统自带那些hidl可以编译通过都是因为有个白名单,白名单在哪就是要上面的canInterfaceExist方法:


func canInterfaceExist(name string) bool {
        if strings.HasPrefix(name, "android.") {
                return allAospHidlInterfaces[name]
        }

        return true
}
//最后就是靠这个allAospHidlInterfaces名单来过滤
var allAospHidlInterfaces = map[string]bool{
        "android.frameworks.automotive.display@1.0":         true,
        "android.frameworks.bufferhub@1.0":                  true,
        "android.frameworks.cameraservice.common@2.0":       true,
        "android.frameworks.cameraservice.device@2.0":       true,
        "android.frameworks.cameraservice.device@2.1":       true,
        "android.frameworks.cameraservice.service@2.0":      true,
        "android.frameworks.cameraservice.service@2.1":      true,
        "android.frameworks.cameraservice.service@2.2":      true,
        "android.frameworks.displayservice@1.0":             true,
        "android.frameworks.schedulerservice@1.0":           true,
        "android.frameworks.sensorservice@1.0":              true,
        "android.frameworks.stats@1.0":                      true,
        "android.frameworks.vr.composer@1.0":                true,
        "android.frameworks.vr.composer@2.0":                true,
        "android.hardware.atrace@1.0":                       true,
        "android.hardware.audio@2.0":                        true,

上面是不是就看到了白名单,把android自带的一些hidl都是放入白名单。

其实也可以通过git log方式看看google是怎么新版本添加hidl:
使用git log -p hidl_interface.go即只查看hidl_interface.go这一个文件的提交修改

test@test:~/aosp/system/tools/hidl/build$ git log -p hidl_interface.go
commit 4fa2b9ba79667837c3dbf607ba97d6c01aa31382
Merge: 4a66e183 97e276d4
Author: Roopa Sattiraju <sattiraju@google.com>
Date:   Wed Feb 2 01:22:03 2022 +0000

    Adding min_sdk_version to bluetooth_audio libs for bt apex deps am: e0977657a1 am: ae873b363e am: e50737ac99 am: 97e276d4d8
    
    Original change: https://android-review.googlesource.com/c/platform/system/tools/hidl/+/1932823
    
    Change-Id: I957abe24b2b90159b7bf67a636f0f63e98f1a5f0

commit 4a66e1833adbf7365a6da706f4140debb6b15eb1
Author: Mikhail Naganov <mnaganov@google.com>
Date:   Fri Jan 21 22:17:43 2022 +0000

    Add android.hardware.audio@7.1
    
    This is an exemption from the rule on no new HIDL
    interfaces in T.
    
    Ignore-AOSP-First: Part of an internal topic, will upstream
    Bug: 214426419
    Test: m
    Change-Id: I8615d8a5e1490d74c79ddb3c57594b36d26144d9

diff --git a/build/hidl_interface.go b/build/hidl_interface.go
index 0ea768af..8084c442 100644
--- a/build/hidl_interface.go
+++ b/build/hidl_interface.go
@@ -881,6 +881,7 @@ var allAospHidlInterfaces = map[string]bool{
        "android.hardware.audio@5.0":                        true,
        "android.hardware.audio@6.0":                        true,
        "android.hardware.audio@7.0":                        true,
+       "android.hardware.audio@7.1":                        true,
        "android.hardware.audio.common@2.0":                 true,
        "android.hardware.audio.common@4.0":                 true,
        "android.hardware.audio.common@5.0":                 true,



明显看到 "android.hardware.audio@7.1"也是这样添加的,所以我们也可以把自己hidl这样添加一下。

diff --git a/build/hidl_interface.go b/build/hidl_interface.go
index fa770d15..d73173cc 100644
--- a/build/hidl_interface.go
+++ b/build/hidl_interface.go
@@ -884,6 +884,7 @@ var allAospHidlInterfaces = map[string]bool{
        "android.hardware.audio@6.0":                        true,
        "android.hardware.audio@7.0":                        true,
        "android.hardware.audio@7.1":                        true,
+       "android.hardware.hidltest@1.0":                     true,
        "android.hardware.audio.common@2.0":                 true,
        "android.hardware.audio.common@4.0":                 true,
        "android.hardware.audio.common@5.0":                 true,

这样保存好既可以编译通过了。

其他hidl部分的代码:

代码部分操作建议先参考如下两个链接:
https://blog.youkuaiyun.com/learnframework/article/details/134621556
相关兼容性矩阵manifest等参考aidl的:
https://blog.youkuaiyun.com/learnframework/article/details/134945726

当然我这里也提供相关的直接demo资料哈(仅仅学员可以获取哈)
链接: https://pan.baidu.com/s/1UOrjn6F5r0j_N3gjBKASzA

运行结果

在这里插入图片描述

更多framework技术干货,请关注下面“千里马学框架”

android aidl 框架,适用于 HAL 的 AIDL Android 11 引入了在 Android 中使用 AIDL 实现 HAL 的功能。这样就可以在不使用 HIDL 的情况下实现 Android 的部分代码。我们强烈建议尽量将 HAL 转换为只使用 AIDL(如果上游 HAL 使用 HIDL,则必须使用 HIDL)。如果 HAL 使用 AIDL 在框架组件(例如 system.img 中的组件)和硬件组件(例如 vendor.img 中的组件)... 阅读详情

相关推荐

Android R 添加 HIDL 服务

HAL 接口定义语言(简称 HIDL,发音为“hide-l”)是用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL)。HIDL 允许指定类型和方法调用(会汇集到接口和软件包中)。从更广泛的意义上来说,HIDL 是指用于在可以独立编译的代码库之间进行通信的系统。从 Android 10 开始,HIDL 已废弃,Android 将在所有位置改用 AIDL。 1. 准备目录(vendor/my)及hal接口文件 manifest_hello.xml此文件内容在Android R 高通项目中可

liushaohua2002的博客 4713

HIDL基本知识

梳理HIDL部分知识,总结的不好,大佬请忽略

weixin_43379278的博客 1880

Android系统定制开发:从AOSP源码到可烧录ROM的完整工程实践

Android系统定制开发是基于AOSP源码构建可验证、可调试、可量产的定制化ROM的底层工程能力。其核心在于理解Linux内核调度、ext4分区机制、HAL接口规范(HIDL/AIDL)及Treble架构下的system/vendor/product分区协同逻辑。技术价值体现在突破App层抽象限制,实现硬件级控制——如动态开机Logo、USB外设优先识别、SELinux策略定制等。典型应用场景覆盖IoT固件定制、系统性能深度优化与移动安全研究。本文聚焦从源码同步、编译环境搭建、HAL层改造到fastboo

weixin_33843947的博客 443

Android14之HIDL报错: No more HIDL interfaces can be added to Android. Please use AIDL.(一百九十五)

本篇目的:Android14添加HIDL接口报错: No more HIDL interfaces can be added to Android. Please use AIDL.HIDL(Hardware Interface Definition Language)是Android系统中用于定义硬件接口的一种语言。它是一种基于IDL(Interface Definition Language)的语言,用于描述硬件模块的接口,使得不同的硬件模块能够通过接口进行通信。

Android系统攻城狮 2454

第 36 章:电话与 RIL

无线接口层是 Java 电话框架和厂商调制解调器固件之间的桥梁。早期 RIL 是 C 语言守护进程 rild,通过 Unix 套接字、自定义二进制协议与框架通信。Android12 及以后迁移到稳定 AIDL HAL,把旧的单体 IRadio HIDL 接口拆分为多个按业务域划分的 AIDL 接口。# 列出全部radio‑hal aidl文件# 统计IRadioVoice接口方法数量# 统计IRadioData接口方法数量# 查看语音通话数据结构体Call.aidl。

dengfuma的专栏 264

第 17 章:传感器

Android传感器框架采用三层架构设计,通过标准化的接口和高效的数据传输机制实现全面的传感器支持。框架层(SensorManager)提供应用API,系统服务层(SensorService)负责事件管理和分发,HAL层(ISensors)对接硬件。关键特性包括:传感器融合算法实现虚拟传感器、低延迟的DirectChannel通道、支持动态传感器热插拔、完善的批处理机制优化功耗。Android 17新增冻结进程时暂停事件下发功能,并引入CHRE数据流机制提升nanoapp间数据传输效率。系统通过采样率限制、

dengfuma的专栏 263

CameraService笔记

CameraDevice主要交互逻辑java层调用c++层:提供接口给上层控制操作CameraDevice,主要接口是CameraDeviceBase;调用过程:APP先调用Client,然后通过CameraDeviceBase调用CameraDevice,最后调到HAL;c++层回调java层:回调ResultMetadata和ImageBuffer给上层,主要接口是FrameProcessor和Stream。

u012123938的专栏 1237

使用Android的HIDL+AIDL方式编写从HAL层到APP层的程序

本文转载自:http://www.max-shu.com/blog/?p=1075 先实现HIDL,打通从HAL到framework层 可以把自己的HIDL模块建立在hardware/interfaces/、frameworks/hardware/interfaces/、 system/hardware/interfaces/、 system/libhidl/transport/或者是vendor/<VENDOR>/proprietary/hardware/interfaces/等目录.

chali1314的博客 6065

Android 之永乐大典

如下编译脚本逻辑,这里通过DISABLE_DEXPREORT_CHECK宏控来失能是否进行DEXPREOPT优化检测,如果为true则失能,默认需要进行优化检测,通过过滤所有PRODUCT_PACKAGES安装的应用,即先过滤ALL_DEFAULT_INSTALLED_MODULES宏控指定列表里面的应用,然后在过滤DEXPREOPT_SYSTEMSERVER_ARTIFACTS列表中指定的需要dexpreort优化的系统jar。Android DexOpt前世今生:参考。

qq_27672101的博客 1899

android12系统设置应用添加AIDL接口给外部应用调用

为了给客户应用提供一些非原生的系统相关的接口,于是想着通过AIDL来实现,开始想着在framework下添加一个系统服务实现AIDL的,但是这样开发应用需要提供class.jar,于是干脆在系统设置应用中添加AIDL。

Android系统开发笔记 1448

Android HAL深入探索(7)hidl-gen和hidl2aidl的使用详解

本文将分别介绍hidl-gen和hidl2aidl的基本用法、生成的代码文件、实现原理、区别和联系等内容,让大家更好地理解和使用这两个工具。

我其实什么都不会 2466

Android Google XTS

GMS全称为Google Mobile Service,即谷歌移动服务。GMS是Google开发并推动Android的动力,是Google提供的Mobile Device上的一系列应用服务。

qq_27672101的博客 2187

智能环境感知:STM32多传感器数据融合与报警策略设计

本文详细介绍了基于STM32的多传感器数据融合系统设计,整合DHT11温湿度传感器、MQ-2烟雾检测和光照强度检测模块,通过智能算法实现环境感知与动态报警。系统采用数据滤波、多传感器校验和自适应阈值策略,显著提升监测精度与可靠性,并通过OLED显示屏提供清晰的多级报警界面。

plant的博客 202

Android14 Binder之HIDL与AIDL通信实战课

本专题是基于Pixel5平台Android14源码实战课,深入讲解Binder的HIDL与AIDL源码通信实战。教学设计上,从基础理论到实例操作,循序渐进。内容特色在于深度剖析源码,结合实际开发场景,让晦涩知识具象化。讲解方式生动,通过画图、代码示例及详细注释,帮助学员理解复杂概念。课程的独特优势在于依托Pixel设备与系统版本,提供最实用技术实操,与市场同类课程形成鲜明差异化。学员完成课程后,可以举一反三,能熟练掌握HIDL与AIDL通信和源码定制开发,此类问题不再是难逾越的难题,提升通信效率,为开发高性能Android应用奠定坚实基础,增强在中高端移动开发领域的竞争力。

【机械臂算法】机械臂动力学参数辨识仿真

本文以puma560m机械臂为例子进行动力学参数辨识的讲解,puma560m可以在robotic toolbox中找到,这里以它真实机械臂对他的动力学参数进行辨识。此外这里还有要说的是,机械臂参数辨识其实是一个系统工程,其中和系统的机械、电子、嵌入式都有着很深的联系,并不是仿真这么简单的。

vrijheid的博客 7834

Android编译系统——Android.bp语法介绍(十五)

Android.bp 是 Android 构建系统(Android Build System)中的配置文件,用于描述如何编译和打包项目中的模块。它是用 Blueprint 编写的,其语法类似于 JSON,但专为 Android 编译系统设计,提供了更高效、灵活的模块化管理。

小旭的专栏 939

Android R(11)创建自定义HIDL接口--ICustomHardware(二)

创建自定义HIDL接口–ICustomHardware 1.定义包名 package flagstaff.hardware.custom_hardware@1.0;   HIDL的定义风格总体和cpp是相似的,此处的package也就对应cpp的命名空间,如果是使用cpp来实现后端,那么接口对应的命名空间如下 using flagstaff::hardware::custom_hardware::V1_0::ICustomHardware;   在HIDL接口中,包名的定义规则如下 <packag

flagstaff's blogs 2824

一次请求穿过的六道关卡:微服务基础组件的通信与IO、事件驱动、负载均衡、服务路由、API网关与配置协调

微服务的稳定性往往取决于看不见的基础组件。本文跟随一次下单请求,依次穿过API网关、服务路由、负载均衡与服务通信,再沿事件分支扇出,并从控制面审视配置中心。通信层剖析握手成本、连接复用、epoll与主从Reactor、心跳判活、退避抖动、截止时间与重试预算;事件层讲解编舞与编排、事务发件箱和幂等消费;均衡与路由对比静态与动态算法、路由链、全链路灰度与同区保底;网关讨论过滤器链与限流算法;配置部分给出四类配置、长轮询与共识协调,最后归纳五道防线。文中关键数据均来自可在Java8运行的演示程序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 172万+

Android12之HIDL转AIDL通信(一百三十七)

【代码】Android12之HIDL转AIDL通信。

Android系统攻城狮 4314

YOLOv8首创原创改进:即插即用|创新的轻量化非对称多级压缩LADH检测头

总结而言,本文介绍了一种名为轻量化非对称多级压缩LADH检测头的原创改进,该改进可与YOLOv8无缝适配,并显著提升了检测器的性能。在本文中,我们介绍了一种原创改进的检测头,名为轻量化非对称多级压缩LADH检测头,它可与YOLOv8无缝适配,显著提升了检测器的性能。此外,我们引入了多级压缩的概念,通过在不同的检测层级上应用不同程度的压缩,进一步提升了检测头的轻量化特性。具体而言,我们采用了逐级减少卷积核数量和通道数量的策略,以降低模型的参数量和计算复杂度,同时保持较高的检测精度。

IbcVue的博客 2181

YOLOv8优化:独家创新(SC_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列

独家创新(SC_C_Detect)检测头结构创新,适合科研创新度十足,强烈推荐

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4873

Android 13 或更高版本中添加的相机功能只能通过 AIDL 相机 HAL 接口使用 没有HIDL的事情了

AIDL 和 HIDL 的区别

shangbolei的博客 3296

43_AI短片实战第十六弹:AIGC补充特写镜头——首尾帧衔接与多图抽卡技巧

本文介绍了使用Templa AI平台生成"怪兽爬车"特写镜头并衔接"甩尾摔下"动作的完整流程。首先通过AI生成4张怪兽趴在车顶的特写画面,重点选择展示怪兽与车顶关系的构图(16:9比例)。然后将选定的首帧图与已有尾帧图输入AI,生成7秒左右的过渡视频,实现从"稳定趴车"到"开始摔落"的自然衔接。整个过程展示了单图抽卡策略、首尾帧选择标准,以及如何利用AI生成时间进行其他剪辑任务的并行处理方法。最终产出包括特写首帧图、过渡视频文件和更新后的剪辑项目。

Open 76

Android AIDL的使用与实现(接上一篇HIDL的实现)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录接上一篇HAL C++创建服务,这一篇使用AIDL对其进行通信一、获取jar包,并在项目加载这个jar包二、Client方法的实现2.读入数据总结 接上一篇HAL C++创建服务,这一篇使用AIDL对其进行通信 在上一篇中,创建了一个服务,我们需要使用这个服务,这一篇,就讲解如何使用这个服务。 一、获取jar包,并在项目加载这个jar包 从/out/soong/.intermediates/vendor/mediatek/p.

jamecer的博客 3613

手把手教你写上位机软件(c#、winform)

上位机软件模板

qq_34059233的博客 7万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: android手机电视相框项目-学员做出个bug版本邀请大家review提意见
下一篇: 投屏开发音视频基础知识--h264相关介绍部分
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值