解决 QT 编译 Android 程序不支持 openssl 问题
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 支持。首先包括头文件:
然后使用以下行检查是否支持 SSL:
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 文件,将刚才解压的工程添加到自己的工程里即可解决。
openssl.pr 里包含的代码:
(1)在 ubuntu18.04 环境下,编译 Android 工程测试通过。
(2)在 win10 下编译 Android 工程测试通过
版权声明: 本文为 InfoQ 作者【DS小龙哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/21540997e10bf59a8f5027911】。文章转载请联系作者。
评论