Pull to refresh

Comments 32

Ох, как-то вы очень пессимистичны.
1. На нецесситасе работает например ДубльГИС под Андроид (вернее не на самом нецесситасе, а на форке, но тем не менее)
2. Сейчас нецесситас рано использовать по одной причине — может измениться API и ABI. Когда выйдет бета (а это будет скоро) уже можно будет не бояться
3. Андроидом заинтересовано много людей. И из Нокии в том числе. Например, Томас (который вел на DevDays'11 секцию по Андроиду в Contributors Day) работает в Нокии и он занимается поддержкой OpenGL в нецесесситасе.
4. Те баги которые вы назвали на самом деле являются минорными. Гораздо более интересными багами являются проблемы мобилити, отсутствие (хотя работа ведется и вроде что-то сделано более менее) внятного стиля для андроида, отсутствие qt components (работа правда опять же ведется)

Как то так.
А где-нибудь можно посмотреть на qt-components для Android?
В necessitas-devel один человек отписывался на эту тему с тем как идет прогресс пару раз. Заинтересованные могут порыться в архиве мейллиста
Что за форк? Чем отличается?

Ну вот, Вы же сами написали, что серьезных багов хватает, так что я не зря пессимистичен :) Просто у маленького приложения заметны маленькие баги, а если бы делал что-то большое, тогда бы наверное еще веселее было.

В любом случае, спасибо за подробный отзыв! Рад, что все-таки собрался с духом написать на Хабр, а то кругом только .Net и Java, никто всякими кроссплатформенными извращениями не занимается )
Я могу сказать что перенос приложения, изначально написанного под symbian^3 на qml, с использованим карт и камеры из мобилити занял у меня примерно 3 дня. Из них два я фиксил мобилити. Пофиксил, отправил дифф, но чем дело закончилось, уже не помню. Так что как таковых проблем на самом деле нет.
Есть мелочи. И есть блокеры, которые можно пофиксить и самому (либо написать данную часть приложения по другому/временно отключить этот функционал).

Просто нужно понимать что такое стадия альфа у проекта. Естественно для варианта «взял и все работает» это не подходит.
Для варианта «взял, допилил, подумал, переписал, работает» это подходит
а по поводу кросс платформенных извращений… это вы просто не там смотрите :D все есть
Ах вот почему ДубльГИС периодически намертво зависает у меня под Galaxy… теперь ясно.
Дубльгис основан не на нецесситасе! Он основан на самостоятельном форке нецесситаса, который произошел достатчно давно. Сейчас опираться на проблемы дубльгис при анализе работы нецесситас крайне некорректно
Давненько я не брал в руки шашек...
То есть тьфу, Necessitas, конечно же.

Собственно те проблемы, которые, вы описали, как сказал коллега выше — ерунда.

А как дела обстоят с поддержкой звука, камеры, контактов и т. д.?
То есть, мне интересно насколько хорошо сейчас поддерживается Qt Mobility.
UFO just landed and posted this here
На самом деле камера работает. Единственное что ей надо это libffmpeg и пара фиксов. По этой теме подробнее можно почитать в necessitas-devel
Что за форк? Чем отличается?

Ну вот, Вы же сами написали, что серьезных багов хватает, так что я не зря пессимистичен :) Просто у маленького приложения заметны маленькие баги, а если бы делал что-то большое, тогда бы наверное еще веселее было.

