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

Статья предназначена для тех, кто ещё не умеет программировать под Android (в том числе не знает язык программирования Java) и хочет начать, но не знает как проще всего начать, затрачивая наименьшее количество усилий.

Всё началось осенью прошлого года: прогуливаясь по вечернему городу Томску и болтая на различные темы со своим другом была затронута тема разработки игр. Первая идея была слишком огромной и массивной, и я, как начинающий программист самоучка, просто не смог бы потянуть такой проект. Одновременно хотелось сделать игру простой и доступной для большого спектра пользователей не прибегая к тяжеловесности настольных ПК и ноутбуков. А в рассматриваемый диапазон входят носимые устройства типа смартфона и планшета.

Тут мы сталкиваемся с выбором платформы: Android, iOS или Windows Phone (другие не рассматриваю, так как считаю, что они не занимают даже нишу в 1% от всех устройств). Поверхностно рассмотрев возможность написания и публикации приложения я кратко охарактеризовал эти платформы:

Android (Java): чаще всего пишется с использованием среды разработки Eclipse (https://eclipse.org/), но также есть платформа и от родителя — Android Studio (https://developer.android.com/sdk/index.html). На то время Studio была на стадии тестирования версии, где то 0.6.1, но благо стали появляться описания работы в ней. По своей сути она мало чем отличается от Eclipse. Ставится как на Windows так и на MacOS (к Linux душа не лежит, но вроде Studio ставится и на него).

iOS (ObjectC): среда разработки XCode — противная штука: ставится только на MacOS либо надо заморочиться с виртуальной машиной на Windows.

Windows Phone (?): наиболее близкая для меня платформа, так как с самого начала своей деятельности программиста работаю в Visual Studio. Единственный минус — нужна Windows 8 и выше, для того, чтобы интегрировать разработчик плиточного интерфейса. P.S.: что то не нравится мне ни Window 8, ни 8.1, ни 10 (сижу на Windows 7).

Ну и легко догадаться из объёма описания выбор пал на Android. Проблема знания языка осталась открытой. На момент появления идеи знал только 3 языка программирования: C++, C# и Pascal. Очень много форумов перешарил, русской литературы разработки приложений на Android на языках C++ и C# не нашёл, а это критичная для меня штука. Поэтому не долго думал, стал знакомиться с Java параллельно программируя приложения.

Для начала нашёл такой сайт: http://developer.alexanderklimov.ru/android/, с помощью которого я «стартанул» с хорошей скоростью (советую, если Вы новичок в этой области). Бесплатных уроков там достаточно, чтобы пройти вводный курс в Android Studio и разобраться в ней.

Далее, что бы не тратить денежных средств на обучение, в наших просторах сети интернета нашёл книгу для программирования приложений на Android: ProAndroid. На английском языке доступна 4 книга, на русский переведена только 2, но она мало чем отличается от 4 (С. Хашими, С. Комантинени, Д. Маклин, Разработка приложений для Android, 2011 или Pro Android 2).

Эту книгу я так и не дочитал до конца, так как я любитель писать игры, а не приложения. В поиске книги о разработке игр под Android нашёл следующую (Марио Цехнер, Программирование игр под Android, 2013), по которой и изучил программирование игр: от основ до практического приложения. Книга хороша тем, что помогает с 0 создать свою игру.

За 4 месяца изучения разработки игр и осваивания ещё неизвестного мне языка Java получил готовое приложение для публикации: Lines&Blocks. Зарегистрировал в конце февраля 2015 года.

Lines&Blocks

Об игре: Довольно простая игра: нужно соединять блоки одинакового цвета, находящиеся в разных строках. Чем больше блоков в комбинации, тем больше очков. Блоки нужно успевать соединять до того, как закончится время, за каждое совмещение даётся дополнительное время. Присутствуют блоки с бонусами, которые могут как помочь, так и помешать игровому процессу, а то и вовсе помогут проиграть.

Немного о разработке: Разработано в Android Studio. Рекламу так и не мог вставить, так что нет этой назойливой штуки. Приложение автоматически масштабируется под любой экран с соотношением сторон 9:16, при других работать будет, только сжатое изображение получится.

Игра на столько получилась простая, что весит всего 75 Кбайт.

Заголовок спойлера


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

1. За регистрацию разработчика Google взял с меня 25 долларов, а дохода нет.

2. Игра стала мне казаться слишком простой, без красивых эффектов, анимации.

… И я мечту свою лелея, решил проблему гениально… вставить рекламу и добавить спецэффектов.

Сначала о спецэффектах. Появилась идея сделать разрушающиеся блоки. И вот тут вот я столкнулся с ограничением производительности устройства: приложение то моё работает только с программным ускорением графики, а этого явно не хватает. На уровне программного ускорения смог написать программу разрушения одного куба, и это мне чрезвычайно понравилось. Написал полное приложение с разрушениями — ужасные лаги. Внутренний счётчик FPS показывал по 2 — 4 кадра в секунду. Ужасно не так ли? Слайд шоу.

Вспомнив уроки DirectX и то, что однажды писал свою псевдо-3D игрушку со своими программными расчётами 3D мира, я понял, что без аппаратного ускорения не обойтись. А аппаратное ускорение у Android как и у iOS это OpenGL, только немного урезанная ещё: OpenGL SE.

Лето 2015 года прошло в погружении разработке той же самой игры, используя аппаратное ускорение OpenGL SE. Как оказалось это не так уж и сложно, как DirectX (полноценный DirectX с языком C++, по крайней мере мне так показалось).

В процессе изучения и создания столкнулся с такими проблемами, как текстуры (рисование их и подбор размеров), создание объектов из текстур. Подробнее о них:

Текстуры. Я не художник и все рисование в различных графических редакторах сводится к правильным четырёхугольникам, кругам и линиям. Но я, собравшись с мыслями методом «научного тыка» нарисовал нужные мне текстурки в PhotoShop (единственно, что тогда было доступно, кроме Paint).

Создание объектов из текстур. Главная проблема заключалась в том, что потребовалось самому определять размеры каждого объекта и его положения на текстуре. Размер объекта в пикселях, размер текстуры в относительных единицах. Объектов более 100, а вершин больше 500 — вручную рассчитывать удовольствия мало и интернета под рукой не было, чтобы найти удобную программку. Итог: написал свою программу, которая загружает изображение и, расставляя и объединяя точки в многоугольники, на выходе даёт сконфигурированное описание объекта.

Реклама. Решение возможно двумя вариантами: Либо создаём файл разметки приложения, помещаем поверхность игры на задний план, а управляющие элементы на передний, либо программным образом добавляем баннер при инициализации окна приложения. Был выбран второй вариант, как наименее запутанный и без дополнительных накладных расходов процессорного времени.

Ну и немного об моём личном открытии при разработке. Не знаю, изобрёл ли я велосипед или нет (наверняка изобрёл). В современном мире устройства Android имеют большой диапазон значений разрешений экрана. В связи с этим, для повышения качества изображения и производительности (работаю с растровыми изображениями), пришлось добавить алгоритм масштабирования текстур. Изначальный размер текстуры разработан под FullHD экран. Чтобы не упал FPS на более простых устройствах, эта текстурка сжимается до нужного размера, повышая FPS с режущих глаз 23 — 27 до отличных 56 — 58 кадров в секунду на экранах 480*800.

В итоге опубликовано приложение под немного другим названием: Lines and Blocks. Смена названия потребовалась в связи с трудностью поиска его в Google Play (требуется полностью и правильно ввести Lines&Blocks, чтобы найти это приложение). Зато если Вы введёте Lines&Blocks в поиск Google, первая ссылка будет на моё приложение.

Lines and Blocks

Об игре: улучшенная версия предыдущей игры Lines&Blocks. Игра обзавелась текстурками, поэтому потяжелела до 9 Мбайт.

Парочка скриншотов


Игра полностью создана на своём простейшем движке на чистой Java и OpenGL ES 1.0. Сейчас проект стоит на месте, ожидая хорошего дизайнера, для «нормального» вида игры. В разработке 3D игра.

Итак, подведём итог сего поста: чтобы начать программировать игры под Android не нужно ничего сверхестественного:

1. Качаем отсюда Android Studio: https://developer.android.com/sdk/index.html.
2. Идём на этот сайт и используя бесплатные уроки ставим и знакомимся с Android Studio: http://developer.alexanderklimov.ru/android/.
3. Находим книгу: ProAndroid (русский, английский на выбор) С. Хашими, С. Комантинени, Д. Маклин, Разработка приложений для Android, 2011 или Pro Android 2. Читаем.
4. Находим книгу: Марио Цехнер, Программирование игр под Android, 2013. Читаем и пишем свою первую игру, сразу.
5. Возвращаемся на сайт пункта 2 и читаем как публиковать приложение в Google Play.
6. Всё, вы уже разработчик!

Высказывайте ваши комментарии, мнения и вопросы ниже.

Всем спасибо за внимание, всем пока!

PS: Кому будут интересны исходники, могу выложить в общий доступ (но учтите, там исходники могут быть немного «кривые»). Если ещё и комментировать их, то это вообще долгая, но вполне реальная история.