А сегодня у нас статья хабрапользователя YoungSkipper о разработке игр для Android и особенностях Android Market.

Некоторое время назад я закончил портирование игры iDracula — Undead Awakening которую разработала компания Moregames Entertainment с платформы iPhone, на платформу Android.

Я готов поделиться с вами своими мыслями и проблемами, с которыми я столкнулся.
Хочу предупредить что я гораздо больше работал с платформой Android (исходя из специфики задачи :), но так же имею опыт разработки более «мелких» игр для платформы iPhone. Так же игры для iPhone я разрабатывал на cpp, а не ObjectC.

Cреда и инструменты разработки

Сложная тема, учитывая разность языков и операционных систем. Поэтому коротко и ИМХО.
xCode к сожалению на мой взгляд сложно назвать современной IDE, особенно когда приходиться много работать и рефакторить чужой код. В этом плане преимущество IntelliJ IDEA, или Eclipse (плагин для разработки под Android есть под обе IDE) чувствуется очень сильно. Мне в ряде случае было проще перенести код как есть, а потом уже сделать определенный рефакторинг кода уже в java версии. Отладка под xCode так же требует гораздо больше навыком и знания определенной специфики. К минусам инструментов платформы Android можно отнести некоторую нестабильность плагинов (особенно eclipse) — они периодически забывают adb.exe в памяти, что делает невозможным профилирование через DDMS. Необходимо соблюдать четкий порядок, сначала запустили ddms, потом уже отлаживаемся. Существенным минусом так же является тяжеловесность эмулятора — стартует он долго, работает медленно. При 35 fps на устройстве я на своем MacBook Pro имею 15 fsd на эмуляторе, и еще меньше в режиме отладки, что делает не возможность полноценного тестирования многих вещей. Симулятор для iPhone стартует практически мгновенно, и не уступает в скорости девайсу.

SDK

Единственная проблема с которой я толкнулся по iphone это отсутствие поддержки ogg. Проблема решилась простым портирование соответствующей библиотеки.

С Android SDK к сожалению не все так просто.

Самая серьезная проблема это утечки памяти при использовании OpenGL функций glXXXPointer. Фактически на каждый вызов функции мы имеем memory leak размеров в массив который мы устанавливаем. Т.е. что не делай при использовании этих функций мы рано или поздно получим вызов gc, а это от 200 до 1500 ms лаг. Вот тут есть подробности. Так же стоимость вызова функций glXXXPointer сильно выше, что впрочем ожидаемо.

Большая стоимость обработки тачскрина — т.е. тупо у вас 50 фпс, ставите палец на экран у вас 30 фпс. Ибо плодятся MotionEvent-ы и грузят систему. Решение делать sleep после получения MotionEvent решает проблему не польностью.

Отсутствие поддержки мультитача. Причем на уровне SDK, т.е. даже если у вас прошивка которая поддерживает мультитачь, или HTC Hero в котором так же есть поддержка мультитача — вы в данный момент не сможете использовать его в своем приложении.

Устройства

К сожалению в текущий момент мы имеем достаточно разные устройства. Основные проблемы связаны с HTC Dream (G1). G1 имеет гораздо более худшую чувствительность трекбола по сравнению с Magic и Hero. Там где игрок будет комфортно играть используя трекболл на Magic, он может иметь проблемы на Dream.

Есть проблемы и получением данных с сенсоров положения при включенной музыки. Если у вас играет музыкальный трек с громкостью 0,5 от максимальной, то даже в неподвижном состоянии вы будите получать дребезг датчиков от -40 до +40 из возможного диапазона от -90 до +90 (-180/+180). Фактически при таком дребезге не возможно использовать датчики положения для управления игрой. Только при снижении громкости до 0,2 от максимальной дребезг снижается до диапазона -4/+4, что уже приемлемо.

На G1 так же есть проблемы с малым количеством памяти, они усугубляется тем что виджеты которые пользователь размещает на своем рабочем столе могут потреблять мого памяти (до 15 мегабайт), но при этом пользователю не очевидно что они являются запущенными программами. Поэтому можно получать разные отзывы от пользователей с одинаковыми устройствами. От «вау игра летает» до «невозможно играть, одни лаги» (см. пункт выше о мемори ликах).

Проблемы с G1 с малым количеством места для установки программ, в среднем на нулевой системе у пользователя порядка 30 мегабайт. После установки приложений меньше. Если приложение большое (полная версия iDracula занимает 13 мегабайт) то могут быть проблемы с установкой. Ниже распишу более подробно.

Доставка контента пользователю

