作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在玩 Box2D QML 插件,看起来非常好。
但是,我想在 Android (SGS2) 上部署我的示例应用程序,但我似乎无法让它工作。无论我尝试在 AVD 上还是在设备上运行它,它都不起作用。 androiddeployqt 成功完成,但随后我得到“无法启动'MyApp'”并且没有其他信息说明它为什么无法启动。我可以在 AVD 和设备上成功运行 qml 应用程序,但这与插件有关,我找不到任何引用来解决它。
我尝试以不同的方式设置 DEPLOYMENTFOLDERS,但如果我弄错了,那么整个事情都会失败。即使我没有收到错误,在这种情况下我认为我做对了,它仍然没有启动。
我一直在努力解决这个问题,但找不到任何有用的信息来解决它。
如果您知道任何使用 c++ 插件并且可以成功部署在 android 设备上的项目,那也很好。
我正在使用为 android 编译的 Qt 5.2.0 和 box2d 的 qt5 分支
最佳答案
当我们试图让我们的 QML 模块在 Android Qt 应用程序中工作时,我们遇到了“找不到模块”错误。在 Qt 5.3 中,我们只能通过将插件部署到官方 Qt QML 模块所在的 QT_INSTALL_QML 目录来识别我们的 QML 插件。在我们的例子中,这个目录是/opt/Qt/5.3/android_armv7/qml。
插件端
我们的.pro
该插件的文件如下所示:
TEMPLATE = lib
TARGET = prova
QT += qml quick multimedia
CONFIG += qt plugin c++11 console
CONFIG -= android_install
TARGET = $$qtLibraryTarget($$TARGET)
uri = com.mycompany.qmlcomponents
# Input
SOURCES += \
src1.cpp \
src2.cpp
HEADERS += \
src1.h \
src2.h
##The below is generated automatically by Qt Creator when you create a new "Qt Quick 2 Extension Plugin" project for Android
#Copies the qmldir file to the build directory
!equals(_PRO_FILE_PWD_, $$OUT_PWD) {
copy_qmldir.target = $$OUT_PWD/qmldir
copy_qmldir.depends = $$_PRO_FILE_PWD_/qmldir
copy_qmldir.commands = $(COPY_FILE) \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
QMAKE_EXTRA_TARGETS += copy_qmldir
PRE_TARGETDEPS += $$copy_qmldir.target
}
#Copies the qmldir file and the built plugin .so to the QT_INSTALL_QML directory
qmldir.files = qmldir
unix {
installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
qmldir.path = $$installPath
target.path = $$installPath
INSTALLS += target qmldir
}
qmldir
(在插件源代码树根)文件是:
module com.mycompany.qmlcomponents
plugin prova
TEMPLATE = app
QT += qml quick widgets multimedia
CONFIG+= console
SOURCES += main.cpp
RESOURCES += qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH =
# Default rules for deployment.
include(deployment.pri)
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
ANDROID_EXTRA_LIBS = \
/opt/Qt/5.3/android_armv7/qml/com/mycompany/qmlcomponents/libprova.so
}
main.cpp
好像:
#include <QApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
return app.exec();
}
main.qml
只包括插件,如:
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtMultimedia 5.0
import com.mycompany.qmlcomponents 1.0
...
qmake
(来自 Qt 的 android-armv7 工具链),然后是
make install
.它将 qmldir 文件和插件 .so 安装到 QT_INSTALL_QML 目录。
qmake
(同样,来自 Qt 的 android-armv7 工具链),然后是
make install INSTALL_ROOT=.
(安装到构建目录),然后运行
androiddeployqt
.最后一个命令使用 assets/中的 qmldirs 和 libs/中的库创建 Android 项目结构,并通过
ant
将整个东西捆绑在 apk 中.有关此过程的详细信息,请参阅
http://qt-project.org/wiki/Android .
关于qt - 在移动设备上部署 C++ QML 插件的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732537/
我是一名优秀的程序员,十分优秀!