The Qt installation package comes with OpenSSL support but the OpenSSL libraries are not part of the package due to legal restrictions in some countries. If your application depends on OpenSSL, consider packaging the SSL libraries with your Application Package (APK) as the target device may or may not have them.
可以使用 QSslSocket::supportsSsl () static function to check for SSL support on the target device. First include the header:
#include <QSslSocket>
Then use the following line to check if SSL is supported:
qDebug() << "Device supports OpenSSL: " << QSslSocket::supportsSsl();
Check Qt Creator's
Application Output
section or the Android
logcat
for the result.
A convenient Github repository with prebuilt and a build script can be used without the need for manual step-by-step build. For more information, see OpenSSL for Android . If you download the repository, you can then skip to Using OpenSSL Libraries with Qt for Android .
The following instructions guide you to build the OpenSSL libraries manually:
Extract the sources to a folder and navigate to that folder using the CLI.
注意:
If your development platform is Windows, you need
msys
with
perl
v5.14 or later to build OpenSSL.
export PATH="<android_ndk_path>/toolchains/llvm/prebuilt/<host>/bin":$PATH
./Configure shared android-<arch> -D__ANDROID_API__=XX
Where:
arm
,
arm64
,
x86
,
x86_64
.
XX
is a two-digit number equal to the minimum API level for this Qt version: see
Qt for Android support
.
注意: You must consider enabling or disabling the SSL features based on the legal restrictions in the region where your application is available. For more information about the configurable features, see OpenSSL Configure Options .
libcrypto
and
libssl
shared libraries that are not versioned, but with an
_3
suffix, run:
make -j$(nproc) SHLIB_VERSION_NUMBER= SHLIB_EXT=_3.so build_libs
If you want to use a different suffix, you must change
SHLIB_EXT
in the previous command, and set the
ANDROID_OPENSSL_SUFFIX
environment variable before you access the Qt Network API.
注意:
Without a suffix, Android loads the system libraries
libcrypto.so
and
libssl.so
. These may be different versions from your libraries or from what Qt expects.
make -j$(nproc) SHLIB_VERSION_NUMBER= SHLIB_EXT=<custom_suffix>.so build_libs
Then set the environment variable in your main.cpp file:
qputenv("ANDROID_OPENSSL_SUFFIX", "<custom_suffix>");
注意: Android does not load versioned libraries.
Depending on the method you obtained the OpenSSL libraries, you can use one of the following step to include those libraries in your project:
Using the convenience
OpenSSL for Android
repository, you can directly add the include projects into your own project, by adding the following to your
.pro
文件:
android: include(<path/to/android_openssl/openssl.pri)
Or if using CMake, add the following to your
CMakeLists.txt
:
if (ANDROID) include(<path/to/android_openssl/CMakeLists.txt) endif()
Alternatively, you can use the following project variable to add extra libraries, such as
libcrypto
and
libssl
. For QMake use:
ANDROID_EXTRA_LIBS += \ <path_to_libs_dir>/libcrypto_3.so \ <path_to_libs_dir>/libssl_3.so
For CMake:
set_property(TARGET <target name> PROPERTY QT_ANDROID_EXTRA_LIBS <path_to_libs_dir>/libcrypto_3.so <path_to_libs_dir>/libssl_3.so)
注意: When targeting multiple architectures, include OpenSSL libraries for all the targeted architectures.