【MQTT(3)】开发一个客户端,QT-Android安卓手机版本

手机版本更加方便

生成安卓库

参考了这个代码

在编译Mosquitto以支持安卓平台时,主要涉及到使用Android NDK(Native Development Kit)进行交叉编译。环境的准备参考之前的博客【QT开发(17)】2023-QT 5.14.2实现Android开发

下载Mosquitto, https://github.com/eclipse/mosquitto.git

2. 编写或准备编译脚本

对于Mosquitto的编译,可能需要编写一个CMake或Makefile脚本来配置编译选项,以支持Android平台。这通常包括指定Android的目标架构(如armeabi-v7a、arm64-v8a等)、API级别、工具链等。

例如,可以创建一个名为mosquitto_android_cmake.sh的脚本,内容大致如下(注意:以下脚本仅为示例,具体参数需根据实际情况调整):

bash 复制代码
#!/bin/bash
CURRENT_DIR=$(dirname $(readlink -f $0))
rm -rf ./build
mkdir -p build
ANDROID_ABI="armeabi-v7a"
ANDROID_NDK="/var/files/yanyixiong/android-ndk-r21e"
cmake \
    -DANDROID_NDK=${ANDROID_NDK} \
    -DANDROID_ABI=${ANDROID_ABI} \
    -DANDROID_NATIVE_API_LEVEL=21 \
    -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.9" \
    -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake" \
    -DWITH_TLS=OFF \
    -DWITH_THREADING=OFF \
    -H. -B./build
cd build
cmake --build .
cd ..
复制代码
cmake -DANDROID_NDK=/var/files/yanyixiong/android-ndk-r21e \ 
 -DANDROID_ABI="armeabi-v7a" \
  -DCMAKE_TOOLCHAIN_FILE="/var/files/yanyixiong/android-ndk-r21e/build/cmake/android.toolchain.cmake"  \
   -DWITH_TLS=OFF \
    -DWITH_THREADING=OFF \
     -DCMAKE_C_FLAGS='-fPIC' \
      ..

问题来了

目前来说,不支持ndk21版本

ndk 10版本

复制代码
git clone https://github.com/eclipse/mosquitto.git
cd mosquitto
mkdir _build_android
cd _build_android
cmake -DANDROID_NDK=/opt/android-ndk/android-ndk-r10e -DANDROID_ABI="armeabi-v7a" -DANDROID_NDK_HOST_X64="YES"  -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.9" -DCMAKE_TOOLCHAIN_FILE="/opt/android-ndk/build/cmake/android.toolchain.cmake" -DWITH_TLS=OFF -DWITH_THREADING=OFF -DCMAKE_C_FLAGS='-fPIC' ..

ndk-r8e

参考

复制代码
#!/bin/bash
# Script used to cmake and then make mosquitto for android on MacOSX with android-ndk-r8e and a patched mosquitto source.
# Update paths below and run it from inside the root mosquitto dir (right in the one you clone from hg)

# Used patched mosquitto from: https://bitbucket.org/andreasjk/mosquitto
# Used NDK: http://dl.google.com/android/ndk/android-ndk-r8e-darwin-x86_64.tar.bz2
# Used cmake toolchain file from https://github.com/Itseez/opencv/blob/master/android/android.toolchain.cmake

# Threading has to be disabled since android doesn't support it fully
# Also disabled TLS since I couldn't get cmake to find the openssl lib properly
CURRENT_DIR=$(dirname $(readlink -f $0))
ANDROID_ABI="armeabi-v7a"
rm -rf mosquitto/build
mkdir -p mosquitto/build
cd mosquitto/build
cmake \
   -DANDROID_NDK=${ANDROID_NDK} \
   -DANDROID_ABI=${ANDROID_ABI} \
   -DANDROID_NDK_HOST_X64="YES" \
   -DANDROID_NATIVE_API_LEVEL=19 \
   -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.9" \
   -DCMAKE_TOOLCHAIN_FILE="${CURRENT_DIR}/android-cmake/android.toolchain.cmake" \
   -DOPENSSL_LIBRARIES="${CURRENT_DIR}/openssl/arch-${ANDROID_ABI}/lib" \
   -DOPENSSL_INCLUDE_DIR="${CURRENT_DIR}/openssl/sources/include" \
   -DWITH_TLS=ON \
   -DWITH_THREADING=OFF ..
echo "Start building android ..."
make
echo "Output file `pwd`"
cd ..

r16b

If you want to use mosquitto on Android platforms, then you should use Android NDK to cross-compile the source for Android platforms.

Before start compiling, you should download Android NDK from Google official website. In addition, you should make sure that the version of cmake on your device is above 3.6.0. We suggest you use linux to do the following things.

Firstly, edit {SOURCE_DIR}/CMakeLists.txt and add following commands:

复制代码
add_compile_options(-fPIE)
add_compile_options(-fPIC)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pie")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie")

after

复制代码
add_definitions (-DCMAKE -DVERSION=\"${VERSION}\")

Secondly, enter the source folder({SOURCE_DIR}), and setup the build configure using the command below:

复制代码
cmake -DANDROID_NDK=/home/sususweet/android_things/android-ndk-r16b -DANDROID_ABI="armeabi-v7a" -DANDROID_NDK_HOST_X64="YES"  -DANDROID_TOOLCHAIN_NAME="arm-linux-androideabi-4.9" -DCMAKE_TOOLCHAIN_FILE="/home/sususweet/android_things/android-ndk-r16b/build/cmake/android.toolchain.cmake" -DWITH_TLS=OFF -DWITH_THREADING=OFF -H. -B./build

Then go into build folder:

复制代码
cd build

Use cmake to compile the source code:

复制代码
cmake --build .

Then you can find built mosquitto in {SOURCE_DIR}/build folder.

5.14.4 必须是ndk20,没法编译

如果想继续,就必须变更版本。就此作罢,写个笔记避避坑

相关推荐
游戏开发爱好者86 分钟前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码203511 分钟前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥27 分钟前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
xmRao35 分钟前
Qt+FFmpeg 实现 PCM 音频转 AAC 编码
qt·ffmpeg·pcm
亓才孓39 分钟前
[JDBC]元数据
android
xmRao41 分钟前
Qt+FFmpeg 实现录音程序(pcm转wav)
qt·ffmpeg
喜欢喝果茶.1 小时前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
独行soc1 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能1 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿1 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市