Вышедшее на днях обновление Skype для Android (с версии 2.0.0.47 до 2.1.0.46) принесло кое-что поважнее, чем поддержку видеозвонков в 17 моделях коммуникаторов (именно это обсуждается в новостях и на форумах). Случилось практически чудо – в Skype для Android вернулась нормальная громкость при разговоре и, главное, Skype научился использовать внутренний динамик (как при разговоре по телефону), а не внешний громкоговоритель.
Чтобы понять, каким долгожданным было это обновления, опишу свою предысторию. Впрочем, судя по форумам, с аналогичными проблемами сталкивались пользователи самых разных Android-коммуникаторов. Итак, в июне я стал обладателем устройства ZTE Blade и сразу же установил на него Skype (возможность его использования была одной из главных причин покупки нового аппарата). Тогда максимально доступной была первая версия, в ней была нормальная громкость звонка, но использовался “неправильный” динамик и была проблема с авторизацией.
Буквально через неделю Skype с помпой обновился до версии 2 (2.0.0.47), где починили проблему с авторизацией, добавили поддержку видеозвонков на четырёх моделях, но пустили звук по какому-то другому каналу так, что даже на максимальной громкости собеседника можно было услышать только в тихой комнате. Динамик все еще использовался “неправильный”.
И вот теперь Skype практически приблизился к идеалу, осталось разве что только интегрировать его в записную книгу, чтобы при каждом звонке была возможность выбрать как звонить – по телефону или по Skype (сейчас для этого нужно идти от обратного – сначала запустить Skype, а уже из него выбрать контакт из записной книжки устройства).
Добавлено 19 ноября 2011: после нескольких запусков, Skype опять отказался использовать правильный динамик. Переустановка программы тоже ни к чему не приводит. Вышедшее обновлении до версии 2.5.0.160 тоже не решает проблемы и, более того, опять вернуло проблему с авторизацией.
Так получилось, что у меня есть кое-какой опыт разработки приложений под 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.