LINUX.ORG.RU

Qt for Android

 ,


0

1

Хотелось бы услышать мнение о сабже от людей, которые его тыкали более глубоко, чем простой запуск Hello world (это я уже сделал). Раньше тыкал его пару лет назад и помню, что он был сыроват (в том плане, что некоторые базовые вещи работали не совсем хорошо, вплоть до каких-то проблем с кнопкой «Назад»), но уже не помню, что мне не понравилось, чтобы проверить. Как оно сегодня? Production ready или нет?

С ходу могу назвать два преимущества - Qt API куда продуманней графической библиотеки Android, которая состоит из кучи прослоек совместимости, которые при этом не дают идентичного поведения на разных версиях ОС («прослойка совместимости» даёт лишь заглушки, либо простейшие реализации нужных функций, чтобы приложение просто не упало из-за ненайденных классов на старых версиях ОС). А второе - возможность легче поддерживать несколько платформ (например, Desktop + iOS + Android, бизнес-логику и немалую часть интерфейса можно делать общими).

Пока знаю и как минимум один недостаток - приложение будет весить не меньше около 20 мегабайт, потому что Qt жирный (дефолтные библиотеки Android включены в ОС, это не значит, что они менее жирные).

Помимо общих впечатлений интересуют и конкретные вопросы:

1) Qt достаточно допилен для Android, чтобы пришлось писать свой Java-код только для каких-нибудь специфических вещей типа виджетов?

2) Qt обеспечивает не худшую производительность (в теории C++ быстрее жабы, но на практике многое зависит от качества кода и того, и другого)?

3) Ситуация с лицензией аналогична десктопной версии? То есть, несмотря на активное навязывание платной версии на официальном сайте, на самом деле имеется лишь обязанность раскрывать в OpenSource правки в сам Qt (что для большинства проектов не является критичным, либо вовсе не требуется), а прикладное приложение по-прежнему может быть закрытым.

Ну и да. QWidget или QML? Первое я хорошо знаю, но когда-то где-то слышал, мол сейчас в основном разработчиками Qt пилится второе.

★★★★★

Я только демки собирал, но про Widgets можно сразу забыть. Только QML.

RazrFalcon ★★★★★ ()

+ iOS

А что там с LGPLv3 и AppStore?

1) Qt достаточно допилен для Android, чтобы пришлось писать свой Java-код только для каких-нибудь специфических вещей типа виджетов?

Нет, на любой «стук в систему» там нужно будет обмазываться JNI, а иногда даже править вкомпиливаемую в APK Java-обёртку Qt, патчи на которую нужно будет обновлять с каждой новой версией Qt. Ты должен помнить этот тред: Убираю status bar. Всё перекрашивается в странные цвета.

2) Qt обеспечивает не худшую производительность (в теории C++ быстрее жабы, но на практике многое зависит от качества кода и того, и другого)?

На практике.
Первое: в сравнении с Java-приложениями, мобильные Qt-приложения стартуют ну очень долго. Пока все эти 20+ МБ нативных либ раскукожатся, да в память развернутся...
Второе: вот это твоё «в теории C++ быстрее жабы» распространяется только на Qt Widgets. Напомню, что он тупо неюзабельный на Android из-за огромной кучи проблем с ним, начиная от мелких кнопок и заканчивая траблами с отрисовкой. Использование фреймворка Qt на Android подразумевает использование QtQuick/QML, то бишь JavaScript на движке V4. Со всеми вытекающими. Так что здесь ещё очень сложный вопрос, что жрёт и тормозит больше, Java или QtQuick.

Популярность и допиленность фреймворка Qt на платформе Android отлично демонструет количество приложений на нём в Google Play.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

начиная от мелких кнопок и заканчивая траблами с отрисовкой

Т.е. дефолтные стили не допилены и репейнт не срабатывает в нужное время?

deep-purple ★★★★★ ()
Ответ на: комментарий от deep-purple

Ну не знаю, я и на виджетах нормально писал и даже qwt туда сувал, т.к. родные чарты полная хрень.Нужно просто qss подогнать.

Насчёт того что в qml лучше с размерами контролов - не согласен, они такие же мелкие по дефолту.

Да ещё хрен знает как нормально кастомизировать куик2 контролы, т.к. половину их нет, половина работает через зад, а при апдейте на новую версию куте все уезжает или не отображается.

И да, придётся использовать джаву так или иначе.

Да и если нужно чтобы приложение работало в фоне, то это тот ещё трах.. То ли городить сервисы, то ли что...

Да ещё и долго собирается апк-шка для заливки и отладки.

У меня удручающее разочарование пока что все это вызывает.

kuzulis ()

QWidget или QML

Для андроид - только QML. Виджеты выглядят немного баговано (по крайней мере на моем телефоне).

