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

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀

优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

1.前言

本篇目的:Android14添加HIDL接口报错: No more HIDL interfaces can be added to Android. Please use AIDL.

2.报错信息

  • FAILED: out/soong/bp2build_files_marker

    cd “KaTeX parse error: Expected 'EOF', got '&' at position 49: …soong_build")" &̲& BUILDER="PWD/KaTeX parse error: Expected 'EOF', got '&' at position 50: …soong_build")" &̲& cd / && env -…BUILDER” --top “$TOP” --soong_out “out/soong” --out “out” --bp2build_marke

  • r out/soong/bp2build_files_marker --globListDir bp2build_files --globFile out/soong/globs-bp2build_files.ninja -t -l - - out/.module_paths/Android.bp.list --available_env out/soong/soong.environment.available --used_env out/soong/soong
  • .environment.used.bp2build_files Android.bp

    error: hardware/interfaces/led/1.0/Android.bp:4:9: module “android.hardware.xxx@1.0_interface”: name: No more HIDL interfaces can be added to Android. Please use AIDL.

  • 17:51:09 soong bootstrap failed with: exit status 1
  • failed to build some targets (4 seconds) ####

    3.Android HIDL接口介绍

    • HIDL(Hardware Interface Definition Language)是Android系统中用于定义硬件接口的一种语言。它是一种基于IDL(Interface Definition Language)的语言,用于描述硬件模块的接口,使得不同的硬件模块能够通过接口进行通信。HIDL的出现,主要是为了解决硬件模块之间通信的兼容性和效率问题。
    • HIDL通过定义硬件模块的接口,将硬件实现细节抽象出来,使得硬件模块之间的通信不再直接依赖具体的硬件实现,而是通过接口进行。这样,硬件模块的开发和维护变得更加独立和简单,同时也提高了硬件模块的可移植性和可复用性。
    • HIDL的编译过程是将HIDL源文件编译成Java源文件,这些Java源文件可以被Android系统中的服务使用。这些服务通过Java代码实现硬件模块之间的通信,从而实现硬件模块的功能。
    • HIDL的优点在于,它提供了一种标准化的硬件接口定义方式,使得硬件模块之间的通信变得更加简单和高效。同时,HIDL也提高了硬件模块的可移植性和可复用性,使得硬件开发变得更加灵活和便捷。
    • 在Android系统中,HIDL主要用于定义和实现硬件模块之间的接口,例如音频、摄像头、传感器等。通过使用HIDL,Android系统能够更好地管理和控制各种硬件模块,提高了系统的稳定性和性能。

      4.报错原因

      从Android 10开始,HIDL 已废弃,Android 将在所有位置改用AIDL。

      所以,Android10以后版本使用AIDL接口即可。

      5.官方说明

      6.第二种解决方案(直接开倒车)

      # emacs system/tools/hidl/build/hidl_interface.go

      func hidlInterfaceMutator(mctx android.LoadHookContext, i *hidlInterface) {+    // if !canInterfaceExist(i.ModuleBase.Name()) {+    //  mctx.PropertyErrorf("name", "No more HIDL interfaces can be added to Android. Please use AIDL.")
      +    //  return
      +    // }
      .....
      }; 

      删除以上代码可以解除Android10以后无法添加HIDL的限制.