LINUX.ORG.RU

Android + Qt = ???

 ,


3

4

Интересует текущее состояние поддержки Android в Qt. Есть ли профит использовать C++ и Qt вместо разработки на Java. Из плюсов я вижу как минимум:

1) Кроссплатформенность. Приложение сможет работать и на десктопе (возможно, с небольшим количеством #ifdef'ов).

2) Нативный код по идее должен быть быстрее Java

3) C++ мне нравится больше Java, да и библиотека Qt показалась достаточно логичной и красивой с точки зрения архитектуры.

Какие минусы? Что на самом деле с производительностью (нативный код может и быстрее, но что случится на стыке Java и C++ кода)? Допустим, 2gis (насколько мне известно, он использует Qt) на Android в режиме просмотра карты подлагивает даже на весьма неслабом девайсе. Это авторы 2gis былокодеры или Qt плохо умеет в 3D? Есть ли игры на Qt под Android? Как с поддержкой OpenGL? А что насчёт нативного вида всяких кнопочек, ActionBar'ов и т. д.?

★★★★★

Вот как выглядит ситуация на сегодня. Единственным дополнением можно считать появление нативного стиля доступных контролов из коробки. Каркас проекта можно посмотреть тут. Action Bar'а и прочих мобильно-специфичных контролов нет, но на QML требуемое пишется довольно легко.

CrossFire ★★★★★ ()

2gis там изначально давным давно был форк, сейчас там мало общего с тем Qt о котором ты говоришь и как он представлен на Android.

umren ★★★★★ ()

Разрабатывать уже можно, но интеграцию со всей остальной экосистемой придётся писать самому.

P.S. cast EXL

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

Как минимум, базовые контролы выглядят более-менее нативно (пример: Qt Quick Widget Gallery на GNU/Linux и Android).

А вот Qt C++ Widgets на телефоне выглядят ужасно, плохо управляются пальцем и иногда даже не влезают в экран.

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

Единственное что в настоящий момент меня смущает в Qt для Android это... иногда тупо не выходит из фона и сыпет кучу шлака консоль при запуске на телефоне из Qt Creator-а. Не выходит из фона в смысле переключаясь между программами иногда можно увидеть что твоя программа это черный экран и чтобы это вылечить приходится прибивать программу и запускать снова и тогда опять работает. Увы, если бы не эта нестабильность...

Далее, используя Qt Widgets можно увидеть что некоторые контролы ведут себя не так как даже в ранних версиях поддержки Qt на Android, а именно - не получается заставить клавиатуру скрыться или тому подобное.

Ну и как допустим удерживать экран включенным из программы на Qt я так пока и не вкурил =( Как там эти нативные функции жабы дёрнуть - хз.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

Как там эти нативные функции жабы дёрнуть - хз.

JNI же. За включенный экран отвечает системный сервис, не привязанный ни к каким контекстам и зависимостям, его вытащить проще простого.

Я так же с буфером обмена делал.

Adonai ★★★ ()

если одним словом
* готов ли сабж для продакшена в Android?
* готов ли сабж для продакшена в iOS?

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

готов ли сабж для продакшена в Android?

пробовал весной. Не готов.

abs ★★★ ()

Скачал нужный Qt, добавил комплект в Qt Creator, создал проект с парой кнопочек и простейшим кодом, скомпилировал - работает. Понравилось. А что насчёт всяких OpenGL и т. п.? В играх нативный вид элементов управления не нужен, зато важна производительность. Применим ли в данном случае Qt для Android?

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

5.4 не решает?

Проблемкой было то что приходилось тянуть с собой Qt либы, а игра размером в 35 мегабайт особо не радует.

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

готов ли сабж для продакшена в Android?

смотря какой продакшен. для прошивки одного конкретного устройства - вполне (знаю два автомобильных head unit'а, в которых GUI написан на QML поверх Android). в расчёте на рынок смартфонов/планшетов - проще писать на Java

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

что насчёт всяких OpenGL

важна производительность

производительность OpenGL не сильно зависит от того, из какого языка ты дёргаешь биндинги

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

игра размером в 35 мегабайт особо не радует

Разве сейчас не норма - игры в гиг и больше?

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

Разве сейчас не норма - игры в гиг и больше?

В плей маркете?

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

Проблемкой было то что приходилось тянуть с собой Qt либы, а игра размером в 35 мегабайт особо не радует.

Где ты там 35 МБ узрел? Максимум 7-10 МБ тянет.

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

В играх нативный вид элементов управления не нужен, зато важна производительность. Применим ли в данном случае Qt для Android?

А уже есть хоть какие-нибудь презентабельные игры на Qt/QML для Android? Мне не встречались такие.

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

В плей маркете?

Да, всякие там GTA 4, каловздутия, dangeon hunter, need for speed и пр.

anonymous ()

Какие минусы?

Несмотря на несколько лет разработки, порт Qt5 для Android, увы сырой до сих пор.

Что на самом деле с производительностью (нативный код может и быстрее, но что случится на стыке Java и C++ кода)?

QML работает не сильно быстрее Java-приложений, ещё большущий минус — долгий запуск приложения.

Допустим, 2gis (насколько мне известно, он использует Qt)

Да, он на Qt. Но у них собственный OSS форк Qt'а, ещё из четвёртой версии. Работает весьма сносно.

2gis на Android в режиме просмотра карты подлагивает даже на весьма неслабом девайсе. Это авторы 2gis былокодеры или Qt плохо умеет в 3D?

Набыдлокодили. Всякие 3D модели зданий, к примеру. Если скачать первые версии 2GIS для Android (зелёные которые, выглядят так), то можно удивиться скорости отклика и работы.

Есть ли игры на Qt под Android?

Их количество стремится к нулю.

Как с поддержкой OpenGL?

В QML он вроде как по дефолту. В QtWisgets OpenGL работает, но переключение на canvas фризит приложение (в стандартных примерах есть приложение Path stroking, там баг с переключением контекстов можно лицезреть самому (по-крайней мере на Qt 5.3, на Qt 5.4 ещё не проверял)).

А что насчёт нативного вида всяких кнопочек, ActionBar'ов и т. д.?

В QML в Qt 5.4 имеются весьма симпатичные контролы, похожие на родные: http://blog.qt.digia.com/blog/2014/12/03/native-android-style-in-qt-5-4/

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

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

Короче вердикт: до сих пор сыро, к «продакшену» не готово. Это как раз демонстрирует практически полное отсутствие Qt5-приложений в маркетах. Поэтому проект лучше всего начинать сразу на чём-то более родном по отношению к платформе и сбалансированном. Но ради интереса можно и Qt потыкать.

Список известных мне более-менее презентабельных Qt5-приложений в Google Play. Можно посмотреть как оно вообще работает:

Буду рад, если кто-нибудь дополнит этот список.

А тут мой Butthurt по поводу Qt5 в целом.

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

Есть ли профит использовать C++ и Qt вместо разработки на Java. Из плюсов я вижу как минимум:

1) Кроссплатформенность.

От кутей кроссплатформенность плюсов на мобилки не сильно зависит щас. Особенно для игорей. Скорее, от поддержки стандартных либ в NDK. (Тут недавно пеарили замену - CrystaX). Но если есть кодовая база конкретно на кутях, которую ты хочешь пошарить на мобилки - смысл можно найти :)

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

Добавил тему в избранное ради комментария. Когда будет появляться желание «испробовать», буду сравнивать багтрекер с пунктами.

Спасибо за развернутый ответ!

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