11
votes

Comment déployer Qt5 QML Plugin à Android?

J'essaie d'importer le plugin d'extension rapide TimeExample QT à partir de Qt 5.1.0 Installation Android.

libqmlqtimeexampleplugin.so code> est construit successivement dans Build-plugins-android_for_arm_gcc_4_6_qt_5_1_0-Butée / Importations Code> p>

Puis j'ai créé une application QT simple Simple QT (éléments intégrés) de Qt Creator. Que dois-je ajouter au fichier de projet d'application pour obtenir le plugin QML dans la sortie ".apk" package? P>

Il est actuellement dit: P>

w / qt (23528): actifs: /qml/timeexampleest/main.qml: 2 (): actifs: /qml/timeexampleest/main.qml: 2: 1: module "TimeeExample" n'est pas installé p > BlockQuote>

Main.QML P>

folder_01.source = qml/TimeExampleTest

 folder_01.target = qml

 folder_02.source = /home/artem/Projects/Veedo/Test/build-plugins-Android_for_arm_GCC_4_6_Qt_5_1_0-Debug/imports/TimeExample

 folder_02.target = imports

 DEPLOYMENTFOLDERS = folder_01 folder_02

 QML_IMPORT_PATH = /home/artem/Projects/Veedo/Test/build-plugins-Android_for_arm_GCC_4_6_Qt_5_1_0-Debug/imports/TimeExample

 SOURCES += main.cpp

 include(qtquick2applicationviewer/qtquick2applicationviewer.pri)

 qtcAddDeployment()

 OTHER_FILES += \
    android/src/org/kde/necessitas/ministro/IMinistro.aidl \
    android/src/org/kde/necessitas/ministro/IMinistroCallback.aidl \
    android/src/org/qtproject/qt5/android/bindings/QtActivity.java \
    android/src/org/qtproject/qt5/android/bindings/QtApplication.java \
    android/AndroidManifest.xml \
    android/version.xml \
    android/res/values-ja/strings.xml \
    android/res/values-rs/strings.xml \
    android/res/values-zh-rTW/strings.xml \
    android/res/values-fa/strings.xml \
    android/res/values-ru/strings.xml \
    android/res/values-fr/strings.xml \
    android/res/values-ro/strings.xml \
    android/res/values-el/strings.xml \
    android/res/values-ms/strings.xml \
    android/res/values-nb/strings.xml \
    android/res/values-et/strings.xml \
    android/res/values-pl/strings.xml \
    android/res/values-pt-rBR/strings.xml \
    android/res/values-es/strings.xml \
    android/res/values-id/strings.xml \
    android/res/values-de/strings.xml \
    android/res/values-it/strings.xml \
    android/res/values-zh-rCN/strings.xml \
    android/res/values/strings.xml \
    android/res/values/libs.xml \
    android/res/layout/splash.xml \
    android/res/values-nl/strings.xml


0 commentaires

3 Réponses :


6
votes

Avec Qt 5.3, nous avons réussi à obtenir notre plug-in QML reconnu par une application Android QT uniquement en déployant le plugin au répertoire QT_INSTALL_QML où réside les modules QT QML officiels. Ce répertoire est /opt/qt/5.3/Android_armv7/qml dans notre cas.

côté plugin fort> p>

Notre fichier .pro code> du plugin ressemble à: p> xxx pré>

Notre fichier qmldir code> (dans la racine de l'arborescence du plugin) est le suivant: p>

import QtQuick 2.2
import QtQuick.Controls 1.1
import QtMultimedia 5.0

import com.mycompany.qmlcomponents 1.0

...


3 commentaires

Intéressant, mais IIRC il y a une manière beaucoup plus simple, je pourrais creuser / essayer du code si vous êtes intéressé.


Je suis intéressé @ mlvljr!


@ user981733 OK, laissez-moi regarder dans ceci dans les jours suivants alors :)



0
votes

Après avoir lu la source de QT sur QabstractfileEngineHandler, j'ai trouvé quelque chose de laid à Qt:

  1. QT a mis en œuvre une sorte de mécanisme pour fournir "ChercheurPath" (pas l'URL) comme "QRC:", "Actifs:", où le noyau est qabstractfileengineHandler. P> Li>

  2. qabstractfileengineHandler ne devient plus public dans qt5, il ne fournit que abstrait à qfile, qfileinfo, qdir, qicon et les choses fournies par QFile, y compris Qimage, plus QandroidasseSfileEngineHandler, spécialisée pour les actifs Android. P> li>

  3. SO SEARCHPATH SCHEMA n'est pas compatible avec QurL, même ils ont l'air si similaire, car vous savez que Qtquick est SetSource à une URL, un fichier QML ne serait donc pas chargé par "Actifs:" Prefix directement. P>

  4. Vous pouvez trouver ceci ci-dessous [statique] vide qdir :: constSearchPaths (const qstring & préfixe, const qstringlist & wechPaths) code> dans le document de QT: p>

    QDir::setSearchPaths("icons", QStringList(QDir::homePath() + "/images"));
    QDir::setSearchPaths("docs", QStringList(":/embeddedDocuments"));
    
    ...    
    QPixmap pixmap("icons:undo.png"); // will look for undo.png in QDir::homePath() + "/images"    
    QFile file("docs:design.odf"); // will look in the :/embeddedDocuments resource path
    


0 commentaires

0
votes

Voici comment je l'ai fait.

Ajoutez ceci à votre code d'application: p> xxx pré>

slash avant après "actifs:" est important, il ne va pas travailler sans elle. Dans votre dossier de construction, vous devez avoir une structure de répertoire comme ceci: / home / my_name / project_build_directory / qml / my_plugin code>. Votre répertoire de plug-in doit avoir votre .so code> bibliothèque et le fichier qmldir code>. Ensuite, vous devez obtenir le plugin emballé. Cela devrait être possible en ajoutant ce qui suit à votre fichier .pro code> fichier: p> xxx pré>

ceci n'a toutefois pas fonctionné pour moi avec Qt Creator de Qt 5.11 donc ce que je devais faire était d'ajouter manuellement au .json code> déploiement: p>

"android-extra-libs":"/your/qt/path/lib/libQt5Xml.so,/your/qt/path/lib/libQt5Network.so",
...etc


0 commentaires