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}"
相关推荐
杉氧4 小时前
深入理解 Compose 重组机制:快照系统如何驱动 UI 精准刷新?
android·架构·android jetpack
召钱熏4 小时前
状态枚举正确≠渲染正确:一个语音按钮的状态机边界修复实录
android·前端
杉氧4 小时前
深度解析:Jetpack Compose 核心架构与底层原理 —— 十年安卓老兵的“破茧重生”
android·架构·android jetpack
通玄5 小时前
Jetpack Compose 入门系列(七):ViewModel 与界面状态管理
android
落魄Android在线炒饭5 小时前
Android Framework 开发技巧:android.jar 生成与系统快速编译验证
android
如此风景6 小时前
Kotlin Flow操作符学习
android·kotlin
plainGeekDev6 小时前
GreenDAO → Room
android·java·kotlin
weiggle7 小时前
第八篇:ViewModel + Compose——生产级状态管理实践
android
恋猫de小郭12 小时前
Amper 正式转正 Kotlin Toolchain ,Gradle 未来何去何从
android·前端·flutter
plainGeekDev13 小时前
ButterKnife → ViewBinding
android·java·kotlin