Russian Qt Forum

Qt => Qt Quick => Тема начата: Гурман от Октябрь 29, 2019, 20:41



Название: [РЕШЕНО] Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 20:41
Похоже на ещё одну дыру набрёл. В Android приложение на
Код:
import QtPositioning 5.8
import QtLocation 5.11
выдаёт в консоль:
Код:
: qrc:/map.qml:4:1: module "QtLocation" is not installed
: qrc:/map.qml:3:1: module "QtPositioning" is not installed
: qrc:/map.qml:4:1: module "QtLocation" is not installed
: qrc:/map.qml:3:1: module "QtPositioning" is not installed

В Linux Kubuntu 18.04 LTS нормально работает, карту показывает. Мой код один и тот же. Может я где-то зевнул что-то для Android специфичное? В Манифесте вроде всё необходимое есть, ++нутые вызовы позиционирования и локации в Android все работают. Глюк только с QML.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 20:47
Цитировать
Тут кто-нибудь QML Map в Android получал работающую?
Ну так вот. :)
http://www.prog.org.ru/index.php?topic=32513.msg240171#msg240171


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 20:50
Цитировать
Тут кто-нибудь QML Map в Android получал работающую?
Ну так вот. :)
http://www.prog.org.ru/index.php?topic=32513.msg240171#msg240171

Ну так вот я же вижу... Какая версия Qt? В какой ОС собиралось? С QML не было вообще проблем? Можно увидеть шапку QML с import-ами?



Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 20:51
В Linux Kubuntu 18.04 LTS нормально работает, карту показывает. Мой код один и тот же. Может я где-то зевнул что-то для Android специфичное? В Манифесте вроде всё необходимое есть, ++нутые вызовы позиционирования и локации в Android все работают. Глюк только с QML.
А в каталоге сборки плагины эти есть?
androiddeployqt их туда копирует?
Что в логах деплоя?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 20:55
В Linux Kubuntu 18.04 LTS нормально работает, карту показывает. Мой код один и тот же. Может я где-то зевнул что-то для Android специфичное? В Манифесте вроде всё необходимое есть, ++нутые вызовы позиционирования и локации в Android все работают. Глюк только с QML.
А в каталоге сборки плагины эти есть?
androiddeployqt их туда копирует?
Что в логах деплоя?
Наверно нет. Откуда они возьмутся в каталоге сборки? Я считал что их должен Qt5 для Android с собой притащить. Это же не я делаю - это инсталлятор Qt. В установщике отдельно опции позиционирования нет. Логи деплоя пока не смотрел. Щаз гляну.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 20:55
Какая версия Qt?
Qt 5.13.1

В какой ОС собиралось?
ArchLinux.

С QML не было вообще проблем?
Нет.

Можно увидеть шапку QML с import-ами?

Код
C++ (Qt)
import QtQuick 2.12
import QtQuick.Controls 2.5
import QtPositioning 5.12
import QtLocation 5.12
 


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 20:57
Наверно нет. Откуда они возьмутся в каталоге сборки? Я считал что их должен Qt5 для Android с собой притащить.
Это он их и притянет. Если все нормально.
androiddeployqt плагины Qt копирует в директорию сборки для заворачивания их в apk.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:02
Они должны быть в ..........android-build/libs/armeabi-v7a ? И как называться?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 21:06
Они должны быть в ..........android-build/libs/armeabi-v7a ? И как называться?
Да.

libplugins_geoservices_libqtgeoservices_esri.so
libplugins_geoservices_libqtgeoservices_itemsoverlay.so
libplugins_geoservices_libqtgeoservices_mapbox.so
libplugins_geoservices_libqtgeoservices_nokia.so
libplugins_geoservices_libqtgeoservices_osm.so
libplugins_position_libqtposition_android.so
libplugins_position_libqtposition_positionpoll.so
libqml_QtLocation_libdeclarative_location.so


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:08
Они должны быть в ..........android-build/libs/armeabi-v7a ? И как называться?
Да.

