doridoridoriand’s diary

主に技術的なことを書いていく予定(たぶん)

Cocos2d-xをGenymotionで実行出来るようにする

Cocosで開発するときは、わざわざNexus7をUSBでつないで実機で動くか試していたのですが、いちいち持ち歩いているの嫌だなってこととUSBケーブルの調子が悪くてlogcatがブツブツ切れていたりして、地味にストレスだったので、エミュレーターで動くように変更しました(USBケーブル買い直せってツッコミは無しの方向で)

※既にGenymotionは入っている前提で行います

まずCocos2d-x本体側のコードの変更を行います。Cocosをインストールしたディレクトリに移動して、次の場所のファイルを編集してください

cocos2dx/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java

このファイルにあるisAndroidEmulator()を探してください。次のような関数になっているかと思われます

private final static boolean isAndroidEmulator() {
  String model = Build.MODEL;
  Log.d(TAG, "model=" + model);
  String product = Build.PRODUCT;
  Log.d(TAG, "product=" + product);
  boolean isEmulator = false;
  if (product != null) {
    isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_");
  }
  Log.d(TAG, "isEmulator=" + isEmulator);
  return isEmulator;
}

ここのor条件分岐が連なっているところでエミュレーターの種別を判断しているようです。Genymotionは裏でVirtualboxを動かしているので、エミュレーターの種類に含めてやる必要があります。よって分岐を以下のように書き換えます

isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_") || product.contains("vbox");

これで保存してCocos本体側の変更は終了です。次にプロジェクトファイルの変更を行います。 以下のファイルを変更します
対象のプロジェクトフォルダ/proj.android/jni/Application.mk

このファイルの一行目にAPP_STL := gnustl_staticという記述があるので、この下にAPP_ABI := armeabi x86を追記してあげましょう。これで以下のように変更されたと思われます

APP_STL := gnustl_static
APP_ABI := armeabi x86

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic

これをし終わったら、再度コマンドラインから、プロジェクトフォルダで cocos run -p android を実行してみてください。無事にGenymotionで動くようになります

参考にしたサイト

フニゲの開発日記