"модуль" QtQuick "не установлен" (портирование Android)

Я пытаюсь портировать свое приложение в android с помощью qt5.4, но у меня есть эта ошибка:

W/Qt (30916): qrc:/qml/FrontEnd.qml: 1 ((null)): qrc:/qml/FrontEnd.qml: 1:1: модуль "QtQuick" не установлен

Это мой .pro

TEMPLATE = app
TARGET = sandbox-build-android
QT+= qml quick widgets printsupport xml svg
INCLUDEPATH += [...]# my include path
# Input
HEADERS += [...] # my include
SOURCES += [...] # my source
RESOURCES += ../sandbox/resources.qrc
LIBS += -L$$PWD/../../edalab/else-datamodel-classes/build-buildAndroid-Android_for_armeabi_v7a_GCC_4_9_Qt_5_4_0-Debug/ -lbuildAndroid
INCLUDEPATH += [...]
DEPENDPATH += [...]
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
 ANDROID_EXTRA_LIBS = [..]
}
# Default rules for deployment.
include(deployment.pri)

Это мое развертывание .pri:

android-no-sdk {
 target.path = /data/user/qt
 export(target.path)
 INSTALLS += target
} else:android {
 x86 {
 target.path = /libs/x86
 } else: armeabi-v7a {
 target.path = /libs/armeabi-v7a
 } else {
 target.path = /libs/armeabi
 }
 export(target.path)
 INSTALLS += target
} else:unix {
 isEmpty(target.path) {
 qnx {
 target.path = /tmp/$${TARGET}/bin
 } else {
 target.path = /opt/$${TARGET}/bin
 }
 export(target.path)
 }
 INSTALLS += target
}
export(INSTALLS)

В моем FrontEnd.qml у меня есть этот импорт:

import QtQuick 2.4
import QtQuick.Controls 1.3

Я не вижу существенного отличия от .pro примерного проекта, который корректно работает на Android.

UPDATE

Я увидел еще один пример "Календарь", и я заметил, что мне не хватало этот флаг "OTHER_FILES", поэтому я добавил к нему все пути моих файлов QML, но проблема не устранена.

Я также извлек apk со своего смартфона, и я извлек его. Я заметил, что мой apk не включил некоторые библиотеки, которые присутствуют в образце apk, который работает:

libqml_Qt_labs_folderlistmodel_libqmlfolderlistmodelplugin.so libqml_Qt_labs_settings_libqmlsettingsplugin.so libqml_QtQml_Models.2_libmodelsplugin.so libqml_QtQml_StateMachine_libqtqmlstatemachine.so libqml_QtQuick.2_libqtquick2plugin.so libqml_QtQuick_Controls_libqtquickcontrolsplugin.so libqml_QtQuick_Controls_Styles_Android_libqtquickcontrolsandroidstyleplugin.so libqml_QtQuick_Dialogs_libdialogplugin.so libqml_QtQuick_Dialogs_Private_libdialogsprivateplugin.so libqml_QtQuick_Layouts_libqquicklayoutsplugin.so libqml_QtQuick_Window.2_libwindowplugin.so

Структура моего проекта

.
├── Project1
│   ├── file.pro
│   ├── images
│   │   ├── ...
│   ├── include
│   │   ├── sub1
│   │   │   ├── file1.hh
│   │   │   └── sub1.1
│   │   │   └── file2.hh
│   │   └── sub2
│   │      └── file3.hh
│   ├── qml
│   │   ├── file1.qml
│   │   └── sub1
│   │      ├── file2.qml
│   │      └── sub1.1
│   │         └── file3.qml
│   ├── README.txt
│   ├── resources.qrc
│   ├── src
│   │   ├── sub1
│   │   │   ├── file1.cc
│   │   │   └── sub1.1
│   │   │      └── file2.cc
│   │   ├── sub2
│   │   │   └── file3.cc
│   │   └── Main.cc
│   └── webUtils
│   └── file.html
1 ответ

Вот пример файла .pro. Я отказался от слишком конкретных вещей. Структура каталогов выглядит следующим образом:

