QT和Android 8.0问题:创建SSL上下文时出错()

时间:2017-11-23 20:29:06

标签: android c++ qt http ssl

Android 8.0发布后,我们的QT App在使用此新版本的设备上无法正常运行。我们在模拟器中看到的错误是“创建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)) ;
    }
}

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

1 个答案:

答案 0 :(得分:0)

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