きょこみのーと

技術に関係ないほうのブログ

cocos2d-x3.0alpha0のprojectを3.0alpha1に移行してみる

はじめに

最近、cocos2d-xのアプリ増えてきましたねー。cocos2d-xのバージョンアップも早い早い。

ということで今回は、以前cocos2d-x3.0alpha0で作り始めたアプリをcocos2d-x3.0alpha1に移行してみます。

cocos2dxのパスが変わった対応

Android.mkのimportとかを修正

基本的に新しいバージョンでcreate_project.pyして作ったものと旧バージョンを比較して修正する感じ。

めんどくさい時はClassesだけ移植して再構築する。(2.2.0 -> 3.0alpha0preに移行するときはそうした)

cocos2dx/project/MyProject/jni/Android.mk

$ git diff proj.android/jni/Android.mk
diff --git a/proj.android/jni/Android.mk b/proj.android/jni/Android.mk
index 29212f3..5c12195 100644
--- a/proj.android/jni/Android.mk
+++ b/proj.android/jni/Android.mk
@@ -15,17 +15,20 @@ LOCAL_SRC_FILES := hellocpp/main.cpp \

 LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

-LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static
+LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static
 LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static
 LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static
-LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static
-LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dxandroid_static
+

 include $(BUILD_SHARED_LIBRARY)

-$(call import-module,cocos2dx)
-$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)
-$(call import-module,CocosDenshion/android)
-$(call import-module,extensions)
-$(call import-module,external/Box2D)
-$(call import-module,cocos2dx/platform/android)
+$(call import-module,2d)
+$(call import-module,audio/android)
+$(call import-module,Box2D)

なんかこのmakefileだいぶすっきりしたね。

build_native.shは完全に別人

cocos2dx/project/MyProject/proj.android/build_native.sh

まったくいじってないけど、3.0alpha0と3.0alpha1で全く別物で、差分とるのめんどいので最新のやつで上書きかなーと思ったら・・・

「build_native.py」になってる!? ( ゚д゚)ポカーン。

Pythonに变化するとか、スピリチュアルすぎるやん( ^ω^)

ぶっちゃけPython初心者だけど、まあ何やってるかなんとなくわかった(気がする)

相変わらず「../../../」な相対パスでcocos2dxのplatformをお探ししてbuildしてresourceファイルをassetsにコピーしたりセコセコやってるかな。

と思って実行した後に以下にcocos2dx側からプロジェクトをbuildするやつが追加されてたことに気がついた。 そういえば、cocos2d-x公式のNewsでちょろっと見たことある気がする。

172行目くらいの def build_samplesメソッドのelifに対象のプロジェクトを追加

cocos2d-x/build/android-build.py

elif target == 'MyProject':
app_android_root = os.path.join(cocos_root, 'projects/MyProject/proj.android')

実行してみる。以下コマンドと実行ログ。

$ ./android-build.py MyProject
The Selected NDK toolchain version was 4.8 !
Android NDK: WARNING: APP_PLATFORM android-18 is larger than android:minSdkVersion 10 in ./AndroidManifest.xml
Android NDK: WARNING:/Applications/cocos2d-x/build/../cocos/2d/Android.mk:cocos2dx_static: LOCAL_LDLIBS is always ignored for static libraries
Android NDK: WARNING:/Applications/cocos2d-x/build/../cocos/2d/platform/android/Android.mk:cocos2dxandroid_static: LOCAL_LDLIBS is always ignored for static libraries
make: Entering directory `/Applications/cocos2d-x/projects/MyProject/proj.android'
Install        : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
make: Leaving directory `/Applications/cocos2d-x/projects/MyProject/proj.android'

わーいわーい、これでcocos2xのビルドnativeビルドが完了。

ちゃんと「libcocos2dcpp.so」が作成されてるよ素敵!! つ、ついに相対パスの呪縛が!!感動やで。。。

apkを作成して実機にinstallする

android updateするよー local.propertiesとかいるからね

$ cd /Applications/cocos2dx/project/MyProject/proj.android/
$ android update project -p ./ MyProject

antでデバッグインストール実行!!

eclipseさんを起動しないでapkのインストールまで完了( ー`дー´)キリッ。

$ ant debug install

まとめ

  • cocos2dx/cocos2dx/のパスがcocos/2d/になってた(3dも近くにいる気がするドキドキ)
  • build_native.shがPythonに進化した。テテーン
  • projectより上位の階層から複数プロジェクトまとめてbuildする環境が用意された(cocos2dx/build/android-build.py)

今度は、最近個人的にブームなgradleでビルドしてみよう。