К сожалению Android Market по всем параметрам проигрывает AppStore.

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

Проблемы с установкой больших приложения. Уже как лет пять на всех сотовых телефонах при установки приложения пользователь после скачивания приложения в случае нехватки места для установки помимо предупреждения получает диалог с возможностью удалить текущие приложения и сражу же продолжить установку. На android он вынужден вызвать множество меню для данного дейсвия. Более того если ваше приложение занимает 10 мегабайт, то для его установки требуется минимум 20 мегабайт (скаченый файл, и место для установки).
Одним из решений является установки приложения без ресурсов, и скачиванием ресурсов самим приложением с сохранением их на флешку.
Хотелось бы видеть это стандартной возможностью SDK — возможность пометить часть файлов для размещения на флешке.
Так же очень не хватает возможности получить помимо отзыва (например о падении приложения) информацию об устройстве на котором пользователь оставляет отзыв, а в идеале лог работы приложения как это сделано в iphone.
Не хватает раздела Entertaiment — игры вынуждены соревноваться в топах с приложениями типа «Красивый огонь на вашем экране».
Ну и отсутствие скриншотов, приводит к игру в большей мере выбирают исходя из названия (описания как известно никто не читает), такая проблема была кстати и на BREW рынке. Плюс еще есть ограничение на размер описания.

Если резюмировать то разрабатывать нужно приложения размером до 3х мегабайт, используя желательно не более 15 магабайт памяти и делать запас на тормоза при работе с тачскрином.

Изначально было желании написать более структурированный обзор и большее времени уделить iphone, то чувствую что так статья бы провалялась в черновиках еще бы месяц. Надеюсь, сложенное будет полезно и в таком виде. Я готов ответить на вопросы в комментариях.

P.S. Если у вас есть готовая игра под iphone или другую мобильную платформу и вы хотите ее порт под Android с условием shared revenu или фиксированной оплаты я с удовольствием пообщаюсь с вами. 🙂 Например по скайпу — youngskipper. Готов так же пообщаться с другими разработчиками — пообсуждать платформу.

Связаться с автором статьи можно по почте yunoshev[гав-гав]gmail.com

Previous ArticleNext Article
Технический директор IT-Dimension, компании-разработчика кросс-платформенного программного обеспечения

This post has 3 Comments

3
  1. Весьма сырой материал, хотя и изложены интересные факты. Заголовок вообще не соответствует содержанию.

  2. Мне понравился прежде всего из-за описания Android market %)

  3. Действительно, называйте вещи своими именами. Единственная нормальная статья про использования OpenGL в последнем СДК опубликована на оф сайте и она про GLSurfaceView. Если б еще таких статей… поскольку старые к новому сдк не подходят

Leave a Reply

Your email address will not be published. Required fields are marked *

S.

Smaato. Зарабатываем деньги на своем приложении

Сегодня у нас еще одна статья о том, как можно заработать на своем мобильном приложении. За статью спасибо Ромео Ордосу.

Кто еще не в курсе smaato это компания, специализирующаяся на мобильной рекламе, объединяющая в одну сеть различных поставщиков рекламы, таких как Admod и Quattrowireless. Прицип работы прост: вы создаете свое приложение, внедряете в него рекламу, и зарабатываете на этом деньги. Для разработчиков СНГ это довольно хорошая альтернатива, так как размещать платные приложения на Android Market пока еще нельзя.

В январе 2010 года smaato выпустили SDK для работы с ОС Android. Мне хотелось бы поделиться небольшим опытом работы с smaato. Возможно, кому-то это будет полезно.
Регистрируемся на сайте smaato и добавляем свое приложение. Жмем по ссылке “Install Tools” справа от приложения и качаем SOMA SDK for Android. Записываем свои PublisherID (Идентификатор разработчика) и AdspaceID (Идентификатор приложения).

SDK внедряется в приложение очень легко. Всё подробно описано в SDK, поэтому сам процесс описывать не стану. Хочу сразу предупредить о проблеме с которой столкнулся сам: если не активировать приложение на сайте(кнопка status), то реклама появляться не будет, и в логах DDMS появится ошибка об отсутствии параметра devip(IP адрес запрашивающего устройства). Чтобы избежать этого, нужно активировать режим отладки (Описано в документации).

Буквально через пару часов после размещения приложения на маркете, вы уже сможете видеть свою статистику.

Отчет за Январь 2010 для моего приложения Music Junk:

Количество скачиваний: 49324
Количество активных установок: 33277

