どうも、俺@残業するフリしてブログ書き中です。
決して仕事をサボってるわけではありません。
今日は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側の準備をしましょう。
$ 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 ¥ # ←必要だったこれとか
〜(略)〜
のように書いていく必要があります。
ちなみに未確認ですが、
のようにして簡略化させることもできるそうです。
以上でぇぇぇぇぇえええす。