轻松打开Excel文件的多种实用方法与技巧探索
893
2022-05-30
1. 问题
使用QT编译Android程序时,由于需要使用HTTPS的请求,打包的apk里需要附带openssl相关的库,不然无法使用https请求。
QT官方对openssl支持的说明,以及提供的解决办法:https://doc.qt.io/qt-5/android-openssl-support.html
Qt 安装包附带 OpenSSL 支持,但由于某些国家/地区的法律限制,OpenSSL 库不是该包的一部分。如果你的应用程序依赖于 OpenSSL,请考虑将 SSL 库与你的应用程序包 (APK) 一起打包,因为目标设备可能有也可能没有。
你可以使用QSslSocket::supportsSsl()静态函数来检查目标设备上的 SSL 支持。首先包括头文件:
#include < QSslSocket >
然后使用以下行检查是否支持 SSL:
qDebug () << "设备支持OpenSSL:" << QSslSocket :: supportsSsl ();
Android7.0更新的说明:
如果您的应用依赖平台库,则请参见 NDK 文档,了解使用公开 API 等效项替换普通私有 API 的典型修复。 您还可以链接至平台库,而无需实现此应用,如果应用使用的库是平台的一部分(例如 libpng),但不属于 NDK,则更可如此。 此情况下,请确保您的 APK 包含您打算链接到的所有 .so 文件。
注意:有些第三方库可能会链接至非公开 API。 如果您的应用使用这些库,那么当您的应用在下一个官方发布的 Android 版本上运行时可能会出现崩溃现象。
Android7.0开始,应用不应依赖或使用不属于 NDK的原生库,因为这些库可能会发生更改或从一个 Android 版本迁移至另一版本。 例如,从 OpenSSL 切换至 BoringSSL即属于此类更改。 此外,不同的设备可能提供不同级别的兼容性,因为不属于 NDK 中的平台库没有兼容性要求。 如果你必须在较旧设备上访问非 NDK
库,则请依据 Android API 级别进行加载。
2. 解决办法
去这里下载QT的openssl工程: https://github.com/KDAB/android_openssl
CSDN上的-: https://download.csdn.net/download/xiaolong1126626497/82644274
下载之后,将压缩包解压,放到自己现在的工程目录下,然后修改现在工程的pro文件,将刚才解压的工程添加到自己的工程里即可解决。
android: include($$PWD/android_openssl-master/openssl.pri)
openssl.pr里包含的代码:
!contains(QT.network_private.enabled_features, openssl-linked) { CONFIG(release, debug|release): SSL_PATH = $$PWD else: SSL_PATH = $$PWD/no-asm if (!versionAtLeast(QT_VERSION, 5.12.4)) { contains(ANDROID_TARGET_ARCH, armeabi-v7a) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.3/arm/libcrypto.so \ $$SSL_PATH/Qt-5.12.3/arm/libssl.so } contains(ANDROID_TARGET_ARCH, arm64-v8a) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.3/arm64/libcrypto.so \ $$SSL_PATH/Qt-5.12.3/arm64/libssl.so } contains(ANDROID_TARGET_ARCH, x86) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.3/x86/libcrypto.so \ $$SSL_PATH/Qt-5.12.3/x86/libssl.so } } else { if (equals(QT_VERSION, 5.12.4) || equals(QT_VERSION, 5.13.0)) { contains(ANDROID_TARGET_ARCH, armeabi-v7a) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.4_5.13.0/arm/libcrypto.so \ $$SSL_PATH/Qt-5.12.4_5.13.0/arm/libssl.so } contains(ANDROID_TARGET_ARCH, arm64-v8a) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.4_5.13.0/arm64/libcrypto.so \ $$SSL_PATH/Qt-5.12.4_5.13.0/arm64/libssl.so } contains(ANDROID_TARGET_ARCH, x86) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.4_5.13.0/x86/libcrypto.so \ $$SSL_PATH/Qt-5.12.4_5.13.0/x86/libssl.so } contains(ANDROID_TARGET_ARCH, x86_64) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/Qt-5.12.4_5.13.0/x86_64/libcrypto.so \ $$SSL_PATH/Qt-5.12.4_5.13.0/x86_64/libssl.so } } else { versionAtLeast(QT_VERSION, "5.14.0") { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/latest/arm/libcrypto_1_1.so \ $$SSL_PATH/latest/arm/libssl_1_1.so \ $$SSL_PATH/latest/arm64/libcrypto_1_1.so \ $$SSL_PATH/latest/arm64/libssl_1_1.so \ $$SSL_PATH/latest/x86/libcrypto_1_1.so \ $$SSL_PATH/latest/x86/libssl_1_1.so \ $$SSL_PATH/latest/x86_64/libcrypto_1_1.so \ $$SSL_PATH/latest/x86_64/libssl_1_1.so } else { equals(ANDROID_TARGET_ARCH, armeabi-v7a) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/latest/arm/libcrypto_1_1.so \ $$SSL_PATH/latest/arm/libssl_1_1.so } equals(ANDROID_TARGET_ARCH, arm64-v8a) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/latest/arm64/libcrypto_1_1.so \ $$SSL_PATH/latest/arm64/libssl_1_1.so } equals(ANDROID_TARGET_ARCH, x86) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/latest/x86/libcrypto_1_1.so \ $$SSL_PATH/latest/x86/libssl_1_1.so } equals(ANDROID_TARGET_ARCH, x86_64) { ANDROID_EXTRA_LIBS += \ $$SSL_PATH/latest/x86_64/libcrypto_1_1.so \ $$SSL_PATH/latest/x86_64/libssl_1_1.so } } } } }
(1)在ubuntu18.04 环境下,编译Android工程测试通过。
(2)在win10下编译Android工程测试通过
Android Qt
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。