rabbitMQ-C 构建android 动态库

build_android_rabbitmq.sh

bash 复制代码
#!/bin/bash
# build_android_rabbitmq.sh

# 设置变量
RABBITMQ_C_SOURCE_DIR="/Users/longwei/CLionProjects/rabbitmq-c"
ANDROID_NDK="/Users/longwei/Library/Android/sdk/ndk/25.1.8937393"
BUILD_DIR="${RABBITMQ_C_SOURCE_DIR}/build_android"
INSTALL_DIR="${RABBITMQ_C_SOURCE_DIR}/android_libs"

echo "开始构建 Android 版本的 RabbitMQ-C..."

# 清理之前的构建
rm -rf ${BUILD_DIR} ${INSTALL_DIR}

# 创建构建目录
mkdir -p ${BUILD_DIR}
mkdir -p ${INSTALL_DIR}

cd ${RABBITMQ_C_SOURCE_DIR}

# 定义要构建的架构
ABI_LIST=("armeabi-v7a" "arm64-v8a" "x86" "x86_64")

for ABI in "${ABI_LIST[@]}"; do
    echo "=========================================="
    echo "构建架构: ${ABI}"
    echo "=========================================="

    # 为每个架构创建单独的构建目录
    mkdir -p ${BUILD_DIR}/${ABI}
    cd ${BUILD_DIR}/${ABI}

    # 设置 CMake 参数
    CMAKE_ARGS=(
        -DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK}/build/cmake/android.toolchain.cmake"
        -DANDROID_ABI="${ABI}"
        -DANDROID_PLATFORM=android-21
        -DANDROID_STL=c++_shared
        -DCMAKE_BUILD_TYPE=Release
        -DENABLE_SSL_SUPPORT=OFF
        -DBUILD_SHARED_LIBS=ON
        -DBUILD_STATIC_LIBS=ON
        -DBUILD_EXAMPLES=OFF
        -DBUILD_TOOLS=OFF
        -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR}/${ABI}"
    )

    # 执行 CMake
    cmake "${RABBITMQ_C_SOURCE_DIR}" "${CMAKE_ARGS[@]}"

    # 构建
    cmake --build . --config Release --target install -j$(sysctl -n hw.ncpu)

    echo "架构 ${ABI} 构建完成!"
    echo "输出目录: ${INSTALL_DIR}/${ABI}"
    echo ""

    # 显示生成的文件
    ls -la "${INSTALL_DIR}/${ABI}/lib/"

    cd ${RABBITMQ_C_SOURCE_DIR}
done

echo "所有架构构建完成!"
echo "库文件已生成到: ${INSTALL_DIR}"

带 OpenSSL

bash 复制代码
#!/bin/bash
# build_rabbitmq_android_ssl.sh

# 配置变量
RABBITMQ_C_SOURCE_DIR="/Users/longwei/CLionProjects/rabbitmq-c"
OPENSSL_ANDROID_DIR="/Users/longwei/CLionProjects/rabbitmq-c/openssl/android_libs_shared_3.x"  # 上一步的输出目录
ANDROID_NDK="/Users/longwei/Library/Android/sdk/ndk/25.1.8937393"
API_LEVEL=21
BUILD_DIR="${RABBITMQ_C_SOURCE_DIR}/build_android_ssl"
INSTALL_DIR="${RABBITMQ_C_SOURCE_DIR}/android_libs_ssl"

echo "开始构建带 SSL 支持的 RabbitMQ-C for Android..."

# 清理之前的构建
rm -rf ${BUILD_DIR} ${INSTALL_DIR}

# 创建构建目录
mkdir -p ${BUILD_DIR}
mkdir -p ${INSTALL_DIR}

cd ${RABBITMQ_C_SOURCE_DIR}

# 支持的 ABI 列表
ABIS=("armeabi-v7a" "arm64-v8a")

for ABI in "${ABIS[@]}"; do
    echo "=========================================="
    echo "构建架构: ${ABI}"
    echo "=========================================="

    # 为每个架构创建单独的构建目录
    mkdir -p ${BUILD_DIR}/${ABI}
    cd ${BUILD_DIR}/${ABI}

    # 设置对应的 OpenSSL 目录
    OPENSSL_ABI_DIR="${OPENSSL_ANDROID_DIR}/${ABI}"

    if [ ! -d "${OPENSSL_ABI_DIR}" ]; then
        echo "错误: 找不到 OpenSSL 目录: ${OPENSSL_ABI_DIR}"
        echo "请先构建 OpenSSL for Android"
        exit 1
    fi

    # 配置 CMake 参数
    cmake ${RABBITMQ_C_SOURCE_DIR} \
        -DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK}/build/cmake/android.toolchain.cmake \
        -DANDROID_ABI=${ABI} \
        -DANDROID_PLATFORM=android-${API_LEVEL} \
        -DANDROID_STL=c++_shared \
        -DCMAKE_BUILD_TYPE=Release \
        -DENABLE_SSL_SUPPORT=ON \
        -DOPENSSL_ROOT_DIR=${OPENSSL_ABI_DIR} \
        -DOPENSSL_INCLUDE_DIR=${OPENSSL_ABI_DIR}/include \
        -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_ABI_DIR}/lib/libcrypto.a \
        -DOPENSSL_SSL_LIBRARY=${OPENSSL_ABI_DIR}/lib/libssl.a \
        -DBUILD_SHARED_LIBS=ON \
        -DBUILD_STATIC_LIBS=ON \
        -DBUILD_EXAMPLES=OFF \
        -DBUILD_TOOLS=OFF \
        -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}/${ABI}

    # 构建
    cmake --build . --config Release --target install -j$(sysctl -n hw.ncpu)

    echo "架构 ${ABI} 构建完成!"
    echo "输出目录: ${INSTALL_DIR}/${ABI}"
    echo ""

    cd ${RABBITMQ_C_SOURCE_DIR}
done

echo "所有架构构建完成!"
echo "库文件已生成到: ${INSTALL_DIR}"
相关推荐
儿歌八万首31 分钟前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
CodeSheep程序羊41 分钟前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
I'mChloe1 小时前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言
2的n次方_1 小时前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
嵌入小生0072 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
历程里程碑2 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
消失的旧时光-19433 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
Jinkxs3 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&3 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
LDORntKQH3 小时前
基于深度强化学习的混合动力汽车能量管理策略 1.利用DQN算法控制电池和发动机发电机组的功率分配 2
android