Android14之报错:error:add its name to the whitelist(一百九十四)

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

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

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

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

欢迎关注Android系统攻城狮

1.前言

本篇目的:解决Android14添加binder接口报错问题。

2.报错信息

  • error: static assertion failed due to requirement ‘internal::allowedManualInterface(“android.demo.IMyService”)’: b/64223
    827: Manually written binder interfaces are considered error prone and frequently have bugs. The preferred way to add interfaces is to define an .aidl file to auto-generate the interface. If an interface must be manually written, add its name to the whitelist.
    IMPLEMENT_META_INTERFACE(MyService, “android.demo.IMyService”);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • frameworks/native/libs/binder/include/binder/IInterface.h:116:5: note: expanded from macro ‘IMPLEMENT_META_INTERFACE’
    static_assert(internal::allowedManualInterface(NAME),

3.Binder介绍

  • Binder,全称为Android Binder IPC(Inter-Process Communication),是Android系统中用于进程间通信的一种机制。它是一种基于C/S(客户端/服务器)模式的通信方式,主要由客户端、服务端和Binder驱动组成。Binder机制在Android系统中具有重要的地位,因为它使得不同的进程之间能够高效、安全地进行数据交换。
  • 在Android系统中,进程间通信的需求非常普遍。例如,当一个应用程序需要访问另一个进程中的功能或数据时,它们需要通过某种方式进行通信。Binder机制为这种通信提供了便捷的方式。通过使用Binder,进程间可以像本地代码一样进行通信,而无需关心底层的网络协议或数据序列化等问题。
  • Binder通信机制的主要组成部分如下:
  1. 客户端(Client):发起通信请求的一方。客户端需要知道服务端的接口和方法,以便进行调用。
  2. 服务端(Server):提供功能或数据的一方。服务端需要实现一个或多个接口,并注册到Binder驱动中,以便客户端能够找到并调用它们。
  3. Binder驱动:位于内核空间,负责处理进程间通信的请求。Binder驱动负责将客户端的请求传递给服务端,并将服务端的响应返回给客户端。
  4. 代理(Proxy)和本地方法(Stub):在客户端和服务端之间起到中转作用。代理位于用户空间,负责将客户端的请求发送给Binder驱动;本地方法位于内核空间,负责接收Binder驱动的请求并调用服务端的方法。
    Binder机制的工作流程如下:
  5. 服务端实现一个或多个接口,并注册到Binder驱动中。注册过程中,服务端会创建一个Binder对象,该对象包含了服务端接口的方法列表。
  6. 客户端通过查找Binder对象,找到服务端接口,并调用其中方法。客户端的调用会被代理发送给Binder驱动。
  7. Binder驱动接收到客户端的请求后,查找对应的服务端Binder对象,并将请求传递给它。
  8. 服务端的Binder对象接收到请求后,调用相应的方法,并将结果返回给Binder驱动。
  9. Binder驱动将服务端的响应返回给客户端。
    Binder机制具有以下优点:
  10. 高效:Binder机制基于内存映射,避免了数据在进程间的复制,从而提高了通信效率。
  11. 安全:Binder机制提供了权限控制,只有具有相应权限的进程才能进行通信。
  12. 灵活:Binder机制支持多种类型的数据传输,包括基本数据类型、对象和文件等。
  13. 跨平台:Binder机制可以运行在不同的硬件平台上,具有良好的兼容性。
    总之,Binder机制在Android系统中起着至关重要的作用,它为进程间通信提供了高效、安全的方式。通过对Binder机制的了解,开发者可以更好地掌握Android系统的底层原理,并在开发过程中更加高效地进行进程间通信。

4.解决方案

  • frameworks/native/libs/binder/include/binder/IInterface.h

修改前:

#ifndef DO_NOT_CHECK_MANUAL_BINDER_INTERFACES#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME)                       \static_assert(internal::allowedManualInterface(NAME),               \"b/64223827: Manually written binder interfaces are " \"considered error prone and frequently have bugs. "   \"The preferred way to add interfaces is to define "   \"an .aidl file to auto-generate the interface. If "   \"an interface must be manually written, add its "     \"name to the whitelist.");                            \DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(INTERFACE, NAME)    \

#else#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME)                       \DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(INTERFACE, NAME)    \

#endif

修改后:

#define IMPLEMENT_META_INTERFACE(INTERFACE, NAME)                       \DO_NOT_DIRECTLY_USE_ME_IMPLEMENT_META_INTERFACE(INTERFACE, NAME)    \

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539810.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue手写模拟步骤条

效果图&#xff1a; 如果要使用element的步骤条就需要强行修改样式&#xff0c;参考之前的那篇步骤条。这里我采用手写div 代码&#xff1a; 思路是给最外层的div一个左边框&#xff0c;给里面的step-item设置左边框为图片&#xff0c;通过定位来移动。 <div class"m…

代码训练LeetCode(11)删除有序数组中的重复项II

代码训练(11)LeetCode之删除有序数组中的重复项II Author: Once Day Date: 2024年3月14日 漫漫长路&#xff0c;才刚刚开始… 全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客 参考文章: 80. 删除有序数组中的重复项 II - 力扣&#xff08;LeetCode&#xff…

【深度学习】diffusers 学习过程记录,StableDiffusion扩散原理

教程地址&#xff1a;https://huggingface.co/docs/diffusers/quicktour 文章目录 环境扩散模型噪声残差的作用原理&#xff0c;文字编码如何给入Unetschedulerguidance_scalescheduler.init_noise_sigma训练时候的反向传播 环境 python3.10安装环境&#xff1a; pip install…

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题,报错

CMAKE_CUDA_ARCHITECTURES set to ‘native’多版本与版本号矛盾问题&#xff0c;报错 1. 报错提醒如下图2. 原因本地安装多个cuda版本导致native寻找到多个版本&#xff0c;导致报错3. 具体配置需要根据你的显卡型号来确认 1. 报错提醒如下图 2. 原因本地安装多个cuda版本导致…

C++——类和对象(1)

1. 面向对象和面向过程对比 当涉及到编程范式时&#xff0c;两个主要的方法是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;和面向过程编程&#xff08;Procedural Programming&#xff09;。这两种编程范式在解决问题和组织代码时有着不同…

每周一算法:迭代加深搜索

题目链接 加成序列 题目描述 满足如下条件的序列 X X X&#xff08;序列中元素被标号为 1 、 2 、 3 … m 1、2、3…m 1、2、3…m&#xff09;被称为加成序列&#xff1a; X [ 1 ] 1 X[1]1 X[1]1 X [ m ] n X[m]n X[m]n X [ 1 ] < X [ 2 ] < … < X [ m − 1 ]…

Redis:持久化、线程模型、大 key

Redis持久化方式有什么方式&#xff1f; Redis 的读写操作都是在内存中&#xff0c;所以 Redis 性能才会高&#xff0c;但是当 Redis 重启后&#xff0c;内存中的数据就会丢失&#xff0c;那为了保证内存中的数据不会丢失&#xff0c;Redis 实现了数据持久化的机制&#xff0c…

YOLOV5 部署:QT的可视化界面推理(创建UI,并编译成py文件)

1、前言 之前用YOLOV5 做了一个猫和老鼠的实战检测项目,本章将根据之前训练好的权重进行部署,搭建一个基于QT的可视化推理界面,可以检测图片和视频 本章使用的数据集和权重参照:YOLOV5 初体验:简单猫和老鼠数据集模型训练-CSDN博客 可视化界面如下: 2、安装Pyside6 本…

使用helm部署clickhouse

&#xff08;作者&#xff1a;陈玓玏&#xff09; 前置条件 已安装 Kubernetes 集群&#xff1b; 已安装 Helm 包管理工具。 部署 1 添加 RadonDB ClickHouse 的 Helm 仓库 helm repo add ck https://radondb.github.io/radondb-clickhouse-kubernetes/ helm repo upd…

Figure与OpenAI 联手推出新机器人;荣耀首款「AI PC」即将发布

▶ Figure 与 OpenAI 联手推出新机器人 AI 机器人公司 Figure 发布了他们与 OpenAI 的合作成果&#xff0c;将 OpenAI 的大模型运用在其机器人 Figure 01 上。 据介绍&#xff0c;OpenAI 大模型加持的 Figure 01 机器人现在可以与人全面对话。 OpenAI 模型为机器人提供了高级…

git基础命令(一)

目录 基础概念git statusgit addgit diffgit loggit commit文件可以处于以下三种状态之一远程存储库与本地存储库参考 用于知识记录。后续有新的的内容&#xff0c;例子&#xff0c;将持续更新本文档。 基础概念 工作树&#xff1a;git add 之前&#xff0c;变动内容的文件列表…

微信小程序之tabBar

1、tabBar 如果小程序是一个多 tab 应用&#xff08;客户端窗口的底部或顶部有 tab 栏可以切换页面&#xff09;&#xff0c;可以通过 tabBar 配置项指定 tab 栏的表现&#xff0c;以及 tab 切换时显示的对应页面。 属性类型必填默认值描述colorHexColor是tab 上的文字默认颜色…