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.mzph.cn/news/751520.shtml

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

相关文章

juc(3)

进程 程序由指令和数据组成,到哪有些指令需要执行,有些要读写,句必须将指令加载到cpu,数据加载到内存,再指令运行过程中还要用到磁盘,网络等设备.进程就是用来加载指令.管理内存,管理io的 当一个程序被运行,从磁盘加载这个程序的代码到内存,这时就开启了一个进程 进程可以视…

Elasticsearch 索引库操作 文档操作

索引库就类似数据库表,mapping映射就类似表的结构。要向es中存储数据,必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束,常见的mapping属性包括: type: 字段数据类型,常见的简…

MySQL语法分类 DQL(2)条件查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

python绘制双列堆积柱形图

python绘制单列堆积柱形图 : python绘制单列堆积柱形图-CSDN博客 一、代码 import numpy as np import matplotlib.pyplot as pltN 10 menMeans np.array([[20, 35], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25]…

音视频实战--自定义输入输出IO

avio_alloc_context函数 /** * projectName 07-05-decode_audio * brief 解码音频&#xff0c;主要的测试格式aac和mp3 * author Liao Qingfu * date 2020-01-16 */ #include <stdio.h> #include <stdlib.h> #include <string.h>…

HAProxy高性能负载均衡器

一、HAProxy基础知识 &#xff08;一&#xff09;HAProxy概述 HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器&#xff0c;它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡&#xff0c;还能应用于数据…

sui move开发实战-dao(2)

引言 经过之前的学习&#xff0c;我准备进行实战开发一个简单的dao项目demo&#xff0c;实现一个去中心化自治组织&#xff0c;用于管理共享资金、社区任务、提案和投票等功能&#xff0c;本篇文章分享了初始化模块&#xff0c;权限和社区任务模块。 初始化 fun init(witness…

【matlab】如何批量修改图片命名

【matlab】如何批量修改图片命名 (●’◡’●)先赞后看养成习惯😊 假如我的图片如下,分别是1、2、3、4、5的命名 需求一:假如现在我需要在其后面统一加上_behind字符串,并且保留原命名,同时替换掉原先的图片,也就是不copy新的一份,直接在原文件夹中处理,我们可以进行…

【TypeScript系列】Iterators 和 Generators

Iterators 和 Generators 当一个对象实现了Symbol.iterator属性时&#xff0c;我们认为它是可迭代的。 一些内置的类型如Array&#xff0c;Map&#xff0c;Set&#xff0c;String&#xff0c;Int32Array&#xff0c;Uint32Array等都已经实现了各自的Symbol.iterator。 对象上的…

基于springboot+vue的大学生兼职系统的设计与实现(源码+论文)

作者主页&#xff1a;Java程序员老张 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;…

Java零基础入门-LinkedHashMap集合

一、本期教学目标 学习LinkedHashMap集合的概念及特点。学习LinkedHashMap存储结构。学习LinkedHashMap集合常用方法及示例代码演示。 二、正文 1、概述 我们学习了map接口之HashMap集合&#xff0c;今天我们要来学习map接口的另一个实现类-LinkedHashMap&#xff0c;不知道…

算法思想总结:滑动窗口算法

创作不易&#xff0c;感谢三连 一.长度最小的数组 . - 力扣&#xff08;LeetCode&#xff09;长度最小的数组 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int lenINT_MAX,nnums.size(),sum0;//len必须要给一个很大的数&#xf…

go rabbitmq 操作

go rabbitmq 操作 go 依赖包github.com/streadway/amqp docker快速部署 docker pull rabbitmq:management docker run -d rabbitmq:management # 先跑一个看看监听了哪些端口 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq #5672 go 程序连接&#x…

Java-并发编程--ThreadLocal、InheritableThreadLocal

1.ThreadLocal 作用 作用&#xff1a;为变量在线程中都创建副本&#xff0c;线程可访问自己内部的副本变量。该类提供了线程局部 (thread-local) 变量&#xff0c;访问这个变量&#xff08;通过其 get 或 set 方法&#xff09;的每个线程都有自己的局部变量&#xff0c;它独立…

CleanMyMac X2024免费绿色版安装包下载

在当今这个数字化时代&#xff0c;我们的生活和工作中离不开电脑&#xff0c;尤其是对于Mac用户而言&#xff0c;更是需要一个轻巧、快捷的解决方案来保持电脑的高效运转。CleanMyMac X正是为此而生&#xff0c;它将帮助您清理Mac中的垃圾文件、优化系统性能&#xff0c;让您的…

前台于后台项目

一&#xff1a;技术栈 前台&#xff1a;vue3element plus 后台&#xff1a;reactant desgin 二&#xff1a;项目中的问题&#xff1a; 多人协同开发导致样式冲突 ui框架中组件的使用 ui框架中组件样式的修改 精度缺失问题 框架的使用 三&#xff1a;解决方案&#xff1a; …

Python电梯楼层数字识别

程序示例精选 Python电梯楼层数字识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python电梯楼层数字识别》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应…

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器&#xff0c;由意法半导体公司开发和生产。STM32具有丰富的外设和功能&#xff0c;适用于各种应用场合&#xff0c;如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

用 C 语言模拟 Rust 的 Option 枚举类型

Rust 的 Option<i32> 类型是一个枚举类型&#xff0c;它表示可能有一个 i32 类型的值&#xff0c;或者没有值&#xff08;即 None&#xff09;。这在 Rust 中是一个常见的模式&#xff0c;用于处理可能不存在的值&#xff0c;避免了使用裸指针或引入 NULL 的概念。 在 C…