О том, как мы делали Android-игру из iOS

Полгода назад мы сделали игру для iOS по одноимённому популярному мультику, и уже спустя пару дней она заняла ТОП русского App Store. Очень скоро мы решили, что будет здорово сделать игру доступной и для владельцев Android-устройств.

Главное — начать!

Изначально игра писалась на основе кросс-платформенного движка cocos2d-x с использованием физики Box2D. Когда мы приступили к портированию — первой нашей задачей было выяснить, не изменится ли логика и основное ядро игры при переносе на другую платформу. И мы с энтузиазмом к этой задаче приступили.

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

«Трудности перевода» с iOS на Android

Стоит упомянуть об отличиях в сборке проекта под разные платформы — для разработки приложений с использованием «нативных» функций и библиотеки OpenGL на платформе Android используется Android Native Development Kit (NDK), а для последующей компиляции и сборки общего проекта приложения используется Android SDK.

Сборка приложения проходит в два этапа. Сначала мы компилируем и собираем низкоуровневую библиотеку для обработки игровой логики, отрисовки, симуляции и обработки физики и так далее. Затем внедряем эту библиотеку в высокоуровневый Java-код, который обеспечивает выполнение низкоуровненой библиотеки, а также помогает осуществлять взаимодействие с функциями операционной системы.

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

Как мы решили трудности

Выходом для нас стало использование в качестве редактора кода IDE QtCreator. Сборку всего проекта проводили скриптом, который сначала собирал нашу библиотеку с основной логикой, а затем, с помощью привычной для Android разработчиков утилиты ant, собирал и основное приложение.

Результат

В итоге ядро игры было перенесено на Android платформу без особых проблем, осталось только увязать остальные части — взаимодействие с БД, библиотекой для совершения покупок из приложения, рекламными модулями. Кроме того, для iOS-версии игры, некоторые игровые интерфейсы были реализованы на «родном» для платформы iOS языке Objective-C с использованием стандартных компонентов Cocoa Touch, которые не совместимы с операционной системой Android. Мы приняли решение реализовать эти интерфейсы на «общем» для обоих платформ языке С++ с использованием функций библиотеки OpenGL.

Наши выводы и советы разработчикам

Пройдя этот нелёгкий путь перехода с iOS на Android, мы вынесли для себя некоторые моменты, которые могут быть полезны всем разработчикам.

Лучше определиться заранее, будет ли приложение кросс-платформенным, чтобы минимизировать при разработке использование всяческих плафтормо-зависимых технологий.

Если это возможно, предусмотрите возможность «безболезненного» переноса игры на другую платформу. Например, можно реализовывать потенциально платформо-зависимые функции отдельными модулями, и в последствии безболезненно заменить их при переходе с одной платформы на другую.

Изучите целевую платформу на предмет производительности. Многие устройства на базе операционной системы Android уступают по производительности аналогам от Apple.

Мы в процессе оптимизации столкнулись с проблемой низкой производительности игры на большинстве «середнячков». Проблема была решена переходом от сборки для архитектуры armv5, которую предлагает Android NDK по умолчанию, на сборку для armv7 (она включает в себя поддержку отпимизаций на уровне процессорных команд, а также дополнительные возможности для работы с числами с плавающей точкой, что в целом очень положительно сказывается на общей производительности игры).

Оно того стоило!

Вот так, постепенно, получилась игра, которую вы сейчас можете видеть в магазине Google Play.

«Маша» на андроиде ничуть не уступает своей старшей iOS-версии: в игре так же есть 30 замечательных уровней, интуитивно-простое управление и оригинальная озвучка от Маши.

Мы довольны проделанной работой и полученным опытом. Ещё больше нас радуют положительные отзывы всех, кто так ждал выхода игры на Android ☺

Теперь каждый ребёнок может спасать зайцев вместе с Машей!

Установить игру можно бесплатно в Google Play или App Store.