Qt on Android studio

Qt on Android studio

本文关键字:studio Android on Qt      更新时间:2023-10-16

使用Qt创建器,我遵守了 MyLib.so,MyLibQt.so(为Android编译)。MyLib是使用MyLibQt的包装器。在MyLibQt中,我有这样的行

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

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

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

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

抱歉回答

这么晚。问题的根本原因并不那么明显。适用于 Android 的 Qt 插件需要自定义库中的函数 main()。如果插件找不到该函数,插件将引发异常,并且插件将无法正确加载。

大约是Qt5.4-5.7。我不知道现在怎么样了,但可以表明也有同样的情况。

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

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

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