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}"
相关推荐
冬奇Lab2 小时前
【Kotlin系列07】类型系统深度解析:从空安全到智能类型推断的设计哲学
android·开发语言·安全·kotlin
超级任性2 小时前
Android Studio开发你的第一个Android程序
android·ide·android studio
小北方城市网2 小时前
SpringBoot 集成消息队列实战(RabbitMQ/Kafka):异步通信与解耦,落地高可靠消息传递
java·spring boot·后端·python·kafka·rabbitmq·java-rabbitmq
2501_916007472 小时前
在没有 Mac 的情况下完成 iOS 应用上架 App Store
android·macos·ios·小程序·uni-app·iphone·webview
dongbaoming2 小时前
调用其他应用的activity结束后回到调用app
android
独行soc2 小时前
2026年渗透测试面试题总结-2(题目+回答)
android·java·网络·python·安全·web安全·渗透测试
TheNextByte12 小时前
iPhone存储空间已满?如何轻松释放iPhone空间?
android·ios·iphone
八宝粥大朋友2 小时前
OpenSSL构建android 脚本
android·ssl
九转苍翎2 小时前
掌控消息全链路(1)——初识RabbitMQ:从核心概念到五种常用模式全景解析
rabbitmq