Первое приложение под Android — 550 загрузок за 3 недели

Первое приложение под Android — 550 загрузок за 3 недели

Хочу рассказать о том, как я начал программировать под android, и что из этого получилось.

Я давно хотел поменять свой телефон Nokia E66 на что-нибудь новое и красивое. Думал, думал и купил себе новую игрушку — HTС Desire. На носу был день рождения, всего-то месяц оставался, получился отличный подарок самому себе. Телефон, а точнее, операционка на нем — Android, произвел на меня неизгладимое впечатление. Первый месяц на работе все говорили, ну что ты гладишь свой телефончик. Давно меня так не цеплял новый гаджет. А я все игрался, ставил новые приложения и в какой-то момент подумал, а почему бы не попробовать написать что-то самому. Об этом читайте под катом… Я 15 лет в ИТ, первые 10 занимался программированием. Ну и решил тряхнуть стариной. Я прочитал Android SDK Developer's Guide. Этап настройки Eclipse, SDK и все такое я прошел быстро благодаря некоему Gars Vogella, который подробно описал процесс инсталляции, настройки и пошаговое создание первых простеньких приложений. С учетом того, что Eclipse я видел первый раз в жизни, эта ссылка оказалась незаменимой. Я понял, как примерно устроены приложения, и теперь для закрепления материала надо было написать свое приложение.

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

Хотелось сделать и что-то и с картами и gps и с интернетом и виджет и сервис и многопоточное приложение и социальные сети и много еще чего. И все сразу. Метался от одной идеи к другой, пока случайно не подумал про анекдоты. Честно говоря, сейчас я уже не помню, почему всплыли именно анекдоты. Пошел на сайт www.anekdot.ru, увидел там RSS, а дальше идея быстро обросла очертаниями. Идею с картами и GPS я откинул на потом, на следующее приложение.

Первоначальные требования получились такие: 1. Виджет 4x2. (в результате сделал 4x1) a. Перед запуском — выбор RSS, с какого использовать b. Анекдоты прокручиваются, timeout на прокрутку c. Подгрузка rss автоматическая 1 раз в сутки после 0 часов + ручное принудительное обновление d. При входе в приложение — лента всех анекдотов из текущего RSS 2. Приложение a. Сверху список возможных RSS b. Внизу лента анекдотов c. При длительном клике — всплывающее меню (открыть в интернете, facebook, twitter, ВКонтакте) d. Настройка i. нескольких RSS url ii. Скорость прокрутки анекдотов в виджете iii. Глубина хранения загруженных RSS в днях 3. Каждый анекдот надо показывать в отдельной рамке со скругленными краями

В процессе я их незначительно уточнял.

И, собственно, началось самое интересное — программирование. На java я раньше ничего не делал, но поскольку долго программировал на С#, то проблем в языке не было. Дальше началось кропотливое изучение SDK. Сами понимаете, делать первое приложение это не то, что по шагам повторить пример из учебника.

Название программы получилось такое: «Anekdot on Android». То, что оно начиналось на букву «a» оказалось на руку, т.к. в списке приложений оно было всегда сверху. Жаль, что в маркете сортировка не по алфавиту. Итак, первое, что надо было сделать, это скачать RSS с анекдотами и распарсить RSS. Немного погуглив, я нашел rssutils.jar. Это была моя ошибка, но об этом в конце. Все оказалось довольно просто. Только эмулятор страшно тормозил. Но в последствии на телефоне все летало. Дальше я стал делать виджет. Но не просто показать текст, а чтоб нажать на него можно было и т.д. и т.п.

Периодически я затыкался на каких-то ерундовых на первый взгляд проблемах, но решение искалось долго и нудно. Обычно так всегда и бывает. У меня уже был готов widget и главная activity, на виджете стали наживаться кнопки, он что-то делал, и тут… я обнаружил что кнопки на виджете нажимаются только, если он уже был запущен, и я под дебаггингом запускаю приложение. Ввиду постоянных изысканий кода я успел поменять уже порядочно и долго не мог понять, что же я сломалось. Я перерыл кучу форумов но такое странное поведение нигде не было описано. Случайно я обнаружил, что если поместить на экран несколько виджетов, то не работает из них только первый. Я потратил несколько вечеров на поиск проблемы, зашел в тупик и отложил разработку под android на несколько дней, пока ездил в Прагу в отпуск.

