Android 12 S Binder原理之BpBinder,BnBinder以及IInterface介绍

发布时间:2026/8/16 13:54:49

Android 12 S Binder原理之BpBinder,BnBinder以及IInterface介绍
系列文章Android 12 S ServiceManager原理Android 12 S Native Service的创建流程Android 12 S Binder原理之BpBinderBnBinder以及IInterface介绍Android 12 S HIDL Service创建流程Android 12 S 自定义Hal服务selinux权限添加Android 12 S 自定义Native服务selinux权限添加Android 12 S java服务调用native服务Android 12 S 自定义native服务访问java服务​一Binder机制介绍Binder机制是Android系统提供的跨进程通讯机制。Client进程希望可以与Server进程沟通但由于是跨进程所以需要借助Binder驱动进程通信。Binder由以下模块组成* Binder驱动* Binder Server端 - Server进程* Binder Client端 - Client进程* ServiceManager - 管理者Binder的通信模型如下所示二创建Service模型如果要创建一个Service需要Server端继承BnInterface, Client端继承BpInterface。具体可用下图表示可在如下文件中找到关于Bn, Bp相关的声明frameworks/native/libs/binder/include/binder/IInterface.hframeworks/native/libs/binder/include/binder/IBinder.h具体代码如下frameworks/native/libs/binder/include/binder/IInterface.h class IInterface : public virtual RefBase { public: IInterface(); static spIBinder asBinder(const IInterface*); static spIBinder asBinder(const spIInterface); protected: virtual ~IInterface(); virtual IBinder* onAsBinder() 0; }; ----------------------------------------------------------- class BnInterface : public INTERFACE, public BBinder { public: virtual spIInterface queryLocalInterface(const String16 _descriptor); virtual const String16 getInterfaceDescriptor() const; protected: typedef INTERFACE BaseInterface; virtual IBinder* onAsBinder(); }; frameworks/native/libs/binder/include/binder/Binder.h class BBinder : public IBinder { public: BBinder(); virtual const String16 getInterfaceDescriptor() const; virtual bool isBinderAlive() const; virtual status_t pingBinder(); ... }; frameworks/native/libs/binder/include/binder/IBinder.h class [[clang::lto_visibility_public]] IBinder : public virtual RefBase { public: enum { FIRST_CALL_TRANSACTION 0x00000001, LAST_CALL_TRANSACTION 0x00ffffff, ... }; ------------------------------------------------------------------- class BpInterface : public INTERFACE, public BpRefBase { public: explicit BpInterface(const spIBinder remote); protected: typedef INTERFACE BaseInterface; virtual IBinder* onAsBinder(); }; frameworks/native/libs/binder/include/binder/Binder.h class BpRefBase : public virtual RefBase { protected: explicit BpRefBase(const spIBinder o); virtual ~BpRefBase(); virtual void onFirstRef(); virtual void onLastStrongRef(const void* id); virtual bool onIncStrongAttempted(uint32_t flags, const void* id); inline IBinder* remote() const { return mRemote; }//返回的是BpBinder inline spIBinder remoteStrong() const { return spIBinder::fromExisting(mRemote); ...三进程间传递数据的载体 - ParcelParcel代码位于如下目录Parcel用于传递进程间的数据。不管是Client发送数据给Server还是Server发送数据给Client都是通过Parcel进行传递。frameworks/native/include/binder/Parcel.hframeworks/native/include/binder/Parcel.cppwrite相关接口:status_t write(const void* data, size_t len); status_t writeInt32(int32_t val); status_t writeUint32(uint32_t val); status_t writeInt64(int64_t val); status_t writeUint64(uint64_t val); status_t writeFloat(float val); status_t writeDouble(double val); status_t writeStrongBinder(const spIBinder val); status_t writeInt32Array(size_t len, const int32_t *val); status_t writeByteArray(size_t len, const uint8_t *val); status_t writeBool(bool val); status_t writeChar(char16_t val); status_t writeByte(int8_t val); ......read相关接口:status_t read(void* outData, size_t len) const; const void* readInplace(size_t len) const; int32_t readInt32() const; status_t readInt32(int32_t *pArg) const; uint32_t readUint32() const; status_t readUint32(uint32_t *pArg) const; int64_t readInt64() const; status_t readInt64(int64_t *pArg) const; uint64_t readUint64() const; status_t readUint64(uint64_t *pArg) const; float readFloat() const; status_t readFloat(float *pArg) const; double readDouble() const; status_t readDouble(double *pArg) const; bool readBool() const; status_t readBool(bool *pArg) const; char16_t readChar() const; status_t readChar(char16_t *pArg) const; int8_t readByte() const; status_t readByte(int8_t *pArg) const; ......举个例子在native service中是如何通过Parcel传递数据的如下所示都是通过Parcel进行传递。class BpCustomizeManagerService : public BpInterfaceICustomizeManagerService { public: explicit BpCustomizeManagerService (const spIBinder impl) : BpInterface ICustomizeManagerService(impl) { ALOGD(create Service \n); } int customeize(int size){ Parcel data, reply; data.writeInterfaceToken(ICustomizeManagerService::getInterfaceDescriptor()); data.writeInt32(size); remote()-transact(CUSTOMIZE, data, reply); return reply.readInt32(); } }; status_t BnCustomizeManagerService ::onTransact(uint32_t code, const Parcel data, Parcel *reply, uint32_t flags){ switch (code) { case CUSTOMIZE: { CHECK_INTERFACE(ICustomizeManagerService, data, reply); int size data.readInt32(); int ret customeize(size); //函数返回值从Server传递给Client reply-writeInt32(); return NO_ERROR; } ... };

相关新闻

《2026年普通人一定要学Codex:零基础从安装到做出第一个项目,我把完整流程讲透了》

《2026年普通人一定要学Codex:零基础从安装到做出第一个项目,我把完整流程讲透了》

2026/8/16 13:54:49

2026 年 Codex 零基础入门:普通人学会它,相当于给自己配了一个 AI 技术团队 最近我越来越强烈地感觉到: 2026 年真正值得普通人学习的,不一定是“怎么写代码”,而是“怎么让 AI 帮你完成代码”。 以前做一个网站&am…

2026AI论文工具排行榜[特殊字符]实测8款!稳过审梯队排名出炉

2026AI论文工具排行榜[特殊字符]实测8款!稳过审梯队排名出炉

2026/8/16 13:54:49

2026年高校查重AIGC双检全面严查!现在选AI论文工具,再也不能只看免费、好看、热度高!能不能过盲审、有没有学术风险、会不会高危翻车,才是核心评判标准✅实测全网8款主流AI论文工具,从学术严谨度、双检通过率、功能完整…

WorkshopDL:无需Steam客户端的模组下载器,5种引擎一键下载742款游戏模组

WorkshopDL:无需Steam客户端的模组下载器,5种引擎一键下载742款游戏模组

2026/8/16 13:54:49

WorkshopDL:无需Steam客户端的模组下载器,5种引擎一键下载742款游戏模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 如果你在Epic、GOG等非Steam平台…

免实名的域名有吗?域名实名制认证有哪些要求?

免实名的域名有吗?域名实名制认证有哪些要求?

2026/8/16 14:44:51

这个问题其实不能简单回答“有”或者“没有”。 因为不同域名后缀、不同注册局以及不同使用场景,对注册人身份信息的要求并不完全一样。 很多人把“域名实名认证”“注册资料”和“网站备案”混在一起了,其实这是三件不同的事情。 先说国内用户比较熟…

一键生成论文工具百科全书:语法纠错+降重降AI一篇文章讲透

一键生成论文工具百科全书:语法纠错+降重降AI一篇文章讲透

2026/8/16 14:44:51

论文写完总觉得哪里不对劲?别急,AI 工具能帮你把初稿打磨成合格的终稿。每年毕业季,后台总能看到这样的提问:“论文写完了,怎么改才能过审?”作为一个曾经被查重率 50% 吓到怀疑人生的过来人,我…

Sunshine 游戏串流实战上手:把书房里的 PC 游戏搬到任何屏幕(含避坑记录)

Sunshine 游戏串流实战上手:把书房里的 PC 游戏搬到任何屏幕(含避坑记录)

2026/8/16 14:44:51

Sunshine 游戏串流实战上手:把书房里的 PC 游戏搬到任何屏幕(含避坑记录) 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 如果此刻的你正坐在客…

宝塔 Nginx 构建 Service Worker

宝塔 Nginx 构建 Service Worker

2026/8/16 14:44:51

当网站后端暂时无法访问时,可以让 Nginx 自动显示一个静态备用页面,提示用户检查网络,并提供售后信息。 一、准备文件 将以下两个文件上传到宝塔网站根目录: /www/wwwroot/test.zhangsan.cool/offline.html /www/wwwroot/test.…

奥晟博数控立式车床(立车)核心技术解析

奥晟博数控立式车床(立车)核心技术解析

2026/8/16 14:44:51

奥晟博数控立式车床(立车)核心技术解析与应用指南在重型机械加工领域,立式车床(立车)是加工大直径、短轴类及盘类零部件的关键设备。作为东北地区专业数控机床制造实体的奥晟博数控机床,其数控立车&#xf…

微信聊天记录永久保存方案:WeChatExporter开源导出工具完整上手指南(含避坑清单)

微信聊天记录永久保存方案:WeChatExporter开源导出工具完整上手指南(含避坑清单)

2026/8/16 14:34:50

微信聊天记录永久保存方案:WeChatExporter开源导出工具完整上手指南(含避坑清单) 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你有…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/16 0:04:13

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/15 1:04:46

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…