Вывод денег происходит в страны СНГ происходит через SWIFT – переводы. Для этого необходимо открыть в банке счет именно для этих переводов. Оплата производится по истечении 60 дней по окончанию календарного месяца.

Я воспользовался услугами ПриватБанка, так как давно являюсь их клиентом и у них удобная система интернет-банкинга. Карта открывается в USD и моментально, цена: 30 грн(~120 руб). С её помощью можно в любом банкомате проверить баланс, но обналичивать деньги можно только в отделениях банка. Также, воспользовавшись услугой Приват24 можно легко прослеживать поступления на счет через интернет и даже по SMS. Вместе с картой нужно попросить сделать распечатку реквизитов банка для SWIFT – переводов. (прим. Есть возможность открыть VISA для этих же переводов. Но это долго и дороже, поэтому у меня на этот счет информации нет). Как мне объяснили, денежные переводы не облагаются никаким налогом, но взимается комиссия в размере 1% от суммы перевода.

Также стоит помнить, что Smaato забирает процент от прибыли(Revenue) себе по такой таблице:
1 – 5.000.000 показов: 30% от общей прибыли
5.000.001 – 20.000.000 показов: 25% от общей прибыли
> 20.000.000: 20% от общей прибыли

На дворе март… Я захожу на свой аккаунт smaato и вижу следующее:

Ура! Перехожу по ссылке и попадаю на экран ввода информации о счете:

Немного об этих полях:

Bank Account Information:
Payment Preference – выбираем International Wire Transfer. Единственный приемлемый метод для нас;
Bank Name – Имя банка(напр. PRIVATBANK);
Bank Account – номер счета. Он находится в договоре, а не на поверхности выданной карты(!!!);
Country – Страна, где находится банк(напр. Ukraine);
City – Город главного отделения банка(напр. DNEPROPETROVSK);
Prov/Region – Регион, где находится главное отделение банка(напр. DNEPROPETROVSKAYA OBL.);
SWIFT Code – SWIFT код банка(напр. PBANUA2X);

Beneficiary Address:
Address 1 – Адрес проживания(Улица, дом, квартира);
Country – страна проживания;
City – город проживания;
Prov/Region – область или АР;
ZIP/Postal Code – местный индекс;

Tax Identification:
Выбираем “Other Tax ID” и вписываем свой ИНН.

По истечении месяца вы получаете выписку по счету:

Credit Note Total – это те деньги, которые вам и должны будут перевести.

15 апреля я получил уведомление о переводе. Как мне объяснил представитель Smaato перевод может занимать и меньшее время, но в марте у них были технические проблемы и поэтому этот процесс занял большее время. За Январь 2010 я получил 750$. Формула по которой рассчитана прибыль: Net Revenue – 30% – 20$.

В итоге, я считаю Smaato неплохим источником прибыли для разработчиков бесплатного мобильного софта, и особенно для тех, у кого нет возможности размещать платные приложения.

Профит и левелап получены.

Оригинал статьи и интересное обсуждение.

G.

Google меня пугает! Они обещают что смогут сами удалять ПО, установленное на телефонах пользователей

Сегодня ComputerWorld опубликовал такую штуку, от которой лично у меня до сих пор волосы дыбом!

Они пишут что компания Google сохраняет за собой право дистанционно удалять программы со смартфонов пользователей , если в этих программах нарушается договор разработчика на распространение приложений. На языке оригинала это звучит так:

Google may discover a product that violates the developer distribution agreement … in such an instance, Google retains the right to remotely remove those applications from your device at its sole discretion

Ну ничего себе они мне такое рассказывают! Как пользователь я бы очень не хотел чтобы “Большой Брат” сидел в моем телефоне и следил за тем как, когда и зачем я использую установленное ПО. И к тому же все это на “открытой платформе Android“. Ну надо же было так испоганить идею.

Напомню что подобная возможность, называемая “Remote Kill Switch”, ранее была обнаружена в телефонах Apple iPhone, что вызвало недовольство со стороны пользователей, обеспокоенных ущемлением их прав.

Вместе с тем, Google обещает что будет стараться вернуть деньги пользователю за удаленное ПО:

In addition, Google says that if it does remotely remove an application, it will try to get users their money back

Классно! Всю жизнь мечтал. Google именно “будет стараться”, никаких гарантий. Описание подобных “стараний” найти не удалось.

Как разработчика меня, возможно, устроил бы вариант с удалением пиратских копий моего ПО, но возврат денежек за пиратскую копию как-то… не радует.

Вот так из хорошего получается странное… А в том, как же это работает, нужно будет еще разобраться.