Пользователь
0,0
рейтинг
28 августа 2011 в 21:44

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

В предыдущей статье мы узнали, как легко начать писать свою игру, используя кроссплатформенный движок 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.
Денис @Denver2003
карма
9,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (10)

  • 0
    Классный способ писать игры под Android. Раньше не знал о таком.
  • +2
    Качество кода у данного проекта так себе, документация еще хуже. Для коммерческого проекта использовать крайне сложно. Этим страдают все имеющиеся фреймворки под android. Больше всего удручает что берутся исключительно опенсорсные библиотеки и sdk, после чего лепится кривенький монстр который с трудом работает под macos и иногда под windows через кучу костылей, а linux остается вообще за бортом (имея весь набор родного инструментария от google!).
    • 0
      Качество, возможно не очень. Документации вообще нет как таковой. Но проект не стоит на месте, развивается. Для разработчика, который впервые пробует себя в мобильной игровой деятельности, этот проект может стать неплохим началом. Ну а под linux, мне кажется, использовать подобные движки(в том числе конкретно cocos2d-x) тоже не проблема, все инструментарии и библиотеки имеются.
      • 0
        >Для разработчика, который впервые пробует себя в мобильной игровой деятельности, этот проект может стать неплохим началом

        Для них лучше выбрать более простое решение, а плата в 100-400$ в год за удобство ИМХО для IT специалиста копейки.

        Хотя если у вас нет цели заработать, а есть куча времени, то решение идеальное.
    • 0
      Не согласен с вами. Если говорить про cocos2d, то есть куча игр написанных с его помощью. А cocos2dx имеет практически тот же самый api, что и просто 2d, только при этом один и тот же проект (с незначительными переделками) можно скомпилировать под android и iphone, т.е. под две основных мобильных платформы на данный момент.
      • 0
        Речь только про порт cocos2d-x.
        • 0
          Ну тогда почти всю документацию можно взять из cocos2d для iphone. API там не очень сильно отличается.
          • 0
            Ага, и смотреть проект tests.

            Не знаю почему постоянно сетуют на то, что нет документации. Мало тестов(покрывают практически весь функционал кокоса)? Гуглите свой вопрос применительно к cocos2d и код легко переносится(практически «один в один») на с++. Или читайте книжки типа «cocos2d для чайников», если вопрос именно по основам работы с этой библиотекой).
  • +1
    Информация о том, что предпочтительна неофициальная версия android ndk устарела, возможно они забыли подправить статью. Смело ставьте последний официальный и работайте с ним.

    Если память не изменяет, в репозитории скрипты по умолчанию тоже больше не используют ndk от crystax :)
    • 0
      Спасибо, поставлю последний

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