Да и размер программы теперь не такой большой (хеллоуворлд около 12 мб, если верить информации о программе), если в релизе собирать, да и если использовать Qt Lite, то вообще должно быть сносно, правда последним не пользовался никогда.

Для больших проектов не использовал, поэтому оценить скорость не могу.

Release ()
Ответ на: комментарий от deep-purple

Полтора года назад мне уже «повезло» допиливать один проект и я обходил тучу граблей, глюков и ограничений QtWidgets на Android, в итоге там на Java получилось добрых 30% от всей кодовой базы. И это не считая ещё всяких предподвывертов с JNI.

Там было очень много чего недопилено. Пользоваться QtWidgets-приложением на портативном Android-устройстве, отличным от телевизора, было просто невозможно. Именно это и спасло проект, он предназначался лишь для «умных» телевизоров и управлялся только с пульта. Но на смартфоне и планшете кнопки разъезжались, на них не было текста, одни элементы были чудовищно большими, другие были размером с пиксель.

Порт QtWidgets на Android всегда был сделан «на отвались». Нисколько не удивительно, что им сегодня никто практически не пользуется.

P.S. Сейчас жалею потраченное своё время на сношение с этим. Лучше бы сразу всё на Java переписал.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от Release

Кстати, в QtQuick все равно придется масштабировать элементы под экран. И это плохо, конечно

Release ()
Ответ на: комментарий от Release

правда последним не пользовался никогда.

Потому что Qt Lite это тупо маркетинговый буллшит от The Qt Company, требующий пересборки всего Qt.

Суть: ранее была такая утилита, которая называлась qconfig (не путать с выпиленным из Qt 5 qtconfig), выглядела она вот таким образом:

http://doc.qt.io/archives/qt-4.8/fine-tuning-features.html#managing-large-num...

Я ещё хрен знает в каком году урезал с её помощью Qt-либы и получал статически бинари программ, использующих Qt, размером в 800-1200 КБ. Был этот qconfig в составе Qt вплоть до Qt 5, но во времена «перестройки» об этой утилите все благополучно забыли.

И вот недавно менеджеры The Qt Company внезапно вспомнили о ней, добавили туда модный и молодёжный JSON и выкатили принципиально новое и инновационное решение Qt Lite (tm):

http://doc.qt.io/QtEnterpriseEmbedded/qt-configuration-tool.html

Вдвойне смищно, что этот Qt Lite на момент выхода (как сейчас не знаю) был доступен лишь владельцам коммерческих лицензий.

EXL ★★★★★ ()
Последнее исправление: EXL (всего исправлений: 2)
Ответ на: комментарий от EXL

в составе Qt вплоть до Qt 5

Маленько соврал, до Qt 5.7:

https://github.com/qt/qttools/tree/5.7/src/qconfig

После анонса Qt Lite утилиту конфигурации благополучно удалили:

https://github.com/qt/qttools/tree/5.8/src/qconfig

То бишь сделали решение по конфигурации Qt доступным только обладателям платной коммерческой лицензии:

For the time being, the Configuration UI Tool is a commercial only tool, that adds value for our Device Creation customers. (c)

Хы.

EXL ★★★★★ ()

3) Ситуация с лицензией аналогична десктопной версии?

Если используешь под Qt GPL3, то код твой тоже GPL 3.

Собираешься продавать свое ПО -> купи коммерческую лицензию для стартапа

LGPL очень скользкая лицензия у Qt.

На хабре чел из Qt отвечал на вопросы.

Лейтмотив такой: если ты хочешь писать на Qt коммерческое, и ты не BMW или Airbus - забудь - эта либа не для тебя писалась. Если ты последователь Столлмана, то тебе дорога открыта.

sniper21 ★★★★★ ()
Последнее исправление: sniper21 (всего исправлений: 1)
Ответ на: комментарий от sniper21

LGPL очень скользкая лицензия у Qt.

В каком месте?

На хабре чел из Qt отвечал на вопросы.

Некомпетентность «специалистов» этого ресурса просто поражает воображение.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

А что там с LGPLv3 и AppStore?

Окей, для App Store придётся покупать коммерческую версию. А ещё макбук и аккаунт разработчика. Но зато кодовая база будет общая.

Что касается размеров контролов - если использовать layout'ы (а без них делать интерфейсы - себя не уважать), то вроде размеры контролов нормальные (во всяком случае когда я собирал свой Hello world было так).

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от EXL

Использовал ли ты layout'ы? Я просто потыкал же Qt прежде чем создавать тему. Кинул пару кнопок на форму - при запуске на телефоне они были мелкие. А кинул их в QVBoxLayout и всё стало хорошо (поведение на десктопе и телефоне совпало). Я в принципе на Qt без layout'ов никогда ничего не делаю, так что если с ними всё нормально, то проблемы нет.