libplugins_geoservices_libqtgeoservices_esri.so
libplugins_geoservices_libqtgeoservices_itemsoverlay.so
libplugins_geoservices_libqtgeoservices_mapbox.so
libplugins_geoservices_libqtgeoservices_nokia.so
libplugins_geoservices_libqtgeoservices_osm.so
libplugins_position_libqtposition_android.so
libplugins_position_libqtposition_positionpoll.so
libqml_QtLocation_libdeclarative_location.so
Все есть, кроме последнего. Вот же блин...


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 21:11
Все есть, кроме последнего. Вот же блин...
Еще этот забыл:
libqml_QtPositioning_libdeclarative_positioning.so

А в директории где Qt установлена в плагинах они есть? Может не все установлено для андроида?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:15
Все есть, кроме последнего. Вот же блин...
Еще этот забыл:
libqml_QtPositioning_libdeclarative_positioning.so

А в директории где Qt установлена в плагинах они есть? Может не все установлено для андроида?
И этого тоже нет. И в логе деплоя они не встречаются, ни в одной из 1253 строк.

Полез смотреть в каталоги Qt. Но что делать, если их и там нет? Переходить на 5.13.1?... Странно это всё как-то...


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:19
И, кстати, в каком они должны быть каталоге?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 21:20
Полез смотреть в каталоги Qt.
Они должны лежать где-то в
lib/qml/QtPositioning/libdeclarative_positioning.so
lib/qml/QtLocation/libdeclarative_location.so


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:23
Полез смотреть в каталоги Qt.
Они должны лежать где-то в
lib/qml/QtPositioning/libdeclarative_positioning.so
lib/qml/QtLocation/libdeclarative_location.so

Есть такие:

/home/gourmand/Qt5/5.12.5/5.12.5/android_armv7/qml/QtLocation/libdeclarative_location.so
/home/gourmand/Qt5/5.12.5/5.12.5/android_armv7/qml/QtPositioning/libdeclarative_positioning.so




Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 21:26
Код:
QT        += location
?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:28
Код:
QT        += location
?
Да.

В проекте разделямого объектника (в котором карта рисуется) указано

QT += widgets multimedia quick quickwidgets qml network location positioning

в проекте всего приложения тоже

QT       += core gui svg quick quickwidgets qml network positioning location sensors

Ну собственно без этого оно бы в Linux не заработало.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 21:31
Всё, надо посуду помыть и спать. Завтра буду дальше разбираться...


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 21:35
Вы из QtCreator собираете?
На закладке "Проекты" -> Сборка -> Сборка Android APK (это группа где приложение подписывается) есть checkbox "Расширенный вывод".
Включите его, тогда в консоль будет сыпаться подробный лог деплоя и gradle. Посмотрите там, может будут причины, почему они не копируются.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 29, 2019, 22:00
Вы из QtCreator собираете?
На закладке "Проекты" -> Сборка -> Сборка Android APK (это группа где приложение подписывается) есть checkbox "Расширенный вывод".
Включите его, тогда в консоль будет сыпаться подробный лог деплоя и gradle. Посмотрите там, может будут причины, почему они не копируются.

Не удержался. Попробовал. Получил листинг сборки 3796 строк. Но Kate в нём имена ни одной из этих библиотек не находит... Всё, тупик.

Ради забавы завтра попробую ручками взять эти библиотеки и перенести в каталог сборки, дать им правильные имена, и попробовать собрать APK. Хотя бы чтобы увидеть карту на своём смартфоне. Но уже есть что дописать в баг-репорт Qt, который я создал.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 29, 2019, 22:41
А такой вопрос, вы руками файлы из директория android не изменяли?
Например, android/res/value/libs.xml?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: kambala от Октябрь 30, 2019, 01:00
Но что делать, если их и там нет? Переходить на 5.13.1?... Странно это всё как-то...

что мешает собрать нужную версию самому из исходников?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 10:16
А такой вопрос, вы руками файлы из директория android не изменяли?
Например, android/res/value/libs.xml?

Нет, у меня нет дурной привычки лазить грязными руками в конфиги, которые я сам не писал.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 10:17
что мешает собрать нужную версию самому из исходников?

Отсутствие гарантии что глюк не пропадёт.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: kambala от Октябрь 30, 2019, 10:43
что мешает собрать нужную версию самому из исходников?

Отсутствие гарантии что глюк не пропадёт.
выяснить это можно только опытным путем ;) к тому же, можно построить только те модули, которые нужны, а не все подряд.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 11:26
что мешает собрать нужную версию самому из исходников?

