読者です 読者をやめる 読者になる 読者になる

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スマートフォン2Dゲーム開発講座 Cocos2d-x 3対応 (Smart Game Developer)

新品価格
¥3,455から
(2017/4/24 17:49時点)