Android是否支持Qt QSharedMemory?

时间:2018-07-10 16:19:28

标签: android qt shared-memory

我正在尝试使用QSharedMemory。它可以在Windows下正常运行,而不能在Android上运行。最初的create调用失败。它没有链接到键,因为我使用了不同的值。

我的main.cpp如下:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QSharedMemory>
#include <QDebug>

int main(int argc, char *argv[])
{
  QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  QGuiApplication app(argc, argv);
  QQmlApplicationEngine engine;
  engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
  if (engine.rootObjects().isEmpty())
    return -1;

  QSharedMemory _sharedMemory("QtMemTest", nullptr);
  if (!_sharedMemory.create(sizeof(int), QSharedMemory::ReadWrite))
    qDebug() << "Failed " << _sharedMemory.errorString();
  else
    qDebug() << "Size " << QString::number(_sharedMemory.size());

  return app.exec();
}

在Windows上,我得到:

  

大小“ 4096”

在Android上:

  

main.cpp:17(int main(int,char **)):失败的“ QSharedMemory :: create:   无法锁定”

这是一个单一的过程,只是尝试创建共享内存块。

这确实看起来像是一个基本问题...我需要特定的Android权限吗?这在Android中可用吗?

我正在使用Qt Creator 4.6.2,针对Android armv7的目标是gcc 4.9,Qt 5.9.6。 我已经在运行6.0和8.0的Android设备上尝试过。

修改

在Qt 5.11.1中进行了尝试,问题仍然相同。

此外,在运行此命令时,我在应用程序输出控制台上收到一系列警告:

  

W libsharedExample.so:(null):0((null)):未实现的代码。

注释create调用将删除6条此类警告。如何弄清楚在给定的Qt版本中实现了哪些功能?如果未在Android上实现此功能,那么应用程序应该如何与其服务进行通信(这是一个不同的过程)?

1 个答案:

答案 0 :(得分:1)

因此此类未在Android上实现。 unimplemented code警告是真实的。

QtRemoteObject是一种在Android上的进程之间移动数据的可靠方法。