AidConnect SDK
简介
阿加犀 AidLux 融合系统 实现了在一颗 ARM 处理器上同时运行原生 Android 及 Linux(Ubuntu)系统环境的能力,支持开发者直接开发部署 Android 应用和 Linux 应用。
为了满足某些场景中 Android 应用需要与 Linux 应用进行高速大数据量通信的需求(例如图像或视频数据的传输),AidLux 提供了基于共享内存机制的进程间通信(IPC)开发包 - AidConnect SDK。此 SDK 简化了内存共享通信功能的开发。
AidConnect SDK 支持的主要功能:
- 数据通道的创建和释放
- 支持有名数据通道
- 基于字节的数据发送和接收
- 自定义通信参数设置
开发流程

- AidConnect Android App 需 AidLux Android IPC 服务成功启动
- 开发者可以通过配置文件或者通过 SDK API 添加通信管道名称和共享内存大小,在设置完成之后,开发者可以在Android/Linux 中获取对应的管道,并进行读写。
支持情况
| Linux | Android | |
|---|---|---|
| C++ | ✅ | / |
| Python | 🚧 | / |
| Kotlin/Java | / | ✅ |
✅: 已支持 🚧: 计划支持
快速开始
安装
bash
sudo aid-pkg update
## ubuntu 20.04
sudo aid-pkg -i -d aidconnect_1.0.0.2_arm64_ub2004.aid.gpg
## ubuntu 22.04
sudo aid-pkg -i -d aidconnect_1.0.0.2_arm64_ub2204.aid.gpgbash
联系阿加犀获取AidConnect Android SDK,并集成到 Android 项目工程中示例
💡注意
以下示例是展示AidConnect Linux和Android如何进行数据传输,传输需要提前定义传输管道,或者通过AidConnect Android SDK进行接口添加,两者选其一。传输管道配置存放在:/etc/opt/aidlux/memory_config
手动配置传输通道,规则如下:
- 打开memory_config文件,在customer_block_array节点下添加json对象,json对象包含传输的管道名称和管道的大小(大小以 MB 为单位)。 例如: {"cap": 6, "m": 3, "n": 5, "size": 5, "block": 5, "customer_block_array": [{"name":"test","size":1}]} 定义了test管道,大小为 1MB
💡注意
使用 AidConnect SDK C++ 开发需要了解如下事项:
- 在安装完AidConnect C++ sdk,头文件存放路径
/usr/local/include/aidlux/aidconnect/aidconnect.hpp - 在安装完AidConnect C++ sdk,动态库存放路径
/usr/local/lib/aidlux/aidconnect/libaidconnect.so - 在安装完AidConnect C++ sdk,示例程序存放路径
/usr/local/share/aidconnect/examples
C++
//AidConnect 初始化
Aidlux::AidConnect aidconnect;
int status = aidconnect.init();
if(EXIT_SUCCESS != status){
printf("aidconnect.init failed !\n");
return EXIT_FAILURE;
}
//获取管道
status = aidconnect.aidconnect_with_name("test");
if(EXIT_SUCCESS != status){
printf("aidconnect.aidkv_with_id failed !\n");
return EXIT_FAILURE;
}
//写数据到管道中
char aaa[] = "Hello Cpp";
printf("Set string[%s], length[%d]\n", aaa, (int)sizeof(aaa));
status = aidconnect.set_bytes(aaa, sizeof(aaa));
if(EXIT_SUCCESS != status){
printf("aidconnect.set_bytes failed !\n");
return EXIT_FAILURE;
}
//从管道读取数据
char* result = new char[10000];
uint64_t length = 0;
status = aidconnect.get_bytes(&result, &length);
if(EXIT_SUCCESS != status){
printf("aidconnect.get_bytes failed !\n");
return EXIT_FAILURE;
}
printf("Result string[%s], length[%ld]\n", result, length);Java
//AidConnect 初始化
AidConntect.initialize(application,true,object : AidConnectCallback {
override fun initCallback(isInitSuccess: Boolean, keys: Set<String>?) {
if (isInitSuccess){
}else {
}
}
});
//添加管道,名为test,大小1M
val channels = AidConntect.addChannelWithName("test", 1)
if (channels==null){
Log.e("Activity","addChannelWithName failed")
}
//移除管道
val channels = AidConntect.removeChannelWithName("test")
if (channels==null){
Log.e("Activity","removeChannelWithName failed")
}
//获取管道
val aidConn = AidConntect.aidConnectWithName("test")
if (aidConn!=null){
Log.e("Activity","aidConnectWithName failed")
}else {
}
//写数据到管道中
val buffer = ByteArray(3840*2160*3)
val setFlag = aidConn.setBytes(buffer)
if (setFlag==true){
Log.i("Activity","setBytes successfully")
}else {
Log.e("Activity","setBytes failed")
}
//从管道读取数据
val buffer = ByteArray(3840*2160*3)
val bytes = aidConn?.getBytes(buffer,3840*2160*3)
if (bytes!=null){
Log.e("Activity","getBytes failed")
}else {
}
//AidConnect 释放
val ret = AidConntect.release()
if (ret==0){
Log.i("Activity","release successfully")
}else {
Log.e("Activity","release failed")
}