Неизвестный модуль в.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.

Другие вопросы по тегам