Android 8.0 发布后,我们的 QT 应用程序无法在使用此新版本的设备上正常运行。我们在模拟器中看到的错误是“Error creating SSL context ()”。该应用程序运行正常,但当它尝试进行 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)) ;
}
}
有人可以帮助我们吗? 最好的问候。
最佳答案
也许您对私有(private) SSL native 库的使用不再与 Android 目标 API 级别兼容。查看Qt doc ,以及 Android doc , NDK Apps Linking to Platform Libraries 部分。
关于android - QT 和 Android 8.0 : Error creating SSL context () 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47462879/