ich bin neu in der QT-Programmierwelt und deshalb noch etwas grün hinter den Ohren, hoffe aber natürlich ihr könnt mir weiterhelfen.
Ich habe erfolgreich eine QT Quick Anwendung (QT 5.4) erstellt und auf mein Android-Tablet übertragen. Da ich weiter unten noch ein zweites Projekt aufführe, nenne ich das Projekt mit der QT-Quick Anwendung für Android im folgenden immer "Android-Projekt".
Im Android-Projekt wird zurzeit im Vollbildmodus eine QML-Map angezeigt. Als Map-Plugin habe ich das OpenStreetMap (OSM)-Plugin ausgewählt. Das ganze sieht zusammengefasst so aus.
Code: Alles auswählen
ApplicationWindow {
// ...
Map {
id:osmMap
anchors.fill: parent
plugin: Plugin {
id: osmPlugin
name: "osm"
}
// ...
}
}
Im besagten OSM-Plugin-Projekt habe ich aus dem Git-Repository die .h- und .cpp-Dateien des OSM-Plugins kopiert. Da ich nur Mapping benötige, habe ich die implementierten Dateien für GeoCoding, Places etc. weggelassen und die Factory-Klasse dementsprechend angepasst, dass für die nicht unterstützten Engines 0 zurück gegeben wird. Die Dokumentation zum Implementieren eines GeoService-Plugins empfielt dies ebenfalls (http://doc.qt.io/qt-5/qtlocation-geoser ... ng-plugins) .
Meine Projektdatei (.pro) des OSM-Plugin-Projektes sieht hierzu folgendermaßen aus:
Code: Alles auswählen
QT += location-private
QT += positioning-private
QT += network
QT += qml quick
TARGET = MyOsmPlugin
TEMPLATE = lib
DEFINES += MYOSMPLUGIN_LIBRARY
PLUGIN_TYPE = geoservices
PLUGIN_CLASS_NAME = QServiceProviderFactoryOsm
#load(qt_plugin) # <-- das funktioniert bei mir nicht, steht aber bei der Projektdatei des OSM-Plugins so drin
[/color]
HEADERS +=\
qgeoserviceproviderpluginosm.h \
qgeotiledmappingmanagerengineosm.h \
qgeotilefetcherosm.h \
qgeomapreplyosm.h
SOURCES += \
qgeoserviceproviderpluginosm.cpp \
qgeotiledmappingmanagerengineosm.cpp \
qgeotilefetcherosm.cpp \
qgeomapreplyosm.cpp
OTHER_FILES += \
myOsm_plugin.json
unix {
target.path = /usr/lib
INSTALLS += target
}
Die json-Datei habe ich selbst geschrieben und beinhaltet folgenden Inhalt:
Code: Alles auswählen
{
"Keys": ["osmMap"],
"Provider": "osm",
"Version": 100,
"Experimental": false,
"Features": [
"OnlineMappingFeature"
]
}
Anschließend habe ich das OSM-Plugin-Projekt als Desktop-Release-Bibliothek gebaut und habe meinem Android-Projekt die Datei: "libMyOsmPlugin.so" als "Externe Bibliothek" bekannt gemacht. Die zugehörige Projektdatei (.pro) des Android-Projekts sieht nun so aus:
Code: Alles auswählen
TEMPLATE = app
QT += qml quick widgets
QT += location
QT += positioning
QT += network
#CONFIG += mobility
#MOBILITY += location
PKGCONFIG += openssl
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)
DISTFILES += \
android/gradle/wrapper/gradle-wrapper.jar \
android/AndroidManifest.xml \
android/res/values/libs.xml \
android/build.gradle \
android/gradle/wrapper/gradle-wrapper.properties \
android/gradlew \
android/gradlew.bat \
myOsm_plugin.json \
HEADERS += \
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../build-MyOsmPlugin-Desktop_Qt_5_4_1_GCC_64bit-Release/release/ -lMyOsmPlugin
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../build-MyOsmPlugin-Desktop_Qt_5_4_1_GCC_64bit-Release/debug/ -lMyOsmPlugin
else:unix: LIBS += -L$$PWD/../build-MyOsmPlugin-Desktop_Qt_5_4_1_GCC_64bit-Release/ -lMyOsmPlugin
INCLUDEPATH += $$PWD/../build-MyOsmPlugin-Desktop_Qt_5_4_1_GCC_64bit-Release
DEPENDPATH += $$PWD/../build-MyOsmPlugin-Desktop_Qt_5_4_1_GCC_64bit-Release
Die App bleibt leer und zeigt kein Kartenmaterial an.D/OpenGLRenderer(11675): Enabling debug mode 0
W/libAndroid_Application.so(11675): qrc:/main.qml:71 ((null)): qrc:/main.qml:71:5: QML Map: Error: Plugin does not support mapping.
W/libAndroid_Application.so(11675): Error message:The geoservices provider is not supported.
W/libAndroid_Application.so(11675): qrc:/main.qml:66 ((null)): qrc:/main.qml:66: ReferenceError: marker is not defined
D/QtPositioning(11675): Looper Thread startup time in ms: 1
D/QtPositioning(11675): Regular updates using GPS 1000
D/QtPositioning(11675): Regular updates using network 1000
W/libAndroid_Application.so(11675): (null):0 ((null)): QObject::connect: Cannot connect (null)::copyrightsChanged(QImage,QPoint) to QDeclarativeGeoMapCopyrightNotice::copyrightsChanged(QImage,QPoint)
Ich hoffe ihr könnt mir helfen und sagen woran das liegt. Weil eigentlich habe ich ja gar nichts großartig anderes gemacht, als das OSM-Plugin des QT-Repositories in ein eigenes Projekt kopiert und meinem Android-Projekt als externes Plugin zur Verfügung gestellt. Habe ich irgendetwas vergessen oder nicht beachtet? Danke schon einmal für eure Antworten