Android14之Binder调试(二百一十一)

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

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀
优质视频课程:AAOS车载系统+AOSP14系统攻城狮入门实战课原创干货持续更新中……】🚀

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

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

欢迎关注Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

    • 🌻1.前言
    • 🌻2.Binder介绍
    • 🌻3.调试步骤
      • 🐓3.1 添加日志
      • 🐓3.2 编译与在设备运行

🌻1.前言

本篇目的:基于Android14源码,如何对Binder进行调试

🌻2.Binder介绍

  • Binder,全称为Android Binder IPC(Inter-Process Communication),是Android系统中用于进程间通信的一种机制。它是一种基于C/S(客户端/服务器)模式的通信方式,主要由客户端、服务端和Binder驱动三个部分组成。Binder机制在Android系统中具有重要的意义,因为它使得不同的进程可以安全、高效地共享数据和资源,从而实现了应用程序之间的协作和通信。
  • Binder机制的架构可以分为三个层次:客户端、服务端和Binder驱动。客户端和服务端通过Binder接口进行通信,而Binder驱动则负责在内核空间处理Binder对象的操作和数据传输。
  • 客户端是发起通信的一方,它通过调用服务端提供的接口来请求服务。客户端和服务端之间的通信是通过Binder对象进行的,Binder对象封装了通信过程中所需的数据和方法。客户端通过查询Binder对象的方法列表来了解服务端提供的接口,然后根据接口定义的参数和返回值与服务端进行交互。
  • 服务端是提供服务的一方,它通过实现Binder接口中的方法来定义可被客户端调用的服务。服务端需要注册自己的Binder对象到系统服务中,这样客户端才能通过Binder接口找到并调用服务端的方法。服务端在接收到客户端的请求后,可以通过Binder对象与客户端进行数据交换,并返回处理结果。
  • Binder驱动是整个机制的核心,它位于内核空间,负责处理Binder对象的操作和数据传输。Binder驱动主要完成以下功能:
  1. 创建和管理Binder对象:Binder驱动负责创建Binder对象,并维护对象的唯一标识和引用计数。当服务端注册Binder对象时,驱动会将其添加到系统中,以便客户端能够找到并使用。
  2. 处理客户端和服务端的通信请求:当客户端发起通信请求时,Binder驱动会根据请求中的目标Binder对象ID,将请求传递给对应的服务端。服务端处理完请求后,将结果通过Binder驱动返回给客户端。
  3. 支持跨进程数据传输:Binder驱动实现了对跨进程数据传输的支持,它将客户端和服务端的数据封装在Binder对象中,然后在内核空间进行传输。这样可以有效地减少用户空间和内核空间之间的数据拷贝,提高通信效率。
  4. 保障通信安全:Binder驱动支持权限控制,可以确保只有授权的进程才能访问特定的服务。此外,驱动还提供了数据加密和签名机制,以保护通信过程中的数据安全和隐私。
  • 总之,Binder机制在Android系统中发挥着至关重要的作用,它为应用程序之间的通信提供了高效、安全和便捷的途径。通过Binder机制,Android系统能够实现进程间的协作和资源共享,从而提高了系统的整体性能和用户体验。

🌻3.调试步骤

🐓3.1 添加日志

sp<IInterface>  IBinder::queryLocalInterface(const String16& )
{
  ALOGE("%s, %s(), line = %d\n",__FILE__,__FUNCTION__,__LINE__);
  return nullptr;
}

🐓3.2 编译与在设备运行

# cd frameworks/native/libs/binder
# mm -j12

# adb push libbinder.so /system/lib64

注意:不用重启设备。

  • 直接运行服务端和客户端设备即可。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器数据恢复—服务器正常断电重启后raid信息丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌DL380 G4服务器&#xff0c;服务器通过该服务器品牌smart array控制器挂载了一台国产的磁盘阵列&#xff0c;磁盘阵列中有一组由14块SCSI硬盘组建的RAID5。服务器安装LINUX操作系统&#xff0c;搭建了NFSFTP&#xff0c;作为内部文件…

【LeetCode】【1】两数之和(1141字)

文章目录 [toc]题目描述样例输入输出与解释样例1样例2样例3 提示进阶Python实现哈希表 个人主页&#xff1a;丷从心 系列专栏&#xff1a;LeetCode 刷题指南&#xff1a;LeetCode刷题指南 题目描述 给定一个整数数组nums和一个整数目标值target&#xff0c;请在该数组中找出…

传感器通过Profinet转Modbus网关与PLC通讯在生产线的应用

Profinet转Modbus&#xff08;XD-MDPN100/300&#xff09;网关可视作一座桥梁&#xff0c;能够实现Profinet协议与Modbus协议相互转换&#xff0c;支持Modbus RTU主站/从站&#xff0c;并且Profinet转Modbus网关设备自带网口和串口&#xff0c;既可以实现协议的转换&#xff0c…

【Java基础】IO流(4) —— 转换流、打印流

【Java基础】IO流(1) —— 简介 【Java基础】IO流(2) —— 字符流 【Java基础】IO流(3) —— 字节流 【Java基础】IO流(4) —— 转换流、打印流 【Java基础】IO流(5) —— 序列流、内存流 【Java基础】IO流(6) —— 随机访问文件流、数据流 转换流 InputStreamReader 是字节输…

VUE H5字体在安卓手机偏上解决

