【发布时间】:2015-04-14 13:48:29
【问题描述】:
我正在尝试使用 qt5.4 将我的应用程序移植到 android,但出现此错误:
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
我看不出与在 Android 上正常运行的示例项目的 .pro 有任何实质性区别。
更新
我看到另一个示例“日历”,我注意到我缺少这个标志“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
【问题讨论】:
-
一般将
ANDROID_EXTRA_LIBS设置为android,并避免以这种方式设置LiBS。只需将它们放在项目的本地lib目录中即可。除此之外,您是否添加了 AndroidManifest?这可能是缺失的,并且所需的 QML 库没有部署到设备上。 -
我以一个 qt5.4 入门项目为例,它没有 AndroidManifest。 AndroidManifest不是在编译的时候被qtcreator自动生成的吗?
-
你能给我一个有 Android Manifest 的 qt5.4 示例或 github 的链接吗?
-
部署的可以看here。您的 Qt 库未部署:首先查看
Projects > Build > Build Android APK并确保选中Build Qt libraries in APK。在同一个选项卡中,您可以使用Create template按钮来生成清单。为应用添加图标需要自定义清单。因此,创建它是必要的。最后,可以通过同一选项卡中的additional libraries部分添加自定义库。如果您愿意,我可以提供.pro详细信息的答案 -
如果您可以发布一个复杂项目的 .pro 和 AndroidManifest 文件的示例,其中包含像我这样的子目录(看我的问题)可以帮助我。
标签: android c++ qt porting qt5.4