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
Android > NDK > NDK Location
C/C++ > Build > Environment > NDK_ROOT
プロジェクトのインポート
新規プロジェクトを作成して、
$ cocos new HelloCocos -p com.appstair.HelloCocos -l cpp -d ~/project/cocos2d
Eclipseへ既存のAndroidプロジェクトとして下記の2プロジェクトをインポート
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にチェックが必要とのこと。