cocos2d-jsをGenyMotionで実行する
標準のエミュレータだと激重なので、軽量なAndroidエミュレータ(GenyMotion)を導入。確かに軽くていいんだけど、cocos2d-xのサンプルすらエラーで動かない。。。
そろそろ本腰入れて調べます。
環境
- cocos2d-x(v3.15)
エラーメッセージと対応
INSTALL_FAILED_NO_MATCHING_ABIS
コンパイルされたアプリのアーキテクチャが間違っているようです。
cocos2d-xの標準設定や実機は「armeabi」、GenyMotionは「x86」なので、開発中は「x86」でコンパイルすることにします。
# gradle.properties - PROP_APP_ABI=armeabi + PROP_APP_ABI=armeabi:x86
# Application.mk - APP_ABI := armeabi + APP_ABI := x86
java.lang.IllegalArgumentException: No config chosen
調べてみると、OpenGLのエラーのようです。
「GenyMotionではOpenGLが動作しない」との情報があったので、以下のようにエミュレータの判定を修正します。
# org.cocos2dx.lib.Cocos2dxActivity 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_"); + isEmulator = product.equals("sdk") || product.contains("_sdk") || product.contains("sdk_") || product.contains("vbox"); } Log.d(TAG, "isEmulator=" + isEmulator); return isEmulator; }
キモはこんな感じ。この辺の理解がなくて、何をすればいいのか全く分からなかった。。。
- GenyMotionのCPUは'x86'
- cocos2d-jsのプロジェクトは'libcocos2dx'と自分で作成するプロジェクトの2つがある(libcocos2dxはcocos2d-xの本体?)
- libcocos2dxも自分のプロジェクトも「x86」でコンパイルする
参考URL
- 【cocos2d-x】GenyMotionで実行しようとするとINSTALL_FAILED_CPU_ABI_INCOMPATIBLEというエラーが出る【GenyMotion】 « zoomAroid
- Cocos2d-x with Genymotion? - C++ - Cocos2d-x Forums
Cocos2d-xスマートフォン2Dゲーム開発講座 Cocos2d-x 3対応 (Smart Game Developer) 新品価格 |