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

news2024/12/28 10:23:24

简介: 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.coloradmin.cn/o/1517287.html

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

相关文章

如何使用“ubuntu移动文件、复制文件到其他文件夹“?

一、移动文件到其他文件夹命令 mv node_exporter-1.5.0.linux-amd64.tar.gz /usr/local/etc/prometheus 二、复制文件到其他文件夹命令 cp node_exporter-1.5.0.linux-amd64.tar.gz /home/master

4种小众的能力,帮你更好地适应未来

新年伊始,又是一个全新的开始。 未来的社会究竟需要什么样的能力?这已经是一个很老的话题,已经有许许多多讨论了。但这其中,可能有一些是容易被人忽略的,或者不容易被注意到的。 我想跟你一起分享,我对这个…

vue 如何实现手机横屏功能

功能背景 有些需求需要手动实现横屏功能,比如点击一个横屏的图标将整个页面90度翻转,再点击退出横屏回到正常页面。 实现思路 一拿到这个需求很可能就被吓到了,但简单来说,就是点击横屏按钮跳转一个新页面,通过 cs…

CSS 3

CSS3现状 在CSS2的基础上新增(扩展)样式移动端支持优于PC端不断改进中应用相对广泛 1.CSS3属性选择器 选择符简介E[att]选择具有att属性的E元素E[att"val"]选择具有att属性且属性值等于val的E元素E[att^"val"]匹配具有att属性、且具有以val开头的E元素E…

[数据集][目标检测]零售柜零食检测数据集VOC+YOLO格式5422张113类

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):5422 标注数量(xml文件个数):5422 标注数量(txt文件个数):5422 标注…

在vite(vue)项目中使用mockjs

在vite(vue)项目中使用mockjs 在开发环境使用 1、首先创建vite项目 yarn create vite选择vue,选择默认的js版本 2、进入项目文件夹中执行yarn安装依赖 yarn add axios mockjs vite-plugin-mock3、安装axios、mockjs及插件 yarn add axio…

适用于系统版本:CentOS 6/7/8的基线安全检测脚本

#!/bin/bash #适用于系统版本:CentOS 6/7/8 echo "----------------检测是否符合密码复杂度要求----------------" #把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊…

Tensorflow2.笔记 - 单层感知机(单输出,多输出)Single Layer Perceptron

本笔记主要记录单层感知机的相关内容,包括单层单输出,和单层多输出。 import tensorflow as tf import numpy as nptf.__version__#单层单输出感知机,逻辑回归很类似,主要区别就是激活函数和损失函数不同 #单层感知机的激活函数通…

一键切割,激发无限创意:体验全新图片批量编辑器

在数字创意的时代,图片编辑成为了表达个性和创造力的关键。然而,传统的图片编辑工具常常让人望而生畏,复杂的操作和高门槛的技术要求使得许多人望而却步。现在,我们为您带来一款全新的图片批量编辑器,只需一键切割&…

【Algorithm】动态规划和递归问题:动态规划和递归有什么区别?如何比较递归解决方案和它的迭代版本?

【Algorithm】动态规划和递归问题:动态规划和递归有什么区别?如何比较递归解决方案和它的迭代版本? 1. 动态规划(Dynamic Programming,DP)和递归定义及优缺点1.1 递归 (Recursion)定义及优缺点1.2 动态规划 (Dynamic Programming)定义及优缺点2. 动态规划(DP)和递归的特…

界面控件DevExpress ASP.NET Scheduler - 助力快速交付个人信息管理系统(下)

DevExpress ASP. NET Scheduler组件能完全复制Microsoft Outlook Scheduler的样式和功能,具有日、周、月和时间轴视图,并包括内置的打印支持,因此用户可以在尽可能短的时间内交付全功能的个人信息管理系统。在上文中(点击这里回顾…

蓝牙耳机链接电脑莫名奇妙关机问题(QQ浏览器)

蓝牙耳机连接电脑听歌的时候,如果听歌软件是暴风影音,或者其它播放器,蓝牙不会自动关机,但如果是QQ浏览器,蓝牙耳机经常莫名其妙的关机,时间间隔忽长忽短,没有规律,解决办法就是重启…

uniapp移动端 IOS系统下无法与webview通信

不知道有没有人遇到过这个问题 我的页面嵌套了一个webview(文件位于项目的hybrif/html)目录下 使用evalJS与webview进行通信 代码如下 在安卓里运行是没问题的,但在苹果手机上一直无法通信 连接真机,打印evalJS是个方法&#xf…

Spring boot创建第一个项目

作者简介: zoro-1,目前大二,正在学习Java,数据结构,spring等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Spring boot创建第一个项目 sp…

idea Springboot 数码商城系统LayUI框架开发mysql数据库web结构java编程计算机网页

一、源码特点 springboot 数码商城系统是一套完善的完整信息系统,结合mvc框架和LayUI框架完成本系统springboot spring mybatis ,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整…

CVE-2024-27199 JetBrains TeamCity 身份验证绕过漏洞2

漏洞简介 TeamCity Web 服务器中发现了第二个身份验证绕过漏洞。这种身份验证旁路允许在没有身份验证的情况下访问有限数量的经过身份验证的端点。未经身份验证的攻击者可以利用此漏洞修改服务器上有限数量的系统设置,并泄露服务器上有限数量的敏感信息。 项目官网…

KubeSphere 社区双周报|2024.02.29-03.14

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2024.02.29-03.14…

uniapp微信小程序_自定义交费逻辑编写

一、首先看最终效果 先说下整体逻辑,选中状态为淡紫色,点击哪个金额,充值页面上就显示多少金额 二、代码 <view class"addMoney"><view class"addMoneyTittle">充值金额</view><view class"selfaddmoney" :class"{…

uniapp微信小程序_拍照从相册选择

userImg() {let that thisuni.chooseMedia({count: 1,mediaType: [image, video],sourceType: [album, camera],maxDuration: 30,camera: back,success(res) {console.log(res.tempFiles[0].tempFilePath)that.imagUrl res.tempFiles[0].tempFilePath}})}, 直接调用api即可,注…

Apache Paimon 的 CDC Ingestion 概述

CDC Ingestion 1&#xff09;概述 Paimon支持schema evolution将数据插入到Paimon表中&#xff0c;添加的列将实时同步到Paimon表&#xff0c;并且无需重启同步作业。 目前支持的同步方式如下&#xff1a; MySQL Synchronizing Table: 将MySQL中的一个或多个表同步到一个Pa…