Android 是否支持 Qt QSharedMemory?

Is Qt QSharedMemory supported on Android?

我正在尝试使用 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,我得到:

Size "4096"

在 Android:

main.cpp:17 (int main(int, char**)): Failed "QSharedMemory::create: unable to lock"

这是单个进程,只是试图创建共享内存块。

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

我正在使用 Qt Creator 4.6.2,目标是 gcc 4.9,Qt 5.9.6 for Android armv7。 我试过 Android 设备 运行 6.0 和 8.0.

编辑

用 Qt 5.11.1 试过了,问题还是一样。

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

W libsharedExample.so: (null):0 ((null)): Unimplemented code.

注释掉 create 调用会删除 6 个此类警告。如何确定在给定的 Qt 版本中实现了哪些功能?如果未为 Android 实现此功能,应用程序应如何与其服务通信(这是一个不同的进程)?

所以这个 class 没有在 Android 上实现。 unimplemented code 警告是真实的。

在 Android 上的进程之间移动数据的可靠方法似乎是使用 QtRemoteObject。