5

我正在开发一些将部署到 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 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 Kit,更改了构建工具包,但仍然弹出相同的错误。为什么?

4

1 回答 1

6

Extras 模块旨在提供特定于某个平台的附加功能,因此在该平台上可用。它可能是对 iOS 应用程序上的徽章编号的支持,对 Windows 跳转列表的支持或将类型转换为相应平台原生类型的某些实用程序功能(例如QPixmapCGImageRef在 Mac extras 中再次转换为 )。

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

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

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

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

有关包含清单特定设置的 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
}        

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

于 2015-09-27T11:58:26.923 回答