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

时间:2015-09-25 09:21:34

标签: qt installation qtandroidextras

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

QT += qml quick widgets sql core bluetooth printsupport androidextras

我重新运行qmake,我收到以下错误:

  

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

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

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

enter image description here

我已经使用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重新编译了整个Qt,并进行了设置 Qt版本和QtCreator中的Qt Kit,更改了构建工具包,仍然弹出相同的错误。为什么呢?

1 个答案:

答案 0 :(得分:4)

额外模块旨在为特定平台提供特定的附加功能,因此在该平台上仅提供 。它可能是对iOS应用程序上的徽章编号的支持,对Windows跳转列表的支持或某些实用程序功能,可以从类型转换为相应的平台本机类型(例如QPixmapCGImageRef, Mac附加功能)。

有四个额外模块 - WinMac/iOSX11Android - 并且只要您为所选的特定进行编译针对特定套件的平台,一切都很好。对于桌面环境,它也是自动的:您的主机始终是您的目标机器。

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

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

android: QT += androidextras
mac: QT += macextras
// ...other platform specific and platform independent  settings

请参阅this answer以获取包含明确特定设置的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
}        

例如,请参阅this answer获取完整的Android示例,或查看this other answer获取一些有用的iOS特定关键字。