最近工作需要,研究了使用Android Ndk 在Native 层进行进程间通信
目前存在两种方案:
- 使用socket进行进程间通信
- 使用NdkBinder 进行进程间通信
1. socket 进程间通讯
主要思路:
#define SOCKET_PATH "/tmp/socket"
servfd = socket(AF_LOCAL,SOCK_STREAM,0);
struct sockaddr_un servaddr;
memset(&servaddr, 0,sizeof(servaddr));
servaddr.sun_family = AF_LOCAL;
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 <android/binder_ibinder.h>
#include <android/binder_ibinder_jni.h>
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
敬请期待。。。。。
|