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 を参照してください:プロジェクトにライブラリを追加する」を参照してください。
Android 用 OpenSSL のビルド
以下の手順では、OpenSSL ライブラリを手動でビルドします:
- OpenSSL のソースをダウンロードします。
- ソースをフォルダに解凍し、CLI を使用してそのフォルダに移動します。
注意: 開発プラットフォームがWindowsの場合、OpenSSLをビルドするには、
msys
、perl
5.14以降が必要です。 - 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
- 以下のコマンドを使用して、Android用にビルドするOpenSSLソースを設定する:
arm
arm64
,x86
またはx86_64
:./Configure shared android-<arch> -D__ANDROID_API__=28
注: アプリケーションが利用可能な地域の法的制限に基づいて、SSL機能の有効化または無効化を検討する必要があります。設定可能な機能の詳細については、「OpenSSL 設定オプション」を参照してください。
- サフィックスがない場合、Android はシステム・ライブラリ
libcrypto.so
とlibssl.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
注:
libcrypto
とlibssl
の共有ライブラリはバージョン管理されていませんが、接尾辞は_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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。