Это техническое руководство по сборке Cocos2D-HTML5 JSBinding для устройств Android с архитектурой x86. Cocos2D-HTML5 — это платформа веб-игр с открытым исходным кодом, распространяемая по лицензии Массачусетского технологического института. Это версия проекта Cocos2d-x на HTML5. Цель разработки Cocos2d-html5 — обеспечить кроссплатформенную совместимость Cocos2d между браузерами и встроенными приложениями. Используя платформу Cocos2d-html5, можно разрабатывать игры на Javascript с помощью API, полностью совместимого с Cocos2d-iPhone. Cocos2d-html5 также поддерживает выполнение игрового кода в привязке Cocos2d к Javascript без изменений или с незначительными изменениями.
Для ознакомления с этим руководством необходим опыт в разработке приложений NDK для устройств Android, особенно с архитектурой X86.
1)Подготовка среды сборки
Необходимо: Eclipse, ADT, CDT, Android SDK и Android NDK. Также следует отметить UDE — удобную среду разработки в CMCC. Эта среда поддерживает кроссплатформенные разработку, отладку и компиляцию, а в ближайшем будущем будет поддерживать разработку игр.
Для компиляции проекта Cocos2D-HTML5 Jsbinding также требуется Cygwin. Это решение предоставляется компанией Redhat.
ADT ,http://developer.android.com/tools/sdk/eclipse-adt.html
CDT ,http://www.eclipse.org/cdt/
SDK ,http://developer.android.com/sdk/index.html
NDK ,http://developer.android.com/tools/sdk/ndk/index.html
UDE ,http://dev.10086.cn/app/local/
Cygwin,http://www.cygwin.com/
Распакуйте архив cocos2d-2.1beta3-x-2.1.1.zip в папку D:\Game\SDK\. Это базовая папка для среды сборки JS Binding.
Распакуйте архив android-ndk-r8.zip в папку D:\Game\NDK, а затем добавьте этот путь в системную среду. Также можно добавить этот путь в среду Cygwin.
Добавьте новую системную среду, назовите ее NDK_ROOT, а в качестве ее значения задайте D:\Game\NDK\android-ndk-r8。
Гибридным приложениям требуется интерпретатор для обработки кода JS. JavaScript и SpiderMonkey — популярные интерпретаторы JavaScript для разработчиков.
Поскольку JIT-компиляция может повысить производительность JavaScript, разработчикам игр на HTML5 важно уделить особое внимание вопросам производительности.
Судя по всему, все используют JavaScriptCore, но при этом все, фактически, нарушают условия лицензии LGPL (даже корпорация Apple нарушает условия этой лицензии). Мы попробовали найти другие виртуальные машины JavaScript и решили, что SpiderMonkey нас вполне устраивает.
https://developer.mozilla.org/en/docs/SpiderMonkey
SpiderMonkey — это обработчик JavaScript корпорации Mozilla, написанный на C/C++.
2)Копирование файла ИЛИ компиляция с помощью Cygwin
Можно использовать любой из вариантов.
Cygwin — очень мощное средство для работы над кодом C++. Для отладки исходного кода можно использовать gdb. Другой способ сборки — с помощью сценария build_native.sh. Это удобнее, чем использовать Android NDK, дополненный компилятором Cygwin. Однако по возможностям этот способ не превосходит Cygwin.
2.A)Копирование файла
Ниже представлен пакетный сценарий. Если требуется использовать этот сценарий для сборки других проектов, нужно лишь изменить значения EngineHome и SamplesApp.
D:\Game\Home\Readme\MoonWar>type MoonWar_Apk.cmd
set EngineHome=D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1
set SamplesApp=MoonWarriors
set AndroidDir=%EngineHome%\samples\Javascript\%SamplesApp%\proj.android
set SamplesDir=%EngineHome%\samples\Javascript\Shared\games\%SamplesApp%
set BindingDir=%EngineHome%\scripting\javascript\bindings\js
echo %EngineHome%
echo %SamplesApp%
echo %AndroidDir%
echo %SamplesDir%
echo %BindingDir%
cd /d %AndroidDir%
if exist assets rmdir /s /q assets
mkdir assets
cd assets
mkdir res
mkdir src
xcopy /s /y %SamplesDir%\res res
xcopy /s /y %SamplesDir%\src src
copy /y %SamplesDir%\*.js .
copy /y %BindingDir%\*.js .
2.B)Компиляция с помощью Cygwin
$ cd "D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1"
$ chmod -R 755 *
$ cd "D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android"
$ ./build_native.sh
please define NDK_ROOT
$ vi ~/.bashrc
export NDK_ROOT='D:\Game\NDK\android-ndk-r8'
:q!
$ . ~/.bashrc
$ env | grep NDK
NDK_ROOT=D:\Game\NDK\android-ndk-r8
$ ./build_native.sh
"Compile++ thumb : moonwarriors_shared <= main.cpp
"Compile++ thumb : moonwarriors_shared <= AppDelegate.cpp
......
ld.exe: ./obj/local/armeabi/js_static.a: No such file: Permission denied
collect2: ld returned 1 exit status
$ ls -la ./obj/local/armeabi
$ chmod -R 755 ./obj/local/armeabi/*.a
$ ./build_native.sh
$ chmod -R 755 assets
3)Создание проекта игры, компиляция связанных библиотек
Шаг 3.A обязателен; затем можно на выбор использовать 3.B или 3.C, поскольку для проекта эти шаги обладают одинаковой функциональностью.
3.A) Создание проекта
Создайте новый проект в Eclipse. File -> new -> Project -> Android -> Android Project from Exsiting Code、перейдите в папку
D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android
Затем Project -> Clear -> Clear, выберите MoonWarriors. Красным цветом будет выделена ошибка в папке src. Мы отследили проблему:
Can’t import org.cocos2dx.lib Line26
Cocos2dxActivity can’t be a class Line30
Cocos2dxActivity can’t be a class Line33
3.B) Добавление связанной библиотеки путем компиляции исходного кода.
Щелкните правой кнопкой мыши проект, созданный на шаге 3.A. Выберите Reference -> Android -> Library. Ссылка указывает на проект java. Затем мы собираем библиотеку, на которую будем ссылаться, путем компиляции исходного кода.
Необходимо собрать библиотеку Java cocs2d-x.
Import export library -> File -> New -> Project -> Android -> Android Project from Exsiting Code、Перейдите в папку
D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\cocos2dx\platform\android\java
(Attached Pic MoonWar_01.jpg) Примечание. Изображение было записано в китайской версии; для остальных версий Eclipse оно должно быть схожим.
3.C) Добавление связанной библиотеки путем копирования файла.
Если решение, указанное в шаге 3.B, по какой-либо причине не подходит, также можно добавить библиотеку путем копирования файла. Можно скопировать готовую JAR-библиотеку в папку проекта в качестве зависимой библиотеки. Такой подход заменяет действия, описанные в шаге 3.B.
Откройте папку D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\cocos2dx\platform\android\java
и перетащите файл в папку src в проекте Eclipse. При этом на экране должен появиться значок «+». Выберите «Copy files and folders» (Копировать файлы и папки), при появлении запроса «Override?» (Заменить?) выберите «Yes for all» (Да, для всех).
Затем выберите Import export library -> File -> New -> Project -> Android -> Android Project from Exsiting Code、Перейдите в папку
D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\cocos2dx\platform\android\java
3.D) Проверка зависимой библиотеки.
Снова проверьте проект MoonWarriors: теперь ошибка должна исчезнуть, а файл java.jar должен отображаться в списке Android Dependencies.
(attached picture MoonWar_02.jpg)
4)Настройка среды сборки
Щелкните проект правой кнопкой мыши, выберите Project -> Reference -> Builder -> New -> Program и введите следующие данные. Убедитесь, что рабочая папка правильно указана. Если компилятор Cygwin уже установлен, а шаг 2.B был успешно выполнен, можно пропустить шаг 4 и перейти к шагу 5.
(prcture MoonWar_03.jpg)
Name:NDK Cocos2dxActivity
Place:D:\Game\NDK\android-ndk-r8\ndk-build.cmd
Working directory:${workspace_loc:/MoonWarriors}
Independent variable:
NDK_MODULE_data-path="D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1;D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\cocos2dx\platform\third_party\android\prebuilt"
(Picture MoonWar_04.jpg)
Примечание:
Рабочую папку можно найти в разделе Reference -> Resources -> Path. Скопируйте значение в поле рабочей папки.
Затем нужно задать правильный путь к NDK.
Выберите: Window -> Reference -> Android -> NDK -> NDK Location, задайте значение D:\Game\NDK\android-ndk-r8
5)Сборка проекта
Можно выбрать 5.A или 5.B в зависимости от того, какой из этих вариантов представляется более удобным. Для сборки приложений NDK для платформы Intel Atom необходимо добавить строку APP_ABI := x86 в файл Android.mk.
5.A)Сборка с помощью NDK
Выберите Project -> Build Project. Среда Eclipse соберет проект в библиотеке с помощью собственного сборщика.
Этот шаг аналогичен сборке с помощью сценария build_native.sh в Cygwin.
Убедитесь, что все библиотеки успешно собраны. Откройте папку lib в проекте Eclipse: внутри нее должна быть папка x86 с файлом.
При успешной сборке необходимо упаковать проект. Выберите package -> Run -> Run as -> Android для окончательной сборки проекта cocos2d-HTML5 JSBinding.
"Compile++ thumb : moonwarriors_shared <= main.cpp
"Compile++ thumb : moonwarriors_shared <= AppDelegate.cpp
......
5.B)Сборка с помощью Cygwin
Если при выполнении команды Package -> Run -> Run as -> Android возникнет ошибка с текстом «No rule to make target: CCConfiguration.cpp», это может быть вызвано отклонением разрешения на доступ к файлу или истечением времени ожидания при компиляции. В этом случае необходимо удалить ранее собранную библиотеку и заново ее собрать, повторно выполнив шаги 2.A и 5.A.
$ rm -Rf obj/*
$ rm -Rf libs/*
$ ./build_native.sh
6)Действия при возникновения ошибок
Если при выполнении команды Package -> Run -> Run as -> Android возникнет ошибка с текстом «Could not find *.apk», возможно, это вызвано неверными настройками проекта. В настройках следует указать приложение, а не библиотеку. Для этого выберите:
Project -> Reference -> Android -> Library -> Is Library. Снимите этот флажок, затем выберите:
Run -> Run as -> Android Application. Если снова возникнет ошибка с текстом «Zip add failed», это означает, что было отклонено разрешение на доступ к файлу. Необходимо сбросить разрешения на доступ к файлу.
Если приложение MoonWar работает с низкой скоростью после установки на телефоны с Android, необходимо оптимизировать его SpiderMonkey.
Unable to add 'D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android\assets\res\arial-14.GlyphProject': Zip add failed
Unable to add 'D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android\assets\res\arial-14.fnt': Zip add failed
org.cocos2dx.moonwarriors.MoonWarriors] ERROR: unable to process assets while packaging 'D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android\bin\resources.ap_'
org.cocos2dx.moonwarriors.MoonWarriors] ERROR: packaging of 'D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android\bin\resources.ap_' failed
$ cd "D:\Game\SDK\cocos2d-2.1beta3-x-2.1.1\samples\Javascript\MoonWarriors\proj.android"
$ ls -la assets
$ chmod -R 755 assets
Справочные материалы:
1. https://code.google.com/p/mkisofs-md5/downloads
2. Cocos2D-HTML5 MoonWarriors Android Dev (wwashington Wrote) -- Android compiling user guide
3. Cocos2D-HTML5 MoonWarriors iPhone6 Dev (wwashington Wrote) -- iOS compiling user guide
4. Cocos2D-HTML5 Game MoonWarriors Apk (wwashington Build) -- Android compiling user guide
5. Cocos2D-HTML5 Game MoonWarriors Src (wwashington Repack) – Source code
Original author:Wwashington AT newsmth、cocos2d-x、chinaunix、pcbeta on 2013/02/28
Adapt and interpret by: Dawei Cheng on 2013/03/25
Website:https://code.google.com/p/mkisofs-md5/downloads