.
├── Project
│   ├── app.pro
| ├── android
| │   ├── res
| | │   ├── drawable-hdpi
| | | └── ... 
| | ├── AndroidManifest 
│   ├── content
│   │   ├── file1.qml
│   │   └── ...
| ├── icons
│   ├── images
│   │   ├── ...
|   ├── include
│   │   ├── sub1
│   │   │   ├── file1.hh
│   │   │   └── sub1.1
│   │   │   └── file2.hh
│   │   └── sub2
│   │      └── file3.hh 
| ├── ios
| | └── Info.plist
| ├── libs 
| | ├── droid
| | ├── ios
| | ├── macx 
| | ├── nix
| | ├── win
| | └── winphone
│   ├── Qml.qrc
| ├── Resources.qrc 
| ├── SubProject
| ├── translations
| | ├── app_en.qm
| | ├── ...
│   ├── [.cpp]
| ├── [.h]
| ├── app_en.ts

В отличие от вас у меня нет директории src, а файлы QML перемещаются в каталог content. У меня есть файл ресурсов для тех же файлов QML, т.е. Qml.qrc. Файлы переводов (aka .ts files) содержатся в основном каталоге с источниками. Файлы скомпилированного перевода (aka .qm) вместо этого находятся в подкаталоге translations.

В каталоге android и ios содержатся файлы, специфичные для платформ, в частности мы имеем res каталог, который полезен для предоставления значок и обои для приложения для платформы Android. Тот же самый android dir используется как источник пакета APK (см. Ниже .pro). Каталог ios содержит список свойств.

Каталог lib содержит поддиректор для каждой платформы с перекомпилированной библиотекой для этой среды.

Вот соответствующий файл проекта:

TEMPLATE = app
macx:CONFIG += app_bundle
# QT IMPORT
QT += gui qml quick [...]
#include subproject
include(SubProject/subproject.pri)
# Default rules for deployment
include(deployment.pri)
# Compilation flags [specific to the different OSs]
include(flags.pri)
TARGET = "appName" # just needed for me since I change target between "App" and "AppPRO"
INCLUDEPATH += [...]
 $$PWD/include/sub1 \
 $$PWD/include/sub2 
!isEmpty(QMAKE_LFLAGS_RPATH):LIBS += \
$$QMAKE_LFLAGS_RPATH$${TOP_BUILD_DIR}/lib #(UNIX ONLY): libs linked preferibly at runtime
# DESKTOP PLATFORMS
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/win/ -lLIBNAME1
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/win/ -lLIBNAMEd
unix:!macx:!ios:!android: LIBS += -L$$PWD/lib/nix -lLIBNAME
macx: LIBS += -L$$PWD/lib/macx/ -lLIBNAME
# MOBILE PLATFORMS
ios: LIBS += -L$$PWD/lib/ios -lLIBNAME
android: LIBS += -L$$PWD/lib/droid -lLIBNAME
winphone: LIBS += -L$$PWD/lib/winphone/ -lLIBNAME
# ADDITIONAL ANDROID SETTING
ANDROID_EXTRA_LIBS = $$PWD/lib/droid/libLIBNAME.so
# SOURCE FILES (.CPP)
SOURCES += [.cpp]
# HEADER FILES (.H)
HEADERS += [.h]
# objective-c++ sources for ios platform 
ios {
 QT += gui_private
 #QT -= printsupport
 HEADERS += [.h]
 OBJECTIVE_SOURCES += [.mm]
}
# QML sources are added here!
RESOURCES += Resources.qrc \
 Qml.qrc
