为 Android 添加 OpenSSL 支持

Qt 安装包自带 OpenSSL 支持,但由于某些国家的法律限制,OpenSSL 库并不是安装包的一部分。如果您的应用程序依赖于 OpenSSL,请考虑将 SSL 库与应用程序软件包(APKAAB )打包在一起,因为目标设备可能有也可能没有。

您可以使用QSslSocket::supportsSsl() 静态函数检查目标设备是否支持 SSL。首先,包含头文件:

#include <QSslSocket>

然后使用下面一行检查是否支持 SSL:

qDebug() << "Device supports OpenSSL: " << QSslSocket::supportsSsl();

查看Qt CreatorApplication Output 部分或 Androidlogcat ,了解该日志信息。

添加 OpenSSL 库

使用方便的OpenSSL for Android软件库,你可以直接在自己的项目中包含 OpenSSL 库。

使用 CMake,在CMakeLists.txt 中添加以下内容:

if (ANDROID)
    include(FetchContent)
    FetchContent_Declare(
        android_openssl
        DOWNLOAD_EXTRACT_TIMESTAMP true
        URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
    )
    FetchContent_MakeAvailable(android_openssl)
    include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
endif()

或者,如果你将该版本库克隆到了一个子目录中:

include(<path/to/android_openssl>/android_openssl.cmake)

然后,将库添加到目标中:

qt_add_executable(your_target_name ..)
qt_add_executable(your_second_target_name ..)

if (ANDROID)
    add_android_openssl_libraries(your_target_name your_second_target_name)
endif()

对于qmake ,在.pro 文件中添加以下内容:

android: include(<path/to/android_openssl/openssl.pri)

或者,添加额外的库,如libcryptolibssl 。对于 CMake,使用

set_target_properties(<target_name> PROPERTIES
    QT_ANDROID_EXTRA_LIBS "<path_to_libs_dir>/libcrypto_3.so" "<path_to_libs_dir>/libssl_3.so"
)

qmake

ANDROID_EXTRA_LIBS += \
    <path_to_libs_dir>/libcrypto_3.so \
    <path_to_libs_dir>/libssl_3.so

注意: 当针对多个体系结构时,请包含所有目标体系结构的 OpenSSL 库。

使用Qt Creator ,可以添加额外的库。更多信息,请参阅Qt Creator: Add libraries to CMake projectsQt Creator: Add libraries to qmake projects

构建 Android 版 OpenSSL

以下说明将指导您手动构建 OpenSSL 库:

  1. 下载OpenSSL源代码。
  2. 将源代码解压缩到一个文件夹,然后使用 CLI 浏览该文件夹。

    注意: 如果您的开发平台是 Windows,则需要msys perl 5.14 或更高版本才能构建 OpenSSL。

  3. 将 Android LLVM 工具链添加到路径中,例如,用于 Linux:
    export PATH=~/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/<host>/bin:$PATH

    Android SDK 通常通过Qt Creator 或 Android Studio 安装在以下位置:

    • Linux: ~/Android/Sdk/
    • MacOS: ~/Library/Android/sdk/
    • Windows:C:\Users\<USER>\AppData\Local\Android\Sdk\
  4. 使用以下命令配置 OpenSSL 源,以便为 Android 构建,其中 <arch> 的值可以是arm,arm64,x86x86_64
    ./Configure shared android-<arch> -D__ANDROID_API__=28

    注意: 必须根据应用程序所在地区的法律限制,考虑启用或禁用 SSL 功能。有关可配置功能的更多信息,请参阅OpenSSL 配置选项

  5. 如果没有后缀,Android 会加载系统库libcrypto.solibssl.so 。这些版本可能与您的库或 Qt 期望的版本不同。为确保 Qt 应用程序能加载手动构建的 OpenSSL 库,请运行以下命令:
    make -j$(nproc) SHLIB_VERSION_NUMBER= build_libs
    
    mkdir -p ${out_path}
    cp libcrypto.so ${out_path}/libcrypto_3.so
    cp libssl.so ${out_path}/libssl_3.so
    
    cd ${out_path}
    patchelf --set-soname libcrypto_3.so libcrypto_3.so
    patchelf --set-soname libssl_3.so libssl_3.so
    patchelf --replace-needed libcrypto.so libcrypto_3.so libssl_3.so

    注意: 虽然libcryptolibssl 共享库没有版本控制,但它们的后缀是_3

    然后在 main.cpp 文件中设置环境变量:

    qputenv("ANDROID_OPENSSL_SUFFIX", "<custom_suffix>");

    注意: Android 不会加载版本控制库。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.