Отсутствие гарантии что глюк не пропадёт.
выяснить это можно только опытным путем ;) к тому же, можно построить только те модули, которые нужны, а не все подряд.
У меня нет времени на эксперименты без гарантированного результата.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 11:32
А такой вопрос, вы руками файлы из директория android не изменяли?
Например, android/res/value/libs.xml?

Этот файл имеет весьма странный вид.

Код:
<?xml version='1.0' encoding='utf-8'?>
<resources>
    <array name="qt_sources">
        <item>https://download.qt.io/ministro/android/qt5/qt-5.7</item>
    </array>

    <!-- The following is handled automatically by the deployment tool. It should
         not be edited manually. -->

    <array name="bundled_libs">
        <!-- %%INSERT_EXTRA_LIBS%% -->
    </array>

     <array name="qt_libs">
         <!-- %%INSERT_QT_LIBS%% -->
     </array>

    <array name="bundled_in_lib">
        <!-- %%INSERT_BUNDLED_IN_LIB%% -->
    </array>
    <array name="bundled_in_assets">
        <!-- %%INSERT_BUNDLED_IN_ASSETS%% -->
    </array>

</resources>

Откуда тут взялся qt-5.7, если этот проект никогда с этой версией Qt не собирался? Я его начал делать на 5.9. а 5.7 у меня вообще не был никогда установлен. Что это за бред?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 30, 2019, 11:36
Откуда тут взялся qt-5.7, если этот проект никогда с этой версией Qt не собирался? Я его начал делать на 5.9. а 5.7 у меня вообще не был никогда установлен. Что это за бред?
Это шаблонный файл. У меня там тоже 5.7. :)


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 11:51
Не. Увы, копирование с переименованием этих двух файлов не помогло. В APK они не вошли. Их нет в списках. Ну не включать же их в проект явно...

Полное удаление каталога сборки тоже не помогло.



Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: kambala от Октябрь 30, 2019, 13:39
У меня нет времени на эксперименты без гарантированного результата.
время на форум же есть :) тратится 10-15 минут на выяснение нужных флагов для configure и запускается сборка в фоне (за час соберет, наверное).

спроси еще на форуме Qt / stackoverflow / открой баг репорт.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 14:07
Спасибо, кэп... баг репорт давно открыт, и спрашиваю везде где только возможно. А собирать Qt нет никакого смысла вообще - библиотеки эти есть, и лежат в нужном месте. Почему-то не работает копирование их при сборке проекта. На примере Map Viewer она работает - библиотеки подшиваются. Что сборка Qt изменит? Ничего.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 14:48
У меня есть подозрение, что проблема в том, что в одном приложении активно используется позиционирование и локации в С++ коде, и в QML. На С++ у меня всё отлажено и хорошо работает. Гвоздями намертво прибито, там гамбургер такой, что на QML с ума можно будет сойти если его делать. От QML мне нужна только карта. И тут похоже Qt колдобится, на QT += location positioning он копирует библиотеки С++, а про QML... забывает. Если C++ обработки нет, как в примерах, то он копирует QML библиотеки.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 30, 2019, 15:15
И тут похоже Qt колдобится, на QT += location positioning он копирует библиотеки С++, а про QML... забывает. Если C++ обработки нет, как в примерах, то он копирует QML библиотеки.
Вы в исходники androiddeplotyqt загляните, там будет видно.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 15:27
И тут похоже Qt колдобится, на QT += location positioning он копирует библиотеки С++, а про QML... забывает. Если C++ обработки нет, как в примерах, то он копирует QML библиотеки.
Вы в исходники androiddeplotyqt загляните, там будет видно.
Ну не сразу... на минуточку 2944 строки. И наверно что это не в самой утилите задаётся, а где-то в конфиге.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 16:16
Упс... есть ещё отличие моего проекта и примеров. Фишка в том, что у меня QML Map используется не в головном проекте, а в subproject, который создаёт shared object. Ну так надо. Разумеется в его файле проекта тоже есть

QT += widgets quick quickwidgets qml network location positioning

И по идее, библиотеки сабпрожектов должны все собираться в одну кучу в каталоге android-build/libs/armeabi-v7a, также как и собираемые библиотеки сабпрожектов (они там и лежат). Но что-то идёт не так.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 20:18
И хакнуть не получается - вручную подтянуть библиотеки.