В любом случае, спасибо за подробный отзыв! Рад, что все-таки собрался с духом написать на Хабр, а то кругом только .Net и Java, никто всякими кроссплатформенными извращениями не занимается )
gitorious.org/+grym/qt/grym-android-lighthouse Этот порт, чем отличается спрашивайте у разработчиков, они его пилят конкретно под свое приложение, поэтому он менее универсален, и конечно не имеет таких клевых плюшек как нецеситасс.
UFO just landed and posted this here
А можно ли этим SDK пользоваться без устройства — чтобы попробовать? И есть ли там командная строка, а то я как-то с Creatorом не сдружился, предпочитая старый добрый qmake && make?
Можно без девайса. Есть эмулятор.
Можно все собирать из консоли. В некоторых случаях это даже проще чем в креаторе.
Дело вкуса, конечно, но сейчас QtCreator выглядит как наиболее готовый продукт для C/C++ под linux. А ещё там очень хорошая обёртка над gdb.
Статья из серии «скачай это и оно будет работать».
Хотя, не отрицаю, было интересно почитать (тоже Андроидом владею).
Ох и натерпелись мы с этим Necessitas когда-то в своем проекте :)
Начнем с того, что там не был собран QtDBus (dbus в андроиде, как известно, есть). Собрать — собрали, а загрузить не можем: Ministro то не знает о нашей библиотеке. Давай смотреть, что же Ministro делает, когда загружает библиотеки. Оказалось, что он грузит xml-файл с сервера Necessitas`а, в котором описаны Qt-библиотеки, путь до них на сервере, их версии, размер, и… порядок загрузки! Этим порядком загрузки определяется и порядок линковки библиотек. В общем, &lttrollface&gt делать было нечего, подняли мы свой Apache &lt/trollface&gt. Создали такую же структуру каталогов, как на сервере. Пропатчили xml-файл, добавив туда QtDBus. Начинаем загружать с помощью Ministro библиотеки… падает на линковке, т.к., если не ошибаюсь, он линкует их как только загрузил библиотеку. Тогда-то мы и узнали что порядок загрузки определяет порядок линковки.

Этот упоротый Ministro еще и заново загружает каждый раз библиотеки после перезаливки приложения. Почему нельзя было, например, с apk класть эти библиотеки? Ведь Qt-программа, собранная Necessitas`ом — это та же библиотека.

А еще, если нужно консольное/демон Qt-приложение под андроид, то можно просто исправить Makefile, генерируемый Necessitas, чтобы собиралась не библиотека, а готовый бинарник.

Еще из интересно, что встретилось при работе с Necessitas: часто вылетает сообщение «QEventDispatcherUNIX: internal error, wakeUps.testAndSetRelease(1, 0) failed!». И еще довольно странно ведет себя QWaitCondition: похоже, не всегда отрабатывает wakeAll().
Министро не упоротый. Он наоборот все правильно делает.
Если нужны свои либы, то можно в креаторе пометить Use local libs. И все будет хорошо (кроме qml-плагинов).

Qt либы не кладутся в apk с прогой, потому что тогда на девайсе будет дофига разных версий кьюта. По одной для каждого приложения. Министро, собственно говоря, и нужен чтобы этого избежать
Упс, не туда ответил. См. ответ ниже.
Ха. Во-первых, как вы определите порядок линковки через «Use local libs» ?) Если бы все это работало, проблем бы не было.

А во-вторых, если не ошибаюсь, Ministro как раз загружает библиотеки в папку с именем программы, что как бы уже означает, что для каждой программы — свои библиотеки.
Очень просто. Правлю .java файлы. И все работает :D

Ошибаетесь. Он кладет либы в папку приложения министро. То есть они одни. Еще раз повторю, министро сделан для того чтобы была одна копия Qt в системе и она была постоянно свежей
>нужно произвести настройки USB и перезапусть adb под рутом:
при правильной настройке нужно только udev перезапустить и девайс перевоткнуть — рут для adb не нужен
Ну еще проблемы есть с дебагом. У меня так и не получилось нормально дебажить.

А насчет «Черный экран» в qml при возвращении. Эмпирическим путем было устанвленно, что если выставить у виджета по бокам отступы в 1 пиксел, то всё работает нормально =D. Этой рамки толком заметно не будет, но работать всё будет!
Пробовал я эту штуку. Ну работает, после определенных шаманских действий. Да, наверное есть смысл, если очень уж хочется портировать готовое Qt-приложение на Андройд. Но начинать с нуля проект — боже упаси.
Спасибо, ценный обзор.
С учётом направленности Нокиа, вероятно скорее стоит ожидать развития Qt в сторону Windows Phone, чем в сторону Android.
Они наверное уже устали повторять, так что повторю за них: Официального порта Qt на WP не будет до тех пор пока Microsoft не предоставит спецификации API, а зная Microsoft это произойдет никогда
Скоро восьмая будет. Там по идее все будет ок. Судя по анонсам.
Отличный пример приложения под Android на Qt — 2gis.
Все это хорошо, но вот подружить это все с cmake например весьма непросто. Как представлю количество костылей и подпорок, что все это взлетело, аж жутко становится.

Интересно, кто-нибудь подобным мазохизмом занимался?
Я занимался. Пришлось руками генерировать pro-файлы через configure_file() в CMake, но это заняло не так много времени, как я изначально предполагал.
Sign up to leave a comment.

Articles