# ANDROID ADDITION
android {
 ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android # contains the dir structure of the APK, actually it contains just res
 OTHER_FILES += androidPro/AndroidManifest.xml # <--- manifest for the Pro version
}
#### ICONS SECTION ####
win32:RC_ICONS += $$ICON_PATH/multiIcon.ico # ICONS for WIN
mac:!ios:ICON = $$ICON_PATH/icons.icns # ICONS for MAC
#IOS BUNDLE # ICONS for IOS
ios {
 BUNDLE_DATA.files = [...]
 QMAKE_BUNDLE_DATA += BUNDLE_DATA
QMAKE_INFO_PLIST = $$PWD/ios/Info.plist
}
# list QML sources for linguist purposes
lupdate_only{
SOURCES = *.qml \
 *.js \
 content/*.qml \
 content/*.js
}
# and the .ts file for translation!
TRANSLATIONS = app_en.ts \
 app_fr.ts \
 app_de.ts \
 app_sp.ts \
 app_en.ts

Это manifest. Qt Creator позволяет редактировать через интерфейс интерфейса или текстовое редактирование. Чтобы добавить манифест (Qt Creator 3.3), как указано в комментариях, просто перейдите к Projects > Build > Build Android APK > Create Templates.

<!--?xml version="1.0"?-->
<manifest android:versioncode="21" android:installlocation="auto" package="JAVA_PACKAGE" android:versionname="1.0.12" xmlns:android="http://schemas.android.com/apk/res/android">
 <application android:hardwareaccelerated="true" android:label="@string/app_name" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:icon="@drawable/icon">
 <activity android:screenorientation="unspecified" android:label="@string/app_name" android:configchanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity">
 <intent-filter>
 <action android:name="android.intent.action.MAIN">
 <category android:name="android.intent.category.LAUNCHER">
 </category></action></intent-filter>
 <meta-data android:value="app" android:name="android.app.lib_name">
 <meta-data android:resource="@array/qt_sources" android:name="android.app.qt_sources_resource_id">
 <meta-data android:value="default" android:name="android.app.repository">
 <meta-data android:resource="@array/qt_libs" android:name="android.app.qt_libs_resource_id">
 <meta-data android:resource="@array/bundled_libs" android:name="android.app.bundled_libs_resource_id">
 <!-- Deploy Qt libs as part of package -->
 <meta-data android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --" android:name="android.app.bundle_local_qt_libs">
 <meta-data android:resource="@array/bundled_in_lib" android:name="android.app.bundled_in_lib_resource_id">
 <meta-data android:resource="@array/bundled_in_assets" android:name="android.app.bundled_in_assets_resource_id">
 <!-- Run with local libs -->
 <meta-data android:value="-- %%USE_LOCAL_QT_LIBS%% --" android:name="android.app.use_local_qt_libs">
 <meta-data android:value="/data/local/tmp/qt/" android:name="android.app.libs_prefix">
 <meta-data android:value="-- %%INSERT_LOCAL_LIBS%% --" android:name="android.app.load_local_libs">
 <meta-data android:value="-- %%INSERT_LOCAL_JARS%% --" android:name="android.app.load_local_jars">
 <meta-data android:value="-- %%INSERT_INIT_CLASSES%% --" android:name="android.app.static_init_classes">
 <!-- Messages maps -->
 <meta-data android:value="@string/ministro_not_found_msg" android:name="android.app.ministro_not_found_msg">
 <meta-data android:value="@string/ministro_needed_msg" android:name="android.app.ministro_needed_msg">
 <meta-data android:value="@string/fatal_error_msg" android:name="android.app.fatal_error_msg">
 <!-- Messages maps -->
 <!-- Splash screen -->
 <meta-data android:resource="@drawable/splash" android:name="android.app.splash_screen_drawable">
 <!-- Splash screen -->
 </meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></meta-data></activity>
 </application>
 <uses-sdk android:targetsdkversion="19" android:minsdkversion="9">
 <supports-screens android:normalscreens="true" android:smallscreens="true" android:xlargescreens="true" android:largescreens="true" android:anydensity="true">
 <!-- %%INSERT_PERMISSIONS -->
 <!-- %%INSERT_FEATURES -->
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE">
 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE">
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE">
 <uses-permission android:name="android.permission.INTERNET">
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
 </uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></uses-permission></supports-screens></uses-sdk></manifest>

licensed under cc by-sa 3.0 with attribution.