本页内容

为 Android 添加 OpenSSL 支持

Qt 安装包自带 OpenSSL 支持,但由于某些国家的法律限制,OpenSSL 库并未包含在安装包中。如果您的应用程序依赖于 OpenSSL,请考虑将 SSL 库打包到您的应用程序包中(APK 或AAB ),因为目标设备可能已安装也可能未安装这些库。

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

#include <QSslSocket>

然后使用以下代码行检查是否支持 SSL:

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

有关该日志消息的详细信息,请查阅Qt Creator 的Application 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)

或者,若要添加其他库(例如 `libcrypto ` 和 `libssl`),对于 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 :向 CMake 项目添加库,以及Qt Creator :向 qmake 项目添加库。

为 Android 构建 OpenSSL

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

  1. 下载OpenSSL源代码。
  2. 将源代码解压到一个文件夹中,并通过命令行界面(CLI)进入该文件夹。

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

  3. 将 Android LLVM 工具链添加到系统路径中,例如,在 Linux 系统中使用:
    export PATH=~/Android/Sdk/ndk/27.2.12479018/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 、x86 或x86_64 :
    ./Configure shared android-<arch> -D__ANDROID_API__=28

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

  5. 如果没有后缀,Android 会加载系统库libcrypto.so 和libssl.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

    注意:尽管 libcrypto 和libssl 共享库未标注版本号,但它们的名称后缀均为_3。

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

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

    注意:Android 不加载带版本号的库。

© 2026 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.