Android 用の OpenSSL サポートの追加

QtのインストールパッケージにはOpenSSLサポートが付属していますが、OpenSSLライブラリは国によっては法的規制があるためパッケージの一部ではありません。アプリケーションが OpenSSL に依存している場合、SSL ライブラリをアプリケーションパッケージ (APK またはAAB) と一緒にパッケージ化することを検討してください。

QSslSocket::supportsSsl() 静的関数を使用して、ターゲット・デバイスでSSLがサポートされているかチェックできます。まず、ヘッダーをインクルードします:

#include <QSslSocket>

次に、以下の行を使用して、SSLがサポートされているかどうかをチェックします:

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

Qt CreatorApplication Output セクション、または Android のlogcat で、そのログ・メッセージを確認してください。

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:Adding Libraries to Projectsを参照してください。

Android用OpenSSLのビルド

以下の手順では、OpenSSLライブラリを手動でビルドする方法を説明します:

  1. OpenSSLのソースをダウンロードする。
  2. ソースをフォルダに解凍し、CLIを使用してそのフォルダに移動します。

    注: 開発プラットフォームがWindowsの場合、OpenSSLをビルドするには、msysperl 5.14以降が必要です。

  3. Linuxで使用する場合は、Android LLVMツールチェーンをパスに追加してください:
    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/
    • WindowsWindows: C:¥Users<USER>¥AppData¥Local¥Android¥Sdk
  4. 以下のコマンドを使用して、Android用にビルドするOpenSSLソースを設定する:arm arm64,x86 またはx86_64
    ./Configure shared android-<arch> -D__ANDROID_API__=28

    注: アプリケーションが利用可能な地域の法的制限に基づいて、SSL機能の有効化または無効化を検討する必要があります。設定可能な機能の詳細については、「OpenSSL 設定オプション」を参照してください。

  5. サフィックスがない場合、Android はシステム・ライブラリlibcrypto.solibssl.so をロードします。サフィックスがない場合、Android はシステムライブラリ と をロードします。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.