プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

cocos2d-xのAndroidプロジェクトをビルドする方法について

これまでcocos2d-xの環境構築メモで調べた手順でAndroidをビルドして開発していたところ、Google Play servicesをインポートしてEclipseでビルドしようとするとエラーが頻発するようになり一切ビルドできなくなるという状況に..。環境全部作りなおしたり、プロジェクト何回も作りなおしてみたりと色々試して何とか再度ビルドできるようになったのでまとめておく。

cocos2d-xのアップデート

3.6が出ていたのでアップデート。~/tools/cocos2d-x/3.3 というパスにSDKを設置していたので、~/tools/cocos2d-x/3.6 に置いて、.bash_profileに記述されていた環境変数を直接書き換えれば完了。

# cocos2d-x
export COCOS_CONSOLE_ROOT=/Users/ntaku/tools/cocos2d-x/3.6/tools/cocos2d-console/bin
export PATH=$COCOS_CONSOLE_ROOT:$PATH
export COCOS_X_ROOT=/Users/ntaku/tools/cocos2d-x/3.6
export PATH=$COCOS_X_ROOT:$PATH
export COCOS_TEMPLATES_ROOT=/Users/ntaku/tools/cocos2d-x/3.6/templates
export PATH=$COCOS_TEMPLATES_ROOT:$PATH

Android NDKのアップデート

以前のバージョンではr9dでしか動作しなかったのが、最新版ではr10dも対応されていたのでこちらもアップデートしておく。

export NDK_ROOT=/Users/ntaku/tools/android/ndk/android-ndk-r10d

Eclipseの設定

確認しておくべきなのは下記の3項目。

Android > SDK Location
f:id:ntaku:20150503112057p:plain

Android > NDK > NDK Location
f:id:ntaku:20150503112110p:plain

C/C++ > Build > Environment > NDK_ROOT
f:id:ntaku:20150503112120p:plain

プロジェクトのインポート

新規プロジェクトを作成して、

$ cocos new HelloCocos -p com.appstair.HelloCocos -l cpp -d ~/project/cocos2d

Eclipseへ既存のAndroidプロジェクトとして下記の2プロジェクトをインポート
f:id:ntaku:20150503112129p:plain

Application.mkにAPP_ABIを追加しておく。
(この辺りはもう少し調査が必要だけれどとりあえず開発中はこれでOK)

APP_STL := gnustl_static
+ APP_ABI := armeabi x86
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char

プロジェクトのビルド

以前はこれでEclipse上からビルド & 実行すると起動していたのだけれど、libcocos2dcpp.soが無いよ、と言われてしまうのでこのままでは動作せず。ということでpythonのスクリプトを使って直接ビルド。

ntaku@ntaku: ~/project/cocos2d/HelloCocos/proj.android
$ ./build_native.py 

これで bin/HelloCocos-debug.apk が生成され、libcocos2dcpp.soも下記パスに生成されている。

$ find ./ -name 'libcocos2dcpp.so'
.//proj.android/libs/armeabi/libcocos2dcpp.so
.//proj.android/libs/x86/libcocos2dcpp.so
.//proj.android/obj/local/armeabi/libcocos2dcpp.so
.//proj.android/obj/local/x86/libcocos2dcpp.so

この後、再度Eclipseへ戻り、プロジェクトをCleanしてビルド & 実行すれば今度はこちらでも動いた。直接の原因となぜ以前はbuild_native.py実行しなくても通っていたのかが定かではないけれど、とりあえずこれで運用上は問題なさそうに思える。今後はEclipse最低限にして全部コマンドで処理したい。

ちなみに先程のbuild_native.pyはcocosコマンドでも実行でき、こちらだとビルド後にapkインストールして起動までしてくれるので便利。

$ cocos run -s ~/project/cocos2d/HelloCocos -p android

あとはエミュレーターで実行する場合だとTarget API Level 15以上で、Emulation OptionsのUse Host GPUにチェックが必要とのこと。