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}"
相关推荐
BoomHe2 小时前
Android Framework 文件应用移植到 AndroidStudio
android
传奇开心果编程3 小时前
【Jetpack Compose基础语法学与练】第8课 rememberSaveable,页面旋转/系统重建保留状态
android·学习·ui·kotlin·android jetpack
>Andre<3 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
事圆则缓4 小时前
Java 8 Lambda、Stream、Optional 与 Android 边界:从回调语法到运行时兼容
android·java
mmsx4 小时前
Android 地图十万要素不卡顿:空间网格 + 渐进式加载的移动端实践
android·大数据·opengl
91刘仁德5 小时前
C++ 继承和多态 设计模式
c语言·c++·笔记
码行山野赴时序归途5 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
Godikov6 小时前
Android 工业终端保活实战:前台服务 + 开机自启 + 更新自启的三重保障
android
字节暗面6 小时前
SO加固强度怎么量化?腾讯ACE与FairGuard静态分析实测
android·逆向
库玛西6 小时前
哈夫曼树与前缀编码:数据压缩的贪心核心
c语言·c++·笔记·考研