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:
- Laden Sie die OpenSSL-Quellen herunter.
- 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
mitperl
5.14 oder höher, um OpenSSL zu erstellen. - 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\
- 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
oderx86_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.
- Ohne ein Suffix lädt Android die Systembibliotheken
libcrypto.so
undlibssl.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
undlibssl
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.