安卓工作室上的 Qt

Posted

技术标签:

【中文标题】安卓工作室上的 Qt【英文标题】:Qt on Android studio 【发布时间】: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是不必要的。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于安卓工作室上的 Qt的主要内容,如果未能解决你的问题,请参考以下文章

安卓工作室;未找到 jni.h

LXSession 上的 Qt4 WindowsStayOnTop

Qt 没有自动检测安卓工具包

安卓上的gps跟踪

QT5.9输入代码不提示

安卓上的 PyQt