最近工作需要,研究了使用Android Ndk 在Native 层进行进程间通信
目前存在两种方案:
- 使用socket进行进程间通信
- 使用NdkBinder 进行进程间通信
主要思路:
#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);
其它代码基本与网络通信一致,不在赘述,
本文重点研究下第二种
在 Android Q(Android 29)开始,发布的NDK开始支持NdkBinder ,这样为在应用Native 层(JNI层)直接使用binder 通信提供了支持,
现在研究下其具体的使用步骤
LOCAL_LDFLAGS += -lbinder_ndk2.2 添加头文件
#include #include2.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
敬请期待。。。。。



