【问题标题】:Issue with QT and Android 8.0: Error creating SSL context ()QT 和 Android 8.0 的问题:创建 SSL 上下文时出错 ()
【发布时间】:2017-11-23 20:29:06
【问题描述】:

Android 8.0 发布后,我们的 QT 应用程序无法在使用此新版本的设备上正常运行。我们在模拟器中看到的错误是“错误创建 SSL 上下文 ()”。该应用程序正常运行,但当它尝试进行 HTTP 调用时却失败了。

我们的 AndroidManifest 中有这一行:

<uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23"/>

我有时尝试更改此 targetSdkVersion,但没有任何效果。

另外,我们使用这个函数进行 HTTP 调用

void UrlLoader::load()
{
    this->setProperty("loading", true);
    QNetworkRequest request;
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");
    request.setUrl(m_url);

    QUrlQuery postData;

    if(params() != "") {
        QStringList pieces = params().split( "&" );
        foreach(QString value, pieces) {
            QStringList values = value.split( "=" );
            postData.addQueryItem(values[0], values[1]);
        }
    }

    m_netMan->post(request, postData.toString(QUrl::FullyEncoded).toUtf8());
}

当我们尝试读取结果时显示错误:

void UrlLoader::finished(QNetworkReply *reply)
{
    this->setProperty("loading", false);
    QJsonArray jsonArray;
    QJsonObject json;
    int error = reply->error();

    if(error == 0){
        QByteArray rawData = reply->readAll();
        if(QJsonDocument::fromJson(rawData).isArray()) {
            jsonArray = QJsonDocument::fromJson(rawData).array();
            emit this->loadedArray(jsonArray);
        } else {
            json = QJsonDocument::fromJson(rawData).object();
            if(json.empty()){
                this->setResponse(rawData);
            }
            emit this->loaded(json);
        }
        reply->abort ();
    } else {
        emit this -> crashed(this -> retornaError(error)) ;
    }
}

有人可以帮助我们吗? 最好的问候。

【问题讨论】:

  • 只是补充一下,对于 android 7 (android sdk 25) 一切正常,该问题仅在 android 8 (android sdk 26) 中出现

标签: android c++ qt http ssl


【解决方案1】:

也许您使用的私有 SSL 本机库不再与 Android 目标 API 级别兼容。查看Qt doc,以及Android doc,链接到平台库的NDK 应用程序部分。

【讨论】:

  • 我在 Qt 文档中读到“您可以使用 QSslSocket::supportsSsl() 静态函数来检查目标上的 SSL 支持。”我已经尝试过了,它返回 true,这不是表明它应该可以工作吗?
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多