2013年6月6日木曜日

cocos2d-xでiOSとAndroidのクロスプラットフォーム環境構築

どうも、俺@残業するフリしてブログ書き中です。


決して仕事をサボってるわけではありません。
今日はcocos2d-xを使ってiOSとAndroidの両方でアプリを動かす最初の環境構築をめもめも。
開発環境はMacOS X 10.8.3です。
Xcodeのインストールとeclipseのインストール、Androidアプリ開発環境は整備済みとします。


ちなみに、Cocos2d xをさらにさわってみよう!のスライドとがおまるさんのcocos2d-x環境構築〜Androidテンプレート起動までその1がとても参考になりますよ!

長いので手順を記しておきます。
1)cocos2d-xをDLしテンプレートインストール
2)Android側の準備
3)Xcode側でHelloWorld作成&起動
4)Android側でプロジェクト作成し、フォルダをXcode側へコピーしbuild_native.shの実行
5)eclipseへ取り込み、Android端末で起動
6)拍手
となります。


まず、お決まりのcocos2d-x本体をDLしましょう。
2013.06.06時点での安定版最新はv2.0.4でした。

解凍して適当なディレクトリへ置きましょう。
$ unzip cocos2d-2.0-x-2.0.4.zip

$ mkdir ~/Documents/cocos2dx

$ mv cocos2d-2.0-x-2.0.4 ~/Documents/cocos2dx/v2.0.4
# 以下は好みに合わせてね
$ ln -s ~/Documents/cocos2dx/v2.0.4 ~/Documents/cocos2dx/current
次にcocos2d-xのテンプレートをインストールしちゃいます。
$ sudo ~/Documents/cocos2dx/current/install-templates-xcode.sh
これでとりあえずXcodeでcocos2d-xのテンプレートを選択できるようになり、そのプロジェクトが作れます。
もちろんHelloWorldアプリも起動しますよ。
とりあえず拍手しましょう。

では、Android側の準備をしましょう。

AndroidNDKをDLして好きなディレクトリへ置きます。※すでにしてる人は要らない。
$ ls -l /Devloper

drwxr-xr-x@ 19 koexuka  staff   646 5 10 14:57 android-ndk-r8d
次にcreate-android-project.shを編集します。
このファイルはAndroidでcocos2d-xプロジェクトを新規作成するときに実行するファイルです。
$ vim ~/Documents/cocos2dx/current/create-android-project.sh
------------------------------------------------------
  7 # set environment paramters
  8 NDK_ROOT_LOCAL="/Developer/android-ndk-r8d"
  9 ANDROID_SDK_ROOT_LOCAL="/Developer/android-sdk-macosx" # Android-SDKの配置されているPATHに
次にtemplate/android以下にあるbuild_native.shを編集します。
$ vim ~/Documents/cocos2dx/current/template/android/build_native.sh
------------------------------------------------------
  1 APPNAME="__projectname__"
  2
  3 # 以下を追加
  4 NDK_ROOT=__ndkroot__
  5 COCOS2DX_ROOT=__cocos2dxroot__
  6 GAME_ROOT=$COCOS2DX_ROOT/__projectname__
  7 GAME_ANDROID_ROOT=$GAME_ROOT/proj.android
  8 RESOURCE_ROOT=$GAME_ROOT/Resources
  9

〜(中略)〜

 46 DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 47 # ... use paths relative to current directory
 48 # 二重定義になっちゃうので以下をコメントアウト(COCOS2DX_ROOT)
 49 #COCOS2DX_ROOT="$DIR/../.."
 50 APP_ROOT="$DIR/.."
これを記述しておくと、Android用プロジェクトを作成するたびにbuild_native.shを編集する手間が減ります。

これでAndroid側の準備も完了。
ではHelloWorldアプリを作りましょう。

まずXcodeで、TestCocos2dxプロジェクトを作成しましょう。

プロジェクト名は「TestCocos2dx」にします。

で最後にCreateしちゃいましょう。

できたぜ、Hello World!


次はAndroidで動くようにします。

さっき編集したcreate-android-project.shを実行します。
$ ~/Documents/cocos2dx/current/create-android-project.sh

# 1)パッケージ名入力。
jp.blogspot.koexuka.app.test

# 2)AndroidターゲットIDの入力。なぜか僕はいつもid:2(android v2.2以上)を選択します。
2

# 3)最後にプロジェクト名。iOS側と合わせておいたほうが分かりやすいかも。
TestCocos2dx
そうすると配置したcocos2dxディレクトリ以下にプロジェクトディレクトリができます。
$ ls -l ~/Documents/cocos2dx/current
drwxr-xr-x   5 koexuka  staff    170  6  6 17:22 TestCocos2dx
できたプロジェクトディレクトリの中にproj.androidというディレクトリがあります。
$  ls -l ~/Documents/cocos2dx/current/TestCocos2dx

