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)

あるいは、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 を参照してください:プロジェクトにライブラリを追加する」を参照してください。

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¥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はバージョン管理されたライブラリをロードしません。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。