Надо сказать, что времени на android уходил много. Почти каждый вечер до поздна я сидел надо своим ноутбуком. На улице была холодрыга и это способствовало программированию. Короче говоря, потом оказалось, что если определять RemoteViews в нескольких местах заново каждый раз, то widget ведет себя не корректно. Все решилось созданием одного метода, который первый раз заполнял, а далее возвращал уже заполненную переменную с RemoteViews. Причем учтите, что в widget нельзя полагаться на локальные private поля класса. Они могут обнулиться в любой момент.

И вот ура! Я опубликовал версию 1.0.0. На разработку ушло примерно 1 мес вечерних бдений. Один паршивец написал плохой отзыв, начинавшийся со слов «Хрень полная». С учетом того, сколько времени я потратил на написание приложение, мне было просто обидно. За первые 2 недели приложение было скачано 350, активных инсталляций чуть больше 50%.

Дальше была запланирована сразу версия 1.1, которую недавно выложил в маркет. Главные добавки — публикация в Facebook и Twitter анекдота прямо из приложения. Вроде простая фишка, но я решал, что это будет чуть ли не главной изюминкой приложения. Время покажет, был ли я прав.

Описание API Twitter на сайт twitter.com замороченное. Т.е. понятно, как работает, но не понятно, как это просто и быстро реализовать. Я нашел отличный пример, как это сделать. Из-за подключенных библиотек APK файл сразу потяжелел более, чем на 100 kb.

У Facebook оказалось отличное описанное API по авторизации. Гораздо все проще и понятнее, чем у Twitter. Подключение заняло минимум времени. Зато не понятное описание, как работать дальше после авторизации. Пришлось искать примеры. Из минусов по сравнению с Twitter не понял, можно ли сохранить авторизацию так, чтобы окошко логина в facebook не показывалось после первого поста анекдота в facebook после запуска программы.

Как только я выложил версию новую версию, мой знакомый сказал, что у него программа вообще не работает. Пишет, что не может подключиться к интернету. После недолгих изысканий стало понятно, что на версии Android 2.1 библиотека rssutils.jar не работает и возвращает пустой вариант. К интернету она коннектилась, но данные не отдавала. В результате я написал сам парсер rss feed. Ничего сложного в этом нет. Примеров, как это сделать, полно. Но мой парсер поддерживает только одну единственную версию rss, который используется на сайте anekdot.ru.

В общем было как-то так. После выкладывания основной версии Anekdot On Android 1.1 я стал активно продвигать ее: сделал посты в facebook, попросил своих коллег лайкнуть.

Первые результаты -+100 инсталляций за первый день. Посмотрим, что будет дальше. Интересна статистика, которую выдает маркет:

Статистика по версии ОС 1 Android 2.2 73.2% (175) 2 Android 2.1 25.1% (60) 3 Android 1.6 0.8% (2) 4 Android 2.3.3 0.4% (1)

Статистика по девайсам: 1 HTC Desire 16.7% (40) 2 HTC Desire HD 15.5% (37) 3 Samsung Galaxy S 8.8% (21) 4 LG Optimus One 7.9% (19) 5 HTC Wildfire 7.1% (17) 6 Samsung Galaxy Tab 4.2% (10) 7 a1 2.9% (7) 8 SEMC Xperia X10 2.5% (6) 9 Huawei U8230 2.5% (6) 10 HTC Evo 4G 2.1% (5)

Статистика по странам: 1 Russia 40.2% (96) 2 Ukraine 12.6% (30) 3 United States 10.9% (26) 4 Germany 9.2% (22) 5 Belarus 8.8% (21) 6 Israel 2.1% (5) 7 Kazakhstan 2.1% (5) 8 Lithuania 1.3% (3) 9 Belgium 1.3% (3) 10 Italy 0.8% (2)

Из статистики по странам я сделал вывод, что анекдоты интересны в странах, где народ ностальгирует по России, по шуткам и т.п.

Не забудьте оставить отзыв и оценку. Конечно же положительную. Спасибо вам за внимание!

📎📎📎📎📎📎📎📎📎📎