Добавление поддержки OpenSSL для Android
Пакет Qt содержит поддержку OpenSSL, но библиотеки OpenSSL не входят в пакет из-за юридических ограничений в некоторых странах. Если ваше приложение зависит от OpenSSL, рассмотрите возможность добавления библиотек SSL в ваш пакет приложения (APK), так как на целевом устройстве они могут отсутствовать.
Вы можете использовать статический метод QSslSocket::supportsSsl() для проверки поддержки SSL на целевом устройстве. Сначала включите заголовок:
#include <QSslSocket>
Затем используйте следующую строку для проверки поддержки SSL:
qDebug() << "Device supports OpenSSL: " << QSslSocket::supportsSsl();
Проверьте раздел Application Output в Qt Creator или раздел logcat для Android, чтобы узнать результат.
Компиляция OpenSSL для Android
Можно воспользоваться удобным репозиторием на Github с предварительно скомпилированными файлами и скриптом сборки, без необходимости ручного пошагового компилирования. Дополнительную информацию можно найти на странице OpenSSL для Android. Если вы скачали репозиторий, можете перейти к разделу Использование библиотек OpenSSL с Qt для Android.
Следующие инструкции помогут вам скомпилировать библиотеки OpenSSL вручную:
- Скачайте исходные коды OpenSSL 1.1.x.
- Разархивируйте исходные коды в папку и перейдите в эту папку через командную строку.
Примечание: Если ваша платформа разработки — Windows, вам потребуется
msysсperlверсии v5.14 или выше для компиляции OpenSSL. - Добавьте Android LLVM инструмент-цепь (NDK r20b или r21) в свой путь:
export PATH="<android_ndk_path>/toolchains/llvm/prebuilt/<host>/bin":$PATH
- Настройте исходные коды OpenSSL для компиляции для Android, используя следующую команду:
./Configure shared android-<arch> -D__ANDROID_API__=21
Где <arch> может принимать значения:
arm,arm64,x86,x86_64.Примечание: Необходимо учитывать включение или отключение функций SSL в соответствии с юридическими ограничениями в регионе, где ваше приложение доступно. Дополнительную информацию о настраиваемых функциях можно найти на странице Параметры конфигурации OpenSSL.
- Для сборки
libcryptoиlibsslобщих библиотек, которые не имеют версионности, но имеют суффикс _1_1, выполните следующую команду:make -j$(nproc) SHLIB_VERSION_NUMBER= SHLIB_EXT=_1_1.so build_libs
Без суффикса Android 5 (API 21) будет загружать системные библиотеки libcrypto.so и libssl.so, которые представляют OpenSSL 1.0, а не ваши библиотеки.
Если вы хотите использовать другой суффикс, необходимо изменить
SHLIB_EXTв предыдущей команде и установить переменную окруженияANDROID_OPENSSL_SUFFIXперед доступом к API Qt Network.make -j$(nproc) SHLIB_VERSION_NUMBER= SHLIB_EXT=<custom_suffix>.so build_libs
Затем установите переменную окружения в вашем файле main.ccp:
qputenv("ANDROID_OPENSSL_SUFFIX", "<custom_suffix>");Примечание: Android не загружает версиированные библиотеки.
Использование библиотек OpenSSL с Qt для Android
В зависимости от способа получения библиотек OpenSSL, вы можете использовать один из следующих шагов для включения этих библиотек в свой проект:
- Использование файлов проекта:
Используя удобный репозиторий OpenSSL для Android, вы можете напрямую добавить включаемые проекты в свой собственный проект, добавив следующее в свой файл
.pro:android: include(<path/to/android_openssl/openssl.pri)
Или, если вы используете CMake, добавьте следующее в свой файл
CMakeLists.txt:if (ANDROID) include(<path/to/android_openssl/CMakeLists.txt) endif()В качестве альтернативы, вы можете использовать переменную Qt для Android ANDROID_EXTRA_LIBS для добавления дополнительных библиотек, в основном
libcryptoиlibssl. Для QMake используйте:ANDROID_EXTRA_LIBS += \ <path_to_libs_dir>/libcrypto_1_1.so \ <path_to_libs_dir>/libssl_1_1.soДля CMake:
set(ANDROID_EXTRA_LIBS <path_to_libs_dir>/ibcrypto_1_1.so <path_to_libs_dir>/libssl_1_1.so CACHE INTERNAL "")Примечание: При нацеливании на несколько архитектур, включайте библиотеки OpenSSL для всех целевых архитектур.
- Используя Qt Creator, можно добавить дополнительные библиотеки. Дополнительную информацию см. в Qt Creator: Добавление библиотек в проекты.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/android-openssl-support.html