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で動くようになります