【问题标题】:Qt on Android studio安卓工作室上的 Qt
【发布时间】:2016-04-22 10:44:06
【问题描述】:

使用 Qt creator,我编译了 MyLib.so、MyLibQt.so(为 android 编译)。 MyLib 是使用 MyLibQt 的包装器。在 MyLibQt 我有这样的行

if (!QApplication::instance())
{
   g_bCleanUpInstance = true;
   new QApplication(argc, argv);
}

在 Android Studio,我将这些库添加到项目 (jniLibs)。该lib已成功添加到apk,已编译。 问题是:当我尝试从 MyLib 调用方法时,使用前面的代码行,我得到异常:

A/MyLibQt.dll: (null):0 ((null)): 此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“android”

我添加到 jniLibs libqtforandroid.so,但没有帮助。所以,我的问题是:如何解决?

【问题讨论】:

  • 如果你正在写一个Qt应用程序,android studio是不必要的。

标签: android c++ qt


【解决方案1】:

从错误消息中可以明显看出,Qt 应用程序不仅仅是一些你可以随意运行的代码,它运行在它自己的“运行时”上,即平台插件,它提供Qt代码和设备之间的链接。

当您使用 Qt 工具链时,平台插件将与 Qt 应用程序捆绑在一起,对于 android Qt 应用程序,Qt 代码无论如何都会编译为.so 库。但是您将其显式编译为库,因此不包含平台插件,因为假设您将在包含它的 Qt 应用程序中使用该库。

可能可以手动执行,但我不是该主题的专家,可能存在其他复杂情况,例如未在为支持 Qt 应用程序而定制的活动上运行,或 Qt 所需的其他一些辅助文件它通常由 Qt 工具链创建和捆绑,但做相反的事情是安全的选择 - 只需使用 Qt 工具链构建您的 Qt 应用程序,并使用其中的必要 Java 代码。

【讨论】:

    【解决方案2】:

    抱歉这么晚才回复。 问题的根本原因并不那么明显。 适用于 Android 的 Qt 插件需要自定义库中的 main() 函数。如果插件没有找到该函数,则插件抛出异常,插件将无法正确加载。

    大约是 Qt5.4-5.7。我不知道现在情况如何,但可以建议存在相同的情况。

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2018-07-10
      • 2013-07-08
      • 2017-04-17
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多