Компиляция Cocos2D-HTML5 JSBinding для устройств Android с архитектурой X86

Это техническое руководство по сборке 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
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
MoonWar_02.jpg 

4Настройка среды сборки


Щелкните проект правой кнопкой мыши, выберите Project -> Reference -> Builder -> New -> Program и введите следующие данные. Убедитесь, что рабочая папка правильно указана. Если компилятор Cygwin уже установлен, а шаг 2.B был успешно выполнен, можно пропустить шаг 4 и перейти к шагу 5.


prcture MoonWar_03.jpg
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
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 authorWwashington AT newsmthcocos2d-xchinaunixpcbeta on 2013/02/28

Adapt and interpret by: Dawei Cheng on 2013/03/25

Websitehttps://code.google.com/p/mkisofs-md5/downloads

Pour de plus amples informations sur les optimisations de compilation, consultez notre Avertissement concernant les optimisations.