Pull to refresh

Cocos2d-x: Сборка проекта под Android

Reading time 4 min
Views 30K
В предыдущей статье мы узнали, как легко начать писать свою игру, используя кроссплатформенный движок cocos2d-x и научились запускать наше приложение на платформе Win32. Но этого не достаточно, ведь основная цель, разработка для мобильных устройств. В этой статье мы соберем проект под операционную систему Android.

Установка ПО


Работать будем с проектом из предыдущей статьи. Последовательно устанавливаем и настраиваем слкедующее ПО: JDK и JRE, Android SDK и среду разработки Eclipse + ADT плагин. Установка этого инструментария описана во многих статьях, например в этой.Также нам понадобиться библиотека Android NDK, на сайте cocos2d-x, не рекомендуютиспользовать официальную версию, и отправляют всех на сайт Dmitry Moskalchuk’a. Оттуда качаем нужную нам версию (я буду использовать r5). После скачивания, распаковываем архив в любую удобную папку (например: C:\android\android-ndk-r5-crystax-1\). Для компиляции нативного кода нам необходм cygwin, версии не менее 1.7. Скачиваем setup.exe, запускаем, выбираем установку из интернета, указываем путь, сервер и т.п.

Важно, когда доберемся до окна выбора пакетов установки, отметить галочкой пакет make(введите слово make в поле Search).

Все установлено и готово к работе, мы можем продолжать.

Настройка


Чтобы не потерять наши исходные файлы, переименуем папку нашего проекта MyCocosProject, например назовем ее MyCocosProject1(не забудьте закрыть VisualStudio). Затем отредактируем файл create-android-project.bat, он находиться в рабочем каталоге, где установлен cocos2d-x, там же где и наш проект MyCocosProject (в моем случае каталог c:\android\rep\cocos2d-1.0.1-x-0.9.1\). Открываем файл в текстовом редакторе и меняем в нижеприведенных строках пути к каталогам cygwin’а, Android SDK Tools и NDK:

set _CYGBIN=f:\cygwin\bin
set _ANDROIDTOOLS=d:\android-sdk\tools
set _NDKROOT=e:\android-ndk-r5

После изменения у меня получились строки следующего содержания:

set _CYGBIN=с:\cygwin\bin
set _ANDROIDTOOLS=c:\android\android-sdk-windows\tools
set _NDKROOT=c:\android\android-ndk-r5-crystax-1

Сохраняем файл.

В процессе написания статьи, был найден небольшой “баг”. В новом релизе(1.0.1-x-0.9.1) библиотеки cocos2d-x, разработчики решили заменить название папки resource на resources, чтобы привести к общему виду проекты для iPhone и для Android. Но, как это часто бывает, поменяв это в одном месте, забыли поменять в другом. Возможно разработчики уже исправили эту ошибку, а может и нет. Мы исправим баг самостоятельно. Заходим в папку \template\android\, ищем файл build_native.sh и в блокноте(лучше использовать не стандартный блокнот) редактируем строку:
RESOURCE_ROOT=$GAME_ROOT/Resource
заменив ее на:
RESOURCE_ROOT=$GAME_ROOT/Resources

Запускаем наш новый create-android-project.bat. В консольном окне нам предложат ввести имя java пакета (введем org.cocos2dx.myapp), и имя нашего проекта (вводим MyCocosProject).

Последнее, что нас попросят — это идентификатор версии Android. Например, для версии 2.1 требуется указать 3, а для 2.2 — 4 и так далее. Мы будем использовать версию 2.1, поэтому вводим 3.

Нажимаем Enter и ждем окончания процесса. Скрипт создает папку с именем проекта, которое мы ввели, т.е. MyCocosProject и генерирует в ней шаблонный java проект. Скопируем туда же все каталоги и файлы из сохраненной ранее папки MyCocosProject1, так же перепишем файлы ресурсов из каталога Resource в папку Resources (это следствие вышеописанного “бага”, скорее всего это временная проблема и разработчики согласуют названия папок для всевозможных платформ уже в скором времени). Теперь все готово для компиляции проекта под Android.

Сборка


Запускаем CygWin и с помощью команды cd (cd /cygdrive/c/android/rep/cocos2d-1.0.1-x-0.9.1/MyCocosProject/android), переходим в нашу папку, следом выполним файл build_native.sh (./build_native.sh).

Если все было сделано правильно, то на выходе мы получаем скомпилированные библиотеки libcocos2d.so, libcocosdenshion.so и libgame.so.
Открываем, готовый к работе, Eclipse и создаем новый Android проект (New->Project, Android project). Важно, чтобы имя проекта, совпадало с названием нашего, сгенерированного скриптом, проекта, т.е. MyCocosProject. Ставим галочку напротив Create project from existing source. В поле Location указываем путь нашего проекта (C:\android\rep\cocos2d-1.0.1-x-0.9.1\MyCocosProject\android\). Api выбираем Android 2.1. Нажимаем Finish. Проект готов. Запускаем его на эмуляторе с версией SDK 2.1. И что мы видим:

Картинка отображена вверх ногами, текст и кнопка выхода не там, где должны были бы быть. Давайте откроем файл AppDelegate.cpp и найдем следующую строчку:

// sets landscape mode
pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);


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

#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
// sets landscape mode
pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
#endif


Чтобы удачно запустить проект после изменения исходного кода, нужно сначала в Eclipse сделать очистку проекта(Project->Clean). Затем в консоле cygwin повторно выполнить build_native.sh(./build_native.sh) и уже после этого запускать проект в Eclipse. После изменений получаем следующую картину:

В итоге, мы добились того, чего и хотели. Наш проект удачно запущен на эмуляторе устройства Android.
Tags:
Hubs:
+26
Comments 10
Comments Comments 10

Articles