我使用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%安全的插件位于此路径中.. 一些帮助需要...感谢阅读和抱歉英语。
答案 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会更改权限。