drwxr-xr-x   6 koexuka  staff  204  6  6 20:22 Classes
drwxr-xr-x   5 koexuka  staff  170  6  6 20:22 Resources
drwxr-xr-x  17 koexuka  staff  578  6  6 20:22 proj.android
これをXcodeのプロジェクトディレクトリ側へ持っていきます。

ここが分かりにくいですが、Finderを二つ並べてドラッグ&ドロップします。
別に問題ないとは思いますが、Xcode側のプロジェクトが無駄に大きくなってしまうので
proj.androidフォルダをXcode上へドロップしないようにしましょう。


もう1つ面倒な作業をします。
cocos2d-xのAndroid用javaプログラムファイルを、先ほどのXcode側のフォルダへ移します。
$ cp -R ~/Documents/cocos2dx/current/cocos2dx/platform/android/java/src/org/cocos2dx/lib ~/Documents/XcodeProject/TestCocos2dx/proj.android/src/org/cocos2dx
図解すると以下の様な感じ。


ここまで来れば90%出来たも同然!
ではAndroid用にビルドさせます。
$ cd ~/Documents/XcodeProject/TestCocos2dx/proj.android
$ ./build_native.sh
最初は時間がかかるので、しばらくジーッと画面を見つめておきます。

うまくいくと最後に
Compile++ thumb  : box2d_static <= b2World.cpp
Compile++ thumb  : box2d_static <= b2WorldCallbacks.cpp
Compile++ thumb  : box2d_static <= b2Rope.cpp
StaticLibrary  : libbox2d.a
SharedLibrary  : libgame.so
Install        : libgame.so => libs/armeabi/libgame.so
make: Leaving directory `/Users/koexuka/Documents/XcodeProject/TestCocos2dx/TestCocos2dx/proj.android'
のような表示になります。

もしここでコケる場合、build_native.shの内容を見なおす必要があります。
PATHの指定とか間違えてるかも!?

では出来たファイルをeclipseへ取り込むぜ。
eclipseを起動し、「File」→「New」→「Project...」と進み、

「Android」内にある「Android project from Existing Code」を選択しNext!

「Root Directory」は先ほどのXcodeプロジェクト内のproj.androidを選択します。

オッケー!!これでeclipseにプロジェクトが組み込まれたはず!


ではAndroid端末をPCへ接続しドキドキしながらRunボタンを押下仕様じゃないか!
ほら動いた!
あ、ちなみにcocos2d-xはAndroidエミュレータで起動できませんのであしからず。。。


開発手順ですが、基本的にはXcodeで開発します。
Android端末での動作を確認したい場合は、
1)build_native.shを実行
2)eclipse画面へ
3)eclipseのRunボタン押下
だけでOKです。
Resourceフォルダ以下へ画像や音声ファイルを追加しても、勝手にbuild_native.shが取り込んでlibgame.soを生成してくれるので
その辺は気にしなくてOKですよ!

あー、長かった!


※2013.06.20 Android.mkについて追記
とても大事な事を書き忘れていました(汗
上記のようにiOS/Androidでのクロスプラットフォーム向け開発環境を構築して開発開始してからですが、
上述したとおり基本的にはXcodeで開発をします。

Androidへの転送手順も上述のとおりなのですが、その際に「Android.mkの編集」という作業が必要になります。
このファイルは、新しくクラスファイルを追加した場合など、都度編集しなければいけません。
vim proj.android/jni/Android.mk
---------------------------------------
LOCAL_SRC_FILES := hellocpp/main.cpp ¥
  ../../Classes/AppDelegate.cpp ¥
  ../../Classes/HelloWorldScene.cpp ¥
  ../../Classes/MyClass.cpp ¥         # ←のように自作ファイル(.cppのみ)を追記
  ../../Classes/Utils/MyUtil.cpp ¥    # ←どんどん追記していく
〜(略)〜

もしBox2Dを使っている場合などは、
vim proj.android/jni/Android.mk
--------------------------------------
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes ¥
  $(LOCAL_PATH)/../../libs/cocos2dx/Box2D ¥    # ←とか
  $(LOCAL_PATH)/../../libx/cocos2dx/cocoa ¥    # ←必要だったこれとか
〜(略)〜
のように書いていく必要があります。

ちなみに未確認ですが、

Cocos2d-xで新しく作ったクラスを毎回Android.mkに追加せずに済ます

のようにして簡略化させることもできるそうです。

以上でぇぇぇぇぇえええす。


0 件のコメント: