Android和QPluginLoader问题

时间:2014-05-29 19:23:54

标签: android c++ qt

我使用qt 5.2.1将我的Qt应用程序归为android,直到我尝试在应用程序中加载插件时才进行。让我解释一下,我有一个应用程序,它使用我自己使用Q_DECLARE_INTERFACE宏创建的几个插件。该应用程序在linux / windows中运行良好。 当我尝试使用pluginLoader.instance();加载插件时,方法pluginLoader.errorString();会引发休闲错误:

  

D / Qt(17850):sources \ mainWindows.cpp:393(无效   coreVLab :: vlMainWindows :: loadPlugin(QString)):"共享库是   没找到。"

用于传递到插件路径的位置是

  

资产:/libExampleQtListener_d.so

我当然是100%安全的插件位于此路径中.. 一些帮助需要...感谢阅读和抱歉英语。

1 个答案:

答案 0 :(得分:0)

我的解决方案:

#ifdef __ANDROID__
void copyPlugin(const QDir &dir, const QString&file) {
    auto dataLocation = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
    QString destPluginName = dataLocation + "/" + file;
    if(QFile(destPluginName).exists()) {
        return;
    }
    QFile sourcePlugin(QFileInfo(dir,file).filePath());
    sourcePlugin.copy(destPluginName);
    QFile destPlugin(destPluginName);
    destPlugin.setPermissions(QFileDevice::ExeOwner | QFileDevice::ExeUser | QFileDevice::ExeOther | QFileDevice::ExeGroup |
                                      QFileDevice::ReadOwner | QFileDevice::ReadUser | QFileDevice::ReadOther | QFileDevice::ReadGroup |
                                      QFileDevice::WriteOwner| QFileDevice::WriteUser | QFileDevice::WriteOther | QFileDevice::WriteGroup);
}

void copyPlugins(const QDir &dir, const QStringList &filesList) {
    for(const auto file : filesList) {
        copyPlugin(dir,file);
    }
}
#endif

之后我只是从新位置加载插件。

当您向资源添加文件时,Qt会更改权限。