栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

使用Android NDKBinder进行进程间通信研究

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Android NDKBinder进行进程间通信研究

最近工作需要,研究了使用Android Ndk 在Native 层进行进程间通信

目前存在两种方案:

  1. 使用socket进行进程间通信
  2. 使用NdkBinder 进行进程间通信
1. socket 进程间通讯

主要思路:

#define SOCKET_PATH "/tmp/socket"
//第一个参数为AF_LOCAL,第二个为参数SOCK_STREAM
servfd = socket(AF_LOCAL,SOCK_STREAM,0);
struct sockaddr_un servaddr;
memset(&servaddr, 0,sizeof(servaddr));

//这个sun_family 为AF_LOCAL,网络通信是为AF_INET
servaddr.sun_family = AF_LOCAL;
//监听地址,相当于AF_INET网络通信的IP地址
strcpy(servaddr.sun_path+1, SOCKET_PATH);
socklen_t addrlen = 1 + strlen(SOCKET_PATH) + sizeof(servaddr.sun_family);
ret = bind(servfd, (struct sockaddr *)&servaddr, addrlen);

其它代码基本与网络通信一致,不在赘述,
本文重点研究下第二种

2.NdkBinder 进行进程间通信

在 Android Q(Android 29)开始,发布的NDK开始支持NdkBinder ,这样为在应用Native 层(JNI层)直接使用binder 通信提供了支持,
现在研究下其具体的使用步骤

2.1 依赖动态库
LOCAL_LDFLAGS +=  -lbinder_ndk
2.2 添加头文件
#include 
#include 
2.3 创建AIBinder_Class类
AIBinder_Class_define(const char *interfaceDescriptor,
	 AIBinder_Class_onCreate onCreate, 
	 AIBinder_Class_onDestroy onDestroy, 
	 AIBinder_Class_onTransact onTransact)
2.4 创建AIBinder对象
AIBinder_new(const AIBinder_Class *clazz, void *args)
2.5 发送数据
AIBinder_transact(AIBinder *binder, transaction_code_t code, 
	AParcel **in, AParcel **out, binder_flags_t flags)
3 完整实例Demo

敬请期待。。。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/276735.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号