В проект добавил
Код:
isEmpty(ANDROID_TARGET_ARCH) {
    message("Hack not needed")
}else{
    POSITIONING_EXTRA_LIBS += $$[QT_INSTALL_QML]/QtLocation/libdeclarative_location.so \
                              $$[QT_INSTALL_QML]/QtPositioning/libdeclarative_positioning.so
    ANDROID_EXTRA_LIBS += $${POSITIONING_EXTRA_LIBS}
    LIBS +=  $${POSITIONING_EXTRA_LIBS}
}
Библиотеки под своими исходными именами приехали в каталог ......./android-build/libs/armeabi-v7a и потом вошли в APK, но не вызываются. При запуске то же сообщение в консоль об отсутствующих плагинах. Тогда добавил строки
Код:
        <item>libqml_QtLocation_libdeclarative_location.so:qml/QtLocation/libdeclarative_location.so</item>
        <item>libqml_QtPositioning_libdeclarative_positioning.so:qml/QtPositioning/libdeclarative_positioning.so</item>
в шаблон android/res/values/libs.xml. Строки скопировал влоб из сборочного файла libs.xml примера Map Viewer, который у меня собирается и работает. Строки эти появились в сборке .....android-build/res/values/libs.xml Но это ни на что не повлияло вообще. Пока идеи, как вручную подшить эти библиотеки, исчерпаны.
 


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 30, 2019, 20:28
Я бегло пробежался по androiddeployqt...
Как я понял, qml модули для него отбирает утилитка qmlimportscanner.
Попробуйте что она у вас возвращает в основном проекте и в подпроекте с qml.
А вот как изменить ee -rootPath из деплоя пока не понятно.

Может попробовать в основной проект добавить dummy.qml с нужным импортом?


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 30, 2019, 20:48
Я бегло пробежался по androiddeployqt...
Как я понял, qml модули для него отбирает утилитка qmlimportscanner.
Попробуйте что она у вас возвращает в основном проекте и в подпроекте с qml.
А вот как изменить ee -rootPath из деплоя пока не понятно.
Попробую завтра. Сегодня уже устал, с утра весь день с этим воевал...

На самом деле интереснее всего понять - какими текстовыми файлами управляются системные библиотеки, и как они подшиваются. Я это пытался разобрать. С моими собственными библиотеками проблем нет, у меня их создаётся и в проект включается десяток. Все они ложатся в  ......./android-build/libs/armeabi-v7a и оттуда очевидно попадают в APK. Но почему не подшились две системные - мне не понятно.

Может попробовать в основной проект добавить dummy.qml с нужным импортом?
Это идея интересная. Это завтра первым делом попробую. Хотя то, что карты используются в сабпрожекте, не должно влиять - у меня в других приложениях были кучи обращений к разным системным библиотекам из сабпрожектов, и всё без проблем работало. Правда... ни разу при этом не использовался QML.

Ещё наверно стоит попробовать вручную переименовать эти обе системные, и подшить их как свои, из своих каталогов.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Old от Октябрь 31, 2019, 16:07
Но почему не подшились две системные - мне не понятно.
Скорее всего по тому, что qmlimportscanner просканировал основной проект и не нашел в нем qml с данными зависимостями, а подпроекты не просканировал.


Название: Re: Тут кто-нибудь QML Map в Android получал работающую?
Отправлено: Гурман от Октябрь 31, 2019, 16:14
Но почему не подшились две системные - мне не понятно.
Скорее всего по тому, что qmlimportscanner просканировал основной проект и не нашел в нем qml с данными зависимостями, а подпроекты не просканировал.

Da-h! Я заглянул в исходник qmlimportscanner и после этого сразу подшил dummy.qml с пустым Item и импортом двух библиотек.

И это сработало!

Библиотеки появились в каталоге, подшились, сообщение об их отсутствии при старте исчезло. В приложении появилась надпись Map © WikiMedia Foundation. То есть - проблема решена.

Правда карту всё равно не рисует - в консоли сообщение

: qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed

Ну это уже другой вопрос, буду смотреть примеры. Хотя опять же - про SSL/TLS ничего не говорится в описании использования QML Map.