Skip to content

AidConnect SDK

简介

阿加犀 AidLux 融合系统 实现了在一颗 ARM 处理器上同时运行原生 Android 及 Linux(Ubuntu)系统环境的能力,支持开发者直接开发部署 Android 应用和 Linux 应用。

为了满足某些场景中 Android 应用需要与 Linux 应用进行高速大数据量通信的需求(例如图像或视频数据的传输),AidLux 提供了基于共享内存机制的进程间通信(IPC)开发包 - AidConnect SDK。此 SDK 简化了内存共享通信功能的开发。

AidConnect SDK 支持的主要功能:

  • 数据通道的创建和释放
  • 支持有名数据通道
  • 基于字节的数据发送和接收
  • 自定义通信参数设置

开发流程

AidConnect Workflow

  • AidConnect Android App 需 AidLux Android IPC 服务成功启动
  • 开发者可以通过配置文件或者通过 SDK API 添加通信管道名称和共享内存大小,在设置完成之后,开发者可以在Android/Linux 中获取对应的管道,并进行读写。

支持情况

LinuxAndroid
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.gpg
bash
 联系阿加犀获取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")
}

API 参考