Hinzufügen von OpenSSL-Unterstützung für Android

Das Qt-Installationspaket wird mit OpenSSL-Unterstützung geliefert, aber die OpenSSL-Bibliotheken sind aufgrund rechtlicher Einschränkungen in einigen Ländern nicht Teil des Pakets. Wenn Ihre Anwendung von OpenSSL abhängt, sollten Sie in Erwägung ziehen, die SSL-Bibliotheken mit Ihrem Anwendungspaket (APK oder AAB) zu paketieren, da sie auf dem Zielgerät vorhanden sein können oder auch nicht.

Sie können die statische Funktion QSslSocket::supportsSsl() verwenden, um die SSL-Unterstützung auf dem Zielgerät zu überprüfen. Fügen Sie zunächst den Header ein:

#include <QSslSocket>

Verwenden Sie dann die folgende Zeile, um zu prüfen, ob SSL unterstützt wird:

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

Überprüfen Sie Qt Creator's Application Output Abschnitt oder die Android logcat für diese Log-Meldung.

Hinzufügen von OpenSSL-Bibliotheken

Mit dem praktischen OpenSSL für Android Repository können Sie OpenSSL-Bibliotheken direkt in Ihr eigenes Projekt einbinden.

Mit CMake fügen Sie Folgendes zu Ihrem CMakeLists.txt hinzu:

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()

Oder wenn Sie das Repository in ein Unterverzeichnis geklont haben:

include(<path/to/android_openssl>/android_openssl.cmake)

Fügen Sie dann die Bibliotheken zu Ihren Targets hinzu:

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()

Für qmake fügen Sie Folgendes zu Ihrer .pro Datei hinzu:

android: include(<path/to/android_openssl/openssl.pri)

Alternativ können Sie weitere Bibliotheken hinzufügen, z. B. libcrypto und libssl. Für CMake verwenden Sie:

set_target_properties(<target_name> PROPERTIES
    QT_ANDROID_EXTRA_LIBS "<path_to_libs_dir>/libcrypto_3.so" "<path_to_libs_dir>/libssl_3.so"
)

Oder für qmake verwenden:

ANDROID_EXTRA_LIBS += \
    <path_to_libs_dir>/libcrypto_3.so \
    <path_to_libs_dir>/libssl_3.so

Hinweis: Wenn Sie mehrere Architekturen anvisieren, fügen Sie die OpenSSL-Bibliotheken für alle anvisierten Architekturen ein.

Mit Qt Creator ist es möglich, zusätzliche Bibliotheken hinzuzufügen. Für weitere Informationen, siehe Qt Creator: Hinzufügen von Bibliotheken zu Projekten.

Erstellen von OpenSSL für Android

Die folgenden Anweisungen führen Sie dazu, die OpenSSL-Bibliotheken manuell zu erstellen:

  1. Laden Sie die OpenSSL-Quellen herunter.
  2. Extrahieren Sie die Quellen in einen Ordner und navigieren Sie mit der CLI zu diesem Ordner.

    Hinweis: Wenn Ihre Entwicklungsplattform Windows ist, benötigen Sie msys mit perl 5.14 oder höher, um OpenSSL zu erstellen.

  3. Fügen Sie die Android LLVM Toolchain zu Ihrem Pfad hinzu, z.B. für die Verwendung unter Linux:
    export PATH=~/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/<host>/bin:$PATH

    Das Android SDK wird üblicherweise von Qt Creator oder Android Studio an den folgenden Stellen installiert:

    • Linux: ~/Android/Sdk/
    • macOS: ~/Library/Android/sdk/
    • Windows: C:\Benutzer\<BENUTZER>\AppData\Local\Android\Sdk\
  4. Konfigurieren Sie die OpenSSL-Quellen, um sie für Android zu erstellen, indem Sie den folgenden Befehl verwenden, wobei <arch> einen der folgenden Werte annehmen kann: arm, arm64, x86 oder x86_64:
    ./Configure shared android-<arch> -D__ANDROID_API__=28

    Hinweis: Sie müssen die Aktivierung oder Deaktivierung der SSL-Funktionen auf der Grundlage der rechtlichen Einschränkungen in der Region, in der Ihre Anwendung verfügbar ist, in Betracht ziehen. Weitere Informationen über die konfigurierbaren Funktionen finden Sie unter OpenSSL Configure Options.

  5. Ohne ein Suffix lädt Android die Systembibliotheken libcrypto.so und libssl.so. Diese können sich von Ihren Bibliotheken oder von den von Qt erwarteten Versionen unterscheiden. Um sicherzustellen, dass Qt-Anwendungen die manuell erstellten OpenSSL-Bibliotheken laden können, führen Sie die folgenden Befehle aus:
    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

    Hinweis: Obwohl die gemeinsam genutzten Bibliotheken libcrypto und libssl nicht versioniert sind, haben sie ein _3 Suffix.

    Setzen Sie dann die Umgebungsvariable in Ihrer main.cpp-Datei:

    qputenv("ANDROID_OPENSSL_SUFFIX", "<custom_suffix>");

    Hinweis: Android lädt keine versionierten Bibliotheken.

© 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.