1、下载Android NDK
从android官网下载NDK。下载地址:
NDK下载
我下载的是android-ndk-r25c-linux
下载后拖到ubuntu虚拟机中,并解压
2、下载Cyclone DDS源码C语言版本
3、执行如下编译步骤
①先编译一版x86_64的Cyclone DDS
# cd cyclonedds
# cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install_x86_64 -DCMAKE_PREFIX_PATH=~/work/V3.5/Cyclone_DDS/iceoryx/install_x86_64
# cmake --build build --config Debug --target install
②再编译ARM的Cyclone DDS
# cd cyclonedds
# rm build/CMakeCache.txt
# 这里需要指定 x86_64 idlc 路径,以便在 cyclonedds 编译 aarch64 cyclonedds examples时调用 x86_64 idlc 根据 idl 文件生成相应的 C 语言源代码。
# export PATH=~/code/dds/cyclonedds/install_x86_64/bin/${PATH:+:$PATH}
# cmake -Bbuild -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=install_aarch64 -DCMAKE_TOOLCHAIN_FILE=/home/DW/code/android-ndk-r25c-linux/android-ndk-r25c/build/cmake/android.toolchain.cmake -DBUILD_EXAMPLES=On -DCMAKE_PREFIX_PATH=~/code/dds/iceoryx/install_aarch64 -DANDROID_NATIVE_API_LEVEL=28
# cmake --build build --config Debug --target install
编译出来的生成物是ARM 32格式的,可以Android环境中运行
4、使用adb运行example
编写config文件cyclonedds_domain_id_Android.xml如下
<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://cdds.io/config https://raw.githubusercontent.com/eclipse-cyclonedds/cyclonedds/iceoryx/etc/cyclonedds.xsd">
<Domain id="any">
<General>
<Interfaces>
<NetworkInterface name="eth1"></NetworkInterface>
</Interfaces>
</General>
<Tracing>
<Verbosity>config</Verbosity>
<OutputFile>/vendor/etc/cdds.log.${CYCLONEDDS_PID}</OutputFile>
</Tracing>
</Domain>
</CycloneDDS>
使用adb 将cyclonedds_domain_id_Android.xml文件push到/vendor/middleware_install_ARM32_android/下
注意:某些版本中的Android限制了文件操作,需要执行
adb root
adb remount
adb disable-verity,然后重启,才能正常执行操作文件
①运行HelloworldPublisher和HelloworldSubscriber
运行前需要
export CYCLONEDDS_URI=file://./vendor/middleware_install_ARM32_android/cyclonedds_domain_id_Android.xml
注意:每打开一个窗口都需要执行export CYCLONEDDS_URI
运行HelloworldPublisher
运行HelloworldSubscriber
②运行ThroughputPublisher和ThroughputSubscriber
运行ThroughputPublisher
运行ThroughputSubscriber