.pro 文件中的未知模块 - 无法构建包含 androidextras 模块的应用程序

Ker*_*nic 5 installation qt qtandroidextras

我正在开发一些将部署到 Android 操作系统的 Qt/QML 应用程序。现在,我需要模块,androidextras但如果我按如下方式放入androidextras我的.pro文件中

QT += qml quick widgets sql core bluetooth printsupport androidextras
Run Code Online (Sandbox Code Playgroud)

然后我重新运行qmake,出现以下错误:

项目错误:QT 中的未知模块:androidextras

我还尝试打开并运行示例项目Qt Notifier,但发生了同样的错误,因此我无法构建我的应用程序或示例,这应该是开箱即用的。

我使用KUbuntu 15.04gcc version 4.9.2 (Ubuntu 4.9.2-10ubuntu13)编译器和Desktop Qt 5.5.0 GCC 64bitQt的版本。我如何构建这个androidextras模块?Android arm v7正如您从维护工具屏幕截图中看到的那样,我已经安装了套件:

在此处输入图片说明

我用 重新编译了整个 Qt clear && ./configure -opensource -confirm-license -verbose -cups -plugin-sql-mysql -android-sdk /opt/android-sdk-linux -android-ndk /opt/android-ndk-r10d && make && make install,在 QtCreator 中设置了 Qt 版本和 Qt 套件,更改了构建套件,但仍然弹出相同的错误。为什么?

BaC*_*Zzo 6

Extras 模块旨在提供特定于某个平台的附加功能,因此在该平台上可用。它可能是iOS应用上的徽章数量的支持,到Windows跳转列表或者一些实用功能的支持,从一个类型转换为相应的本机平台类型(例如QPixmapCGImageRef,又在苹果演员)。

存在四个额外模块 - WinMac/iOSX11Android - 只要您针对特定工具包针对特定选择的平台进行编译,一切都很好。对于桌面环境,它也是自动的:您的主机始终是您的目标机器。

移动工具包用于从某个(桌面)主机到另一个(移动)目标机器进行交叉编译。在此设置中,您可以轻松(并且错误地)使用错误的工具包编译特定于平台的代码。

一般来说,您应该将特定于平台的模块/代码放在条件语句中,以确保仅针对它们可用的特定工具包进行编译。对于必须为桌面和移动平台或跨不同桌面平台编译的软件尤其如此。.pro文件中的条件可能如下所示:

android: QT += androidextras
mac: QT += macextras
// ...other platform specific and platform independent  settings
Run Code Online (Sandbox Code Playgroud)

请参阅此答案以获取 android.pro示例文件,其中还包含清单特定设置。

在代码中也应遵循相同的方法,即检查操作系统并有条件地编译平台代码。例如,一个函数的多平台实现可能如下所示:

if defined(Q_OS_ANDROID)
#include <QtAndroid>
#include <QAndroidJniObject>
#endif

// other code...

void YourClass::function()
{
#if defined(Q_OS_ANDROID)
// platform code
#elif defined(Q_OS_WIN)

#endif
}        
Run Code Online (Sandbox Code Playgroud)

例如,请参阅此答案以获取完整的 Android 示例或此其他答案以获取一些有用的 iOS 特定关键字。