Spec-Zone.ru › Qt

Добавление поддержки 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 вручную:

  1. Скачайте исходные коды OpenSSL 1.1.x.
  2. Разархивируйте исходные коды в папку и перейдите в эту папку с помощью консоли.

    Примечание: Если ваша платформа разработки Windows, вам необходимо msys с perl v5.14 или новее для сборки OpenSSL.

  3. Добавьте Android LLVM инструмент (NDK r20b или r21) в вашу переменную среды PATH:
    export PATH="<android_ndk_path>/toolchains/llvm/prebuilt/<host>/bin":$PATH
  4. Настройте исходные коды OpenSSL для сборки под Android с помощью следующей команды:
    ./Configure shared android-<arch> -D__ANDROID_API__=21

    Где <arch> может принимать значение: arm64, x86, x86_64, arm.

    Примечание: Вы должны включить или отключить функции SSL в соответствии с юридическими ограничениями в регионе, где ваше приложение доступно. Дополнительную информацию о настраиваемых функциях см. на странице Опции конфигурации OpenSSL.

  5. Для сборки 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.2/android-openssl-support.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API