KivApple ★★★★★ ()
Ответ на: комментарий от sniper21

У Qt лицензия LGPLv3. Она не может быть скользкой или не скользкой - LGPLv3 это вполне конкретная лицензия. И она позволяет динамическую линковку с закрытым кодом. И даже статическую, но если предоставить по запросу свои объектные файлы для пересборки (чтобы юзер мог перелинковать твой проект с другой версией Qt). В случае приложения под Android в APK запихивается куча so-шек, так что линковка вполне себе динамическая. Была бы GPLv3 - да, тогда даже линковаться было бы нельзя.

ИМХО нужно читать текст лицензии, а не маркетинговые постеры, потому что, очевидно, авторам Qt выгодно, чтобы люди использовали платную подписку, однако юридическую силу имеет именно лицензия, а не всё остальное.

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от RazrFalcon

Ну почему же... В простых случаях работают.

rumgot ★★★★★ ()

Были какие то проблемы с распознованием жестов. Поищи среди моих тем.

rumgot ★★★★★ ()
Ответ на: комментарий от KivApple

Конечно использовал. Там проблема была не в Layout'ах, а в самих элементах: в стрелочки QTreeView хрен попадёшь, в QCheckBox'ы и радиобаттоны тоже и на кнопках и табах надписи были мелкие, выглядело уродливо. Всё нуждалось в костыльных QSS-стилях, чтобы хоть как-то выглядело презентабельно.

Х.з может сейчас есть какие-то подвижки в сторону юзабельности QtWidgets на Android, но я сильно в этом сомневаюсь, учитывая их полузамороженное состояние.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

Создал проект Qt Widgets, поставив галку платформы Android.

Кинул на форму 1 кнопку, 2 чекбокса, 2 радиобатона, 1 многострочное поле ввода. Ко всему этому применил вертикальный Layout.

На телефоне выглядит как-то так: https://i.imgur.com/b9KGXc9.png

ИМХО расстояния между контролами большеваты, но вот что-что, а мелкими их назвать нельзя. При этом никаких настроек виджетов я не делал и ни строчки кода не написал (только то, что по дефолту идёт в десктопном проекте).

KivApple ★★★★★ ()
Ответ на: комментарий от KivApple

Значит всё-таки раздуплились кое-что починить к моменту выхода Android 8.0, лол. А ещё полтора года назад я всю эту хрень:

http://esxi.z-lab.me:666/~exl_lab/screens/qtreeview_android_buggy.jpg
http://esxi.z-lab.me:666/~exl_lab/screens/qtabwidget_android_buggy.jpg
http://esxi.z-lab.me:666/~exl_lab/screens/qcheckbox_android_buggy.jpg

Выправлял QSS и руками.

EXL ★★★★★ ()
Ответ на: комментарий от KivApple

Для сервисов на Android в Qt вроде есть вот что: http://doc.qt.io/qt-5/androidservices.html (но я не пробовал).

Да, я знаю. Но суть не в этом, а в том что скрестить все вместе, например, чтобы сервис уведомлял о чем-то активити, которое в бекграунде.

Или, например, чтобы QtLocation приложение работало в бекграунде и получало координаты и, например, слало по сети.

Я не Андройд гугу, но недавно столкнулся с фигней, которая заключается в том, что, например, если у тебя есть C++ код и какой-то ГУЙ на QML, и приложение уходт в бекграунд - то C++ код продолжает работать (например, сокеты), а вот GUI останавливается. И как сделать, чтобы он обновлялся и в бекграунде - хз (А это ну оочень нужно, т.к. мне нужно периодически граббить содержимое некоего айтема в картинку и передавать по сети, и, оно все идет лесом когда приложение уходит в фон. Ну да ладно, это к теме не относится).

ЗЫ: Переучиваться на JAVA уж оочень не хочется и ковыряться во всех кишках андройда.. Хочется написать код и забыть как страшный сон. ))

kuzulis ()
Ответ на: комментарий от EXL

LGPL очень скользкая лицензия у Qt.

В каком месте?

А если включить логику и подумать почему если есть LGPL позволяющая создавать, как вы думаете, проприетарное ПО, осталась коммерческая лицензия цена на которую возросла с 25$ до 425$?

sniper21 ★★★★★ ()
Ответ на: комментарий от sniper21

Потому что вы не сможете перевести на коммерческую версию проект написаный с использованием открыто-бесплатной LGPL. Но это проблемы коммерческих отношений с авторами Qt, и не относится к lgpl. Авторам Qt вобще глубоко плевать на тех кто использует lgpl версию. Лишь бы к ним с объятьями не лезли:)

antares0 ★★★ ()
Последнее исправление: antares0 (всего исправлений: 4)
Ответ на: комментарий от Release