安卓手机展示样式,数字偏上,展示效果如图: 项目内添加新字体,引用新字体 vue 项目需要引入字体的话, 可以移步到这篇文章(无需下载依赖包)Vue3中引入外部自定义字体 项目文件assets内创建font文件夹, 粘贴你想用的字体, 创建对应的css文件; scss代码: font-face {/* 自定义的…

前端学习-day08

文章目录 01-相对定位02-绝对定位03-绝对定位居中04-固定定位05-堆叠顺序06-CSS精灵-基本使用07-案例-京东服务08-字体图标10.垂直对齐方式11-过度12-透明度13-光标类型14-轮播图 01-相对定位 <!DOCTYPE html> <html lang"en"> <head><meta ch…

k8s 声明式资源管理

一、资源配置清单的管理 1.1 查看资源配置清单 声明式管理方法&#xff1a; 1.适合于对资源的修改操作 2.声明式资源管理方法依赖于资源配置清单文件对资源进行管理 资源配置清单文件有两种格式&#xff1a;yaml&#xff08;人性化&#xff0c;易读&#xff09;&#xff0c;j…

高性能负载均衡的分类及架构分析

如何选择与部署适合的高性能负载均衡方案&#xff1f; 当单服务器性能无法满足需求&#xff0c;高性能集群便成为提升系统处理能力的关键。其核心在于通过增加服务器数量&#xff0c;强化整体计算能力。而集群设计的挑战在于任务分配&#xff0c;因为无论在哪台服务器上执行&am…

【C++初阶】--- C++入门(上)

目录 一、C的背景及简要介绍1.1 什么是C1.2 C发展史1.3 C的重要性 二、C关键字三、命名空间2.1 命名空间定义2.2 命名空间使用 四、C输入 & 输出 一、C的背景及简要介绍 1.1 什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&…

看看汉朝有庙号的七位皇帝,你就知道含金量有多高?

汉朝拥有庙号的七位皇帝你们知道是谁吗&#xff1f; 相比于后世皇帝人手一个庙号的景象&#xff0c;汉朝皇帝庙号的使用是相当严谨的。很多原本拥有庙号的皇帝&#xff0c;最后因为功绩不多或者无功无德&#xff0c;最终被废除庙号。因此&#xff0c;汉朝谨遵“祖有功宗有德”…

LeetCode:78.子集

解答 class Solution:def subsets(self, nums: List[int]) -> List[List[int]]:res[[]]for i in nums:res[[i]num for num in res]return res代码解释 这段代码定义了一个名为Solution的类&#xff0c;并在其中定义了一个名为subsets的方法。该方法接受一个整数列表nums作…

Easy-poi 和 EasyExcel 选型

目录 共同点地址如何选 共同点 easy-poi 和 easyexcel 都是基于 apache poi 进行二次开发的&#xff0c;底层都是依赖的 apache poi使用简单&#xff0c;都可以通过简单的注解实现excel文件的导入导出 地址 esay poi 是一个开源的 excel,word 处理框架。链接 easy excel 是…

Vue 3入门指南

title: Vue 3入门指南 date: 2024/5/23 19:37:34 updated: 2024/5/23 19:37:34 categories: 前端开发 tags: 框架对比环境搭建基础语法组件开发响应式系统状态管理路由配置 第1章&#xff1a;Vue 3简介 1.1 Vue.js的历史与发展 Vue.js由前谷歌工程师尤雨溪&#xff08;Eva…

Java NIO 基础

Java NIO 基础 1. NIO 介绍2. NIO 三大组件2.1 Channel2.1.1 常见的 Channel2.1.2 常用方法 2.2 Buffer2.2.1 常见的 Buffer2.2.2 重要属性2.2.3 常用方法 2.3 Selector2.3.1 四种事件类型 1. NIO 介绍 NIO&#xff08;non-blocking io&#xff09;&#xff1a;非阻塞IO&#…

无网环境禁止 WPS 提示登录,且基本功能按钮可用

目前 WPS 升级后&#xff0c;每次打开都会提示你登录 WPS&#xff0c;并且在未登录之前所有基本功能按钮是置灰状态&#xff0c;无法使用。 如此一来&#xff0c;在内网或无网环境&#xff0c;我们无法登陆 WPS &#xff0c;就给我们的使用带来了极大的不便&#xff0c;那么有没…

go升级后 编译的exe在win7上无法正常运行

D:/Go/src/runtime/sys_windows_amd64.s:65 x75 fpx22fca sp-0x22fc8日 升级到go 1.21后报一堆错误&#xff0c;要死了啊 原来是go 1.21不支持win7了&#xff0c;必须把go退回到1.20版本 谷歌发布编程语言 Go 1.21 版本&#xff1a;取消支持微软 Win7/8 及苹果 macOS 10.13/10…

Vue3实战笔记(33)—组件传值props终章

文章目录 前言一、运行时声明、基于类型的声明二、一个小小的好奇心三、非 script setup场景下总结 前言 在 Vue 3 中&#xff0c;组件的声明方式主要有两种&#xff1a;运行时声明和基于类型的声明。这两种方式在 Vue 3 的 Composition API 中体现得尤为明显。 一、运行时声明…

如何使用Docker快速运行Firefox并实现远程访问本地火狐浏览器

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器&#xff0c;由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

基于manifest文件批量将coding的仓库导入gitlab中

文章目录 写在前面的话背景编写manifest文件最终效果 写在前面的话 前面有讲过通过manifest清单导入项目到gitlab中&#xff0c;但是实际的操作是不同gitlab实例之间的操作&#xff0c;然而对于在不同gitlab实例的repo迁移而言&#xff0c;显然direct transfer会更合适。 背景…

Spring6笔记(五):国际化、数据校验、提前编译

九、国际化&#xff1a;i18n 9.1 i18n概述 9.2 Java国际化 9.3 Spring6国际化 十、数据校验&#xff1a;Validation 10.1 Spring Validation 概述 10.2 实验一&#xff1a;通过 validator 接口实现 10.3 实验三&#xff1a;Bean Validation 注解 10.4 实验四&#xff1a;实现…