Qt для Android (Necessitas Framework) – действительно ли это работает?

bpeme4ko 27 ноября 2011 в 01:11 26,1k
Этот пост участвует в конкурсе «Умные телефоны за умные посты».

Так получилось, что у меня есть кое-какой опыт разработки приложений под Qt, а недавно появился коммуникатор на Android. Узнав о том, что существует проект Necessitas (раньше он называвался Android-Lighthouse), захотелось проверить возможность запуска Qt приложений под Android на практике.





Чтобы начать перенос программы, нужно установить Necessitas SDK (существуют версии под Linux, Windows, MacOS). Он включает в себя Qt Creator, разнообразные компоненты Qt, собственные библиотеки, а также ставит Android SDK и NDK, если их еще нет на компьютере.

В окне настроек (Tools->Options) Necessitas Qt Creator есть дополнительная вкладка — Android. Иначе выглядят и свойства проекта, там появляются характерные для Android опции вроде разрешений на использование ресурсов телефона. Также надо четко указать, какие библиотеки использует приложение (в моем случае это были QtCore, QtGUI, QtDeclarative). Если не указать нужную библиотеку или не задать название для приложения, на выходе получится неработающий .apk.

Для тестирования на реальном устройстве надо поковыряться еще и c adb. Вероятно, это знакомо всем, кто разрабатывает что-нибудь для Android под Linux, но для пришедших из мира Qt это может быть неожиданным. Чтобы устройство было доступно для развертывания приложений (и Qt Creator не падал, когда не может найти такого устройства), нужно произвести настройки USB и перезапусть adb под рутом:

cd /opt/necessitas/android-sdk-linux_x86/platform-tools/
./adb kill-server
sudo ./adb start-server

Собирать Qt-приложения можно только под Android 2.2 и выше, при выборе более старой версии появится ошибка во время компиляции. При появлении ошибок во время сборки, стоит удалить из папки проекта все файлы .pro.user, оставив только один .pro-файл, и заново открыть проект в Qt Creator.

В остальном Necessitas SDK сделан прекрасно – настраивается за 5 минут, а на выходе получается готовый к установке .apk.

     

Когда программа запускается на устройстве первый раз, она скачивает приложение Ministro из Android Market. Он выступает как бы мостом между Qt-приложением и операционной системой, подгружая нужные конкретному Qt-приложению библиотеки. При первом запуске библиотеки скачиваются из Сети, потом просто подгружаются в память.

Разобравшись с тем, как все это работает, мне удалось успешно скомпилировать и запустить на перепрошитом на Froyo коммуникаторе ZTE Blade программу для изучения иностранных слов OppiaSanoja. Necessitas корректно поддерживает основной нужный ей функционал – отрисовку QML (с соблюдением пропорций и внешнего вида элементов – все выглядит точно так, как на Maemo и MeeGo), работу с файловой системой, обращения к QSettings (правда, все настройки обнуляются при переустановке программы, чего не происходит, скажем, на Maemo).



Самому разработчику и другим заинтересованным лицам пользоваться продуктом вполне можно – никаких критических недоработок и ограничений в Necessitas нет (хотя для более сложных программ может не хватать, например, аппаратной отрисовки OpenGL). Да и просто само зрелище завораживает – вид работающего Qt-приложения на Android-аппарате. Но двигать такие произведения в массы пока рано. Вот какие ошибки обнаружились даже в несложной программке:

— При бездействии приложения и его повторном запуске выдается окно с ошибкой. Эта проблема характерна именно для Android, так как на Nokia N900 это же приложение неделями висит в фоне и корректно восстанавливается обратно.

— При восстановлении из фона не отрисовывается текущий QML-вид (пользователь будет видеть черный экран, пока не начнет тыкать по экрану или слайдить). Эта проблема уже замечена разработчиками, в какой-нибудь из будущих версий ее исправят.

— Виртуальная клавиатура остается на экране всегда, будучи хоть раз вызвана (конечно, пользователь может убрать ее нажатием кнопки back, но лучше, если бы это умела сама программа).

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



Возможно, часть этих вопросов так или иначе можно решить, но у Necessitas нет обширной документации, а в списке рассылки эти вопросы проигнорировали (как, впрочем, игнорируется и большая часть других).

Подытоживая, можно сказать, что сейчас Necessitas – это скорее красивая игрушка для гиков (есть, кстати, версия для запуска Qt-приложений на Bada), чем реально применимый в разработке фрэймворк (об невозможности на данный момент создания массовых приложений говорится и на странице проекта).

Учитывая ситуацию в Nokia и малое количество разработчиков Necessitas, вряд ли в ближайшее время можно будет создавать Qt-приложения под Android для выпуска в массы. Впрочем, всегда можно присоединиться к проекту (Necessitas работает по принципу open source) и поработать над улучшением связки Qt+Android.
Проголосовать:
+25
Сохранить: