Неизвестный модуль в.pro файле - не может собрать приложение с включенным модулем androidextras
Я работаю над некоторым приложением Qt/QML, которое будет развернуто на ОС Android. Теперь мне нужен модуль 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
комплект установлен, как вы можете видеть на скриншоте Maintenance Tool:
Я перекомпилировал весь 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
, установите Qt версию и Qt Kit в QtCreator, изменили сборку и все равно появляется та же ошибка. Зачем?
1 ответ
Дополнительные модули предназначены для предоставления дополнительных функций, специфичных для определенной платформы и, следовательно, доступных только на этой платформе. Это может быть поддержка номера значка в приложениях для iOS, поддержка списков переходов Windows или некоторые служебные функции для преобразования из типа в собственный тип соответствующей платформы (например, QPixmap
в CGImageRef
опять же в мак дополнений).
Существует четыре дополнительных модуля - Win, Mac / iOS, X11, Android - и до тех пор, пока вы компилируете для конкретной выбранной платформы в соответствии с конкретным комплектом, все в порядке. И это также автоматически для рабочего стола: ваш хост-компьютер всегда является вашим целевым компьютером.
Вместо этого мобильные комплекты используются для кросс-компиляции с определенного (настольного) хост-компьютера на другой (мобильный) целевой компьютер. В этих настройках вы можете легко (и ошибочно) скомпилировать код конкретной платформы с неверным набором.
Вообще говоря, вы должны поместить специфичные для платформы модули / код в условные выражения, чтобы гарантировать, что он компилируется только для конкретного набора, для которого они доступны. Это особенно верно для программного обеспечения, которое должно быть скомпилировано как для настольных, так и для мобильных платформ или для разных настольных платформ. Условно в .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.