Да и размер программы теперь не такой большой (хеллоуворлд около 12 мб, если верить информации о программе).

Жирноватый хеллоуворлд.

Вот полноценный редактор спортивных карт на Qt5 для Android ~ 17 Mb !
>>> https://github.com/OpenOrienteering/mapper/releases/download/v0.8.0/OpenOrien...

atsym ★★★★★ ()
Ответ на: комментарий от com

Если имеется ввиду проперти «android.app.background_running», то оно уже есть в манифесте. Скорее всего именно благодаря ему C++ код и выполняется в бэкграунде. Но вот активити в любом случае останавливается... В общем, гимморой.

kuzulis ()
Ответ на: комментарий от EXL

А что там с LGPLv3 и AppStore?

Динамическая линковка доступна с iOS 8, которая уже окаменела, нормально там все.

CrossFire ★★★★★ ()
Ответ на: комментарий от Release

Кстати, в QtQuick все равно придется масштабировать элементы под экран. И это плохо, конечно

Автомасштабирование на QQC 2, то есть начиная с Qt 5.7. Если еще и svg использовать, совсем классно получается.

CrossFire ★★★★★ ()
Последнее исправление: CrossFire (всего исправлений: 1)

1) Нет, проблемы могут быть и в не специфичных вещах, например с полями ввода, отслеживанием открытия клавиатуры. У 2Gis есть либа, позволяющая вставлять нативные поля, чтобы это обойти.

2) Да, но как сказали выше, грузится дольше.

3) Да.

По опыту, умеренно сложные приложения на QML делать можно.

CrossFire ★★★★★ ()
Ответ на: комментарий от EXL

Всё нуждалось в костыльных QSS-стилях, чтобы хоть как-то выглядело презентабельно.

А почему ты считаешь, что QSS - это костыль? По-моему, оно и придумано для того, чтобы кроссплатформенные (и изначально, как правило, десктопные) проекты адаптировать к разным платформам и условиям, в т.ч. к хм, нестандартным разрешениям экрана. Я не прав?

hobbit ★★★★★ ()
Ответ на: комментарий от EXL

То бишь сделали решение по конфигурации Qt доступным только обладателям платной коммерческой лицензии:

Ну я так понял, речь только про наличие удобных кнопочек для этой самой конфигурации? Так-то я вот недавно скачал Qt 5.10 и пересобрал её под винду с нужными мне флагами, вроде бы LGPL это никоим образом не нарушает... Правда, теперь, в отличие от Qt4, для этого действа нужен питон, но это уже вопрос отдельный (это, видимо, плата за то, что раньше к исходникам прилагался configure.exe, а теперь ограничиваются батником).

hobbit ★★★★★ ()
Ответ на: комментарий от KivApple

Если сервисы или серьезная работа с ви-фи и прочим - то сразу лучше java, а так Qt работает - выглядит несколько жутковато, толстое, но и хрен с ним :)

С QML как-то у меня все хреново получилось, пусть и красивее внешне, чем QWidget... Но я ни разу им до этого не пользовался этим QML до этого :)

Если известно на чем запускать, то можно и на QWidget вполне сносно сделать, ИМХО...

Зато моя супер-пупер мега программа и на десктопе и на ведройде и на windows-ce практически без особых переделок - красота :)

anonymous ()
Ответ на: комментарий от CrossFire

Там дело не в способе линковки а в том что лицензия appstore не совместима с (L)GPL

anonymous ()
Ответ на: комментарий от hobbit

А почему ты считаешь, что QSS - это костыль?

Потому что он сильно ограничен, часто глючит.

Qt for Android, но не для людей? (комментарий)

Я не прав?

Он изначально придуман для лёгкой кастомизации оформления, а у меня он служил для обхода различных графических бажиков.

Ну я так понял, речь только про наличие удобных кнопочек для этой самой конфигурации? Так-то я вот недавно скачал Qt 5.10 и пересобрал её под винду с нужными мне флагами, вроде бы LGPL это никоим образом не нарушает...

Без понятия, я Qt Lite не тыкал, а вот QConfig'ом пользовался. Он был бесплатный, с такими же красивыми кнопочками, но без хипсторского JSON'а.

EXL ★★★★★ ()
Ответ на: комментарий от anonymous

Там дело не в способе линковки а в том что лицензия appstore не совместима с (L)GPL

С этим никаких проблем не будет, ни со стороны Apple, ни со стороны Digia.

CrossFire ★★★★★ ()
Ответ на: комментарий от EXL

Популярность и допиленность фреймворка Qt на платформе Android отлично демонструет количество приложений на нём в Google Play. Лучше бы сразу всё на Java переписал.

Золотые слова! А то носятся тут с этим проклятым жирным и тормозным Qt...

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.