
В июне, при поддержке компании HTC, в Украине проводился конкурс среди разработчиков Android-приложений, в котором я принял участие. Хочу рассказать вам о приложении, которое я подал на конкурс, о том, как оно создавалось и о проблемах платформы Android, с которыми я столкнулся.
Сначала краткое описание программы:
Энциклопедия достопримечательностей из всех уголков Украины. Подробная информация из Википедии на русском и украинском языке. Фотографии, видео и отзывы других пользователей. Дневник путешествий и интеграция с социальными сетями.
Для тех, у кого пока нет Android-телефона, под катом я сделал видео-обзор приложения.
Идея
Мне очень нравится путешествовать по Украине и открывать для себя новые места, поэтому, когда я узнал о конкурсе, идея пришла сама собой. Сделать приложение, отвечающее на два главных вопроса, которыми задаешься в незнакомом городе: «куда пойти?» и «что это за место?».
Внимательно прочитав (на украинском) правила конкурса и критерии оценки программ, понял, что выбранная тема подходит идеально: очевидна польза именно для украинского рынка и будет очень уместно задействовать «технологии платформы Android» — камеру и GPS.
Изначально было указано, что приложения на конкурс принимаются до 10 июня. Времени было мало, поэтому я решил ограничиться только достопримечательностями Крыма. Позже конкурс продлили до конца июня и это позволило добавить в базу данных программы множество интересных мест со всех уголков Украины.
В предыдущем абзаце ссылка на Википедию стоит неспроста. Немного изучив эту замечательную энциклопедию, я нашел массу новых интересных фактов даже о тех местах, которые я посещал с экскурсоводом. Решено: показывать для каждой достопримечательности статью из википедии. Тем более, что у википедии есть мобильная версия, которая замечательно выглядит в браузере Android-а.
Поскольку так уж вышло, что в сервисе микроблоггинга Juick, которым я тоже занимаюсь, есть и геолокация, и поддержка фото/видео, социальные функции приложения я решил сделать на основе Juick API. Специально для ВикиГид-а было добавлена JSON-версия API (пока закрыта для сторонних разработчиков). Также, благодаря использованию Juick, в программе автоматически появилась интеграция с Facebook и Twitter.
Разработка
У меня уже был опыт разработки на Java вообще и для Android в частности, поэтому никаких особых проблем не возникало. Впрочем, небольшие трудности были.
Первая трудность, с ко��орой пришлось столкнуться — это практически полное отсутствие готовой графики для Android и очень скудный набор системных иконок. У платформы довольно специфические требования, поэтому взять любой попавшийся бесплатный icons set не получится. А нарисованные с учётом Android UI Guidelines — можно на пальцах одной руки пересчитать. Приходится всё рисовать самому. Из этого выплывает трудность номер два.
Я работаю в Linux, приложение разрабатывалось в привычном для меня NetBeans. Официальный Linux Android SDK работает замечательно и никаких нареканий не вызывает, нет ни малейшей нужды устанавливать какую-то другую ОС. Но это касается только программирования. В UI Guideliness, на которые я дал ссылку выше, в отношении дизайнеров уже начинается дискриминация: все шаблоны и примеры — в формате PSD, настройки и скриншоты из руководства — только для Adobe Photoshop.
Разумеется, ставить ради пары иконок Windows и Photoshop или мучаться с QEMU/Wine у меня не было никакого желания, поэтому я попытался задействовать GIMP для наложения эффектов, указанных в настройках. Меня ждал неприятный сюрприз: для GIMP я нашел всего один плагин, реализующий «Inner shadow» и «Inner bevel», и этот плагин отказался делать bevel с size:0. Указываю подробности на случай, если кто-то сталкивался и нашел решение. Мне же пришлось оставить иконки без этого эффекта.
Главной проблемой для меня оказалась необходимость иметь телефон для тестирования приложения. Если простые программы вполне возможно проверять, используя только эмулятор, ��о в моём случае (использование камеры и GPS) нужен был именно телефон, которого у меня нет. :) А лучше даже несколько разных устройств. Например, я столкнулся с багом камеры Android, который зависит не только от модели телефона, но и от версии прошивки.
В целом же платформа Android производит приятное впечатление, несмотря на то, что местами функционал пока хромает и есть некоторые недоработки. Например, реализация алгоритма Base64 появилась только в версии 2.2, но использовать её пока не получается из-за слишком большого процента устройств со старыми версиями прошивки.
В завершение хочу поделиться интересным решением, на котором основана функция автоматического обновления базы программы. В моём случае требовалось только знать, есть ли изменения в базе с момента последней проверки или нет. Поэтому я воспользовался стандартной функциональностью протокола HTTP: заголовками «Last-Modified» в ответе и «If-Modified-Since» в запросе. Запоминаете дату последней модификации файла и при проверке указываете её серверу. Если изменения есть — сервер отдаст вам файл целиком, если нет — только код 302. Благодаря этому, на сервере не нужны никакие скрипты, а базу можно выкладывать в виде обычного статичного файла на абсолютно любом хостинге.
Результат

Загрузить
Программа доступна в Android Market и в виде APK на сайте конкурса.

Конкурс
Страничка программы на сайте конкурса: ВикиГид — можно оставить комментарий, рассказать свои впечатления от программы.
Результаты конкурса организаторы обещают выложить не позже 11-го июля, будем ждать. :)
