Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于Android和OpenSSL的Qt_Android_Qt - Fatal编程技术网

用于Android和OpenSSL的Qt

用于Android和OpenSSL的Qt,android,qt,Android,Qt,Qt安装为Android提供了预构建的二进制文件。从中可以看出,这些二进制文件是使用OpenSSL支持构建的,但由于法律限制,OpenSSL库不是包的一部分。建议是自己构建和打包这些库。两个问题: 我的应用程序支持Android 4.1及以上版本。我可以简单地依赖/system/lib/libssl.so和/system/lib/libcrypto.so而不是打包我自己的OpenSSL库吗?换句话说,这些库是否可能在任何运行OS 4.1及以上版本的设备上都不可用 如果我必须打包自己的库,建议库的

Qt安装为Android提供了预构建的二进制文件。从中可以看出,这些二进制文件是使用OpenSSL支持构建的,但由于法律限制,OpenSSL库不是包的一部分。建议是自己构建和打包这些库。两个问题:

  • 我的应用程序支持Android 4.1及以上版本。我可以简单地依赖
    /system/lib/libssl.so
    /system/lib/libcrypto.so
    而不是打包我自己的OpenSSL库吗?换句话说,这些库是否可能在任何运行OS 4.1及以上版本的设备上都不可用

  • 如果我必须打包自己的库,建议库的名称应该不同,例如,
    libprivatesl.so
    libprivatecypto.so
    。但是,如果我这样做,Qt二进制文件将无法识别它们,因为它们是硬编码的,以动态查找标准名称。我该怎么办?问候


  • 默认情况下,Qt将使用系统openssl,所以是的,您可以信赖它。如果您自己打包,那么您应该使用-openssl链接选项构建Qt,该选项将允许您使用重命名的libcrypto和libssl版本。

    • 在Android 5.0及更低版本上,QSslSocket将使用Android系统的libssl.so和libcrypto.ssl
    • 在Android>=6.0上,您的应用程序必须包含自己的libssl.so和libcrypto.ssl
    • 由于某些国家的法律限制,OpenSSL不是Qt安装的一部分
    • 您必须考虑在应用程序可用的区域中基于法律限制启用/禁用SSL特性。<李>
    • 不要使用预先构建的OpenSSL库,因为您发现这些库是关于Internet的
    1)如何在macOS上构建OpenSSL:

    android { # Android >= 6.0 requires apps to install their own libcrypto.so and libssl.so # https://subsite.visualstudio.com/DefaultCollection/android-openssl equals(ANDROID_TARGET_ARCH, armeabi-v7a) { ANDROID_EXTRA_LIBS += $$files($${PWD}/platform/android/lib/openssl/arch-armeabi-v7a/*.so) } equals(ANDROID_TARGET_ARCH, x86) { ANDROID_EXTRA_LIBS += $$files($${PWD}/platform/android/lib/openssl/arch-x86/*.so) } } 要使用macOS主机为arm、arm-v7a和x86构建OpenSSL Android LIB,如果使用Android NDK r10e,此脚本非常有效:

    **将库复制到Qt应用程序的项目文件夹:**

    platform/ └── android └── lib └── openssl ├── README.md ├── android-openssl-vsts.webloc ├── arch-armeabi-v7a │   ├── libcrypto.a │   ├── libcrypto.so │   ├── libssl.a │   └── libssl.so └── arch-x86 ├── libcrypto.a ├── libcrypto.so ├── libssl.a └── libssl.so 平台/ └── 安卓 └── 解放党 └── openssl ├── 自述文件 ├── android-openssl-vsts.webloc ├── arch-armeabi-v7a │   ├── libcrypto.a │   ├── libcrypto.so │   ├── libssl.a │   └── libssl.so └── arch-x86 ├── libcrypto.a ├── libcrypto.so ├── libssl.a └── libssl.so 2)添加到Qt yourapp.pro项目文件中:

    android { # Android >= 6.0 requires apps to install their own libcrypto.so and libssl.so # https://subsite.visualstudio.com/DefaultCollection/android-openssl equals(ANDROID_TARGET_ARCH, armeabi-v7a) { ANDROID_EXTRA_LIBS += $$files($${PWD}/platform/android/lib/openssl/arch-armeabi-v7a/*.so) } equals(ANDROID_TARGET_ARCH, x86) { ANDROID_EXTRA_LIBS += $$files($${PWD}/platform/android/lib/openssl/arch-x86/*.so) } } 安卓{ #Android>=6.0要求应用程序安装自己的libcrypto.so和libssl.so # https://subsite.visualstudio.com/DefaultCollection/android-openssl 等于(ANDROID_TARGET_ARCH,armeabi-v7a){ ANDROID_EXTRA_LIBS+=$$文件($${PWD}/platform/ANDROID/lib/openssl/arch-armeabi-v7a/*.so) } 等于(ANDROID_TARGET_ARCH,x86){ ANDROID_EXTRA_LIBS+=$$文件($${PWD}/platform/ANDROID/lib/openssl/arch-x86/*.so) } } 我浪费了很多时间试图在Linux和macOS上构建OpenSLL,直到我找到了那个脚本,并发现我需要使用Android NDK r10e或更早版本构建

    Qt指南对我不起作用。但是,如果我恢复到NDK r10e,它可能会工作


    我希望这能节省一些时间。

    为Android构建Qt移动应用程序如果应用程序应该在Android 7+上运行,就会出现问题,因为谷歌删除了openssl。您必须自己构建openssl
    。所以
    libs。Qt中有一个关于如何添加openssl的文档:不幸的是,这在Linux或MacOS上失败,错误未知参数:
    -mandroid
    另请参见

    主要用于Android和其他操作系统的OpenSSL
    libcrypto
    libsssl
    静态和动态库的工作构建脚本可以在这里找到:

    本回购协议采纳了和回购协议中最可行的想法——非常感谢他们的作者!关于这些脚本创建的更多想法可以在那里找到。从下载和提取openssl到为
    x86
    armeabi-v7a
    arm64-v8a
    体系结构生成lib,生成的脚本都能为您成功完成所有工作


    默认OpenSSL版本与当前在Qt Creator中使用的版本相同

    在Android>=6.0上,您的Qt Android应用程序必须包含您自己的libssl.so和libcrypto.so。虽然Android系统包含这些库,但您的应用程序无法使用它们。要在macOS主机上构建arm、armv7和x86 OpenSSL,此脚本可以工作,请参阅fork以及自述文件的附加说明:with for sript和
    android-ndk-r10e-linux-x8664.zip
    -为
    armeabi-v7a
    x86
    构建良好。如何为
    arm64-v8a构建?另外,max-Android-API也在那里
    Android-21
    。是否可以或需要在以后更新此脚本以获得更高版本?对于任何NDK版本,具有工作脚本的Forked repo:-将有工作脚本(至少对于Linux和Mac)。