2014/04/06

cocos2d-x andoroidエミュレータのエラー回避

RC0で一度動いたーと思って、その後RC1環境にしてみて、それがだめだったので、やっぱりとRC0環境に戻してといろいろやってたらRC0自体もandroidエミュレータで実行できなくなってしまったので、どうしたものかと思ってたのですが、なんとかなったので、メモ。

起きていたエラーは以下のものでした。

dvmFindClassByName rejecting ‘org/cocos2dx/lib/Cocos2dxHelper’

です。
何が起きてるのかと思ったのですが、ライブラリ側がうまく連結されて無くてそちらを参照できないために動作してなかったみたいです。
で、このフォーラムのやりとりを見て対応。ライブラリ側のjavaファイルをコピーしてアプリのプロジェクトに追加するという力技でした。

というわけで、
HAXMのエミュレータでも、実機でも動くようになりました。

本来ならlibcocos2dxのプロジェクトをインポートしているので、そっちが参照されてうまいこといくはずなんだろうなーと思いつつ、それがうまくいかない場合は直接コピーして対処するしかないのかなーという印象です。

cocos2d-x ver3.0 RC0, RC1の環境構築メモ

cocos2d-x ver3.0 RC0, RC1の環境構築をしてみたので、そのメモをしておきます。あとでもう1回やることになっても思い出せるように。ビルドターゲットはiOSとAndroidが動くようにという感じでやりました。
結論から言うと、RC1はAndroidエミュレータで落ちるのでまだ使わないほうが良いみたいですね。RC0は大丈夫です。

さて、
まず最初にcocos2d-xの公式サイトから最新のパッケージをダウンロードします。(最初RC0しか無かったので、それでやりましたけど、その後RC1が公開されましたので、再度ダウンロードしました)

次にAndroid用の環境の用意で、いろいろ見つかるブログを参考にセットアップを行いました。こことか。

NDKのセットアップ(下記のを使いました)
https://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2

AndroidSDKのセットアップ(下記のを使いました)
これはSDKとEclipseがセットになってます。
https://dl.google.com/android/adt/22.6.2/adt-bundle-mac-x86_64-20140321.zip

上記のを解凍した場所をcocos2d-xのセットアップの際に設定する必要があります。
cocos2d-xを解凍した場所で、./setup.pyを実行し、上記のSDK等のパスを設定します。
これで必要な環境変数が設定されます。(shellを立ち上げ直すと環境変数がセットされた状態でshellが起動します)

これで一旦完了。

cocosコマンドを使ってプロジェクトが作成できます。
こちらを参考に。作ってみます。

cocos new SampleProj -p com.xionchannel.sample -l cpp -d ~/Documents
みたいな感じにするとHello Worldのプロジェクトが作られます。
共通ソース部分と各環境別にフォルダ分けされて置かれてます。

proj.ios_macの中にはXcodeのプロジェクトがあります。
開いてビルドするとワーニングは多数出ますが問題なく動きます。

proj.androidにはAndroid向けの環境があります。
ビルドするにはbuild_native.pyを実行すればできます。
Eclipseで実行確認するには多少手順が必要で、こちらの設定の説明が有用でした。
とはいえ、結局RC1ではAndroidのエミュレータでの起動直後に落ちてしまってどうにもならない感じで、本家のフォーラムでも落ちるって話題になってました。今のところ対処方法無いっぽい。実機だと大丈夫なのかな?試してないのでわからないっす。
RC0では動きます。
さて、Androidのエミュレータは起動が遅くて、動作も遅くて確認が大変なので、x86の高速エミュレータ(HAXM)を使ったほうが確認が楽です。それを設定してみました。
このブログを参考にインストールします。
ただ、OSがMarvericksになっている場合は、この高速エミュレータがOSを巻き込んで落ちてしまうので、このブログの対応が必要になります。要するに修正バージョンを入れないとだめってことですね。
さらに、Android側のmakeファイルを修正して、x86向けのコンパイル模するようにしないといけません。これが参考になります。

APP_ABI := armeabi armeabi-v7a x86

みたいな感じです。
これで高速動作するエミュレータでらくらく確認できるって感じみたいです。

とりあえず以上です。RC1早く治ってほしいですね。
さて、RC0に戻さなくちゃな。