19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AndroidStudio 1.3時代のCocos2d-xセットアップ (cpp, js)

Last updated at Posted at 2015-09-24

趣味でゲームアプリ開発をやろうしてcocos2d-xに手を出す。不安定覚悟で最新っぽい環境を構築してみたのでメモ。

(9/29追記:cocos2d-jsとして使う場合もほぼおなじで大丈夫なのが確認できたので追記しました)

主なポイント

  • ADT(Eclipse)ではなくAndroidStudio
  • エミュレータにはGenymotion
  • Androidビルド時に INSTALL_FAILED_NO_MATCHING_ABIS が出る対策
  • Xcode7 (特に何もせずそのままいけた)
  • できるだけhomebrew
  • Antのインストールはもはや不要。gradle!
  • cocos2d-htmlはcocos2d-jsとして同じパッケージに統合され、C++での開発もJavaScriptでの開発もこのセットアップでOK
  • 実機での動作は未確認

TL; DR

Cocos2dx開発環境構築 〜 シミュレータでアプリ起動 手順まとめ。

Setup

brew update
brew install android-sdk
brew install android-ndk
brew cask install java
brew cask install android-studio
  Android SDK Managerで
  - Tools/Android SDK Build-tools 22.0.1
  - Android 5.1.1(API 22)/SDK Platform 22
  をインストール
brew cask install virtualbox
brew cask install genymotion
  Nexus6のイメージを取得、起動しておく

公式からダウンロードして解答したcocos2d-x-3.8.1
mv ~/Downloads/cocos2d-x-3.8.1 /usr/local/opt/cocos2d-x
cd /usr/local/opt/cocos2d-x
./setup.py
  ----------
  Please enter the path of ANT_ROOT (or press Enter to skip):  ==>[Enter]
  ----------
mv cocos2d-x cocos2d-x-3.8.1
ln -s cocos2d-x-3.8.1 cocos2d-x

Create Project (C++で書く人)

cocos new MyGame -l cpp

Create Project (JavaScriptで書く人)

cocos new MyGame -l js

JavaScript開発(-l js)の場合、一箇所修正が必要な模様

java(frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/AppActivity.java)
public class AppActivity extends Cocos2dxActivity {

    @Override
    public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
        // TestCpp should create stencil buffer
//
// 修正
//        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
        glSurfaceView.setEGLConfigChooser(8, 8, 8, 0, 16, 8);
        return glSurfaceView;
    }
}

Run for Android

cd MyGame
cocos run -p android --android-studio --app-abi x86

Run for iOS

cd MyGame
cocos run -p ios

Run for iOS (-l js で作ったプロジェクトのみ可)

cd MyGame
cocos run -p ios

Android Studio対応状況

[FINAL!] All in one Cocos2d-x&JS v3.7 is released - cocos2d-x - Cocos2d-x Forum

Get your hands on Android Studio 1.3 | Android Developers Blog

Cocos2dx側でAndroid Studio用のプロジェクトファイルは生成してくれるようになっているし、
Android StudioもC++周りの機能が。(Previewバージョンだけど)

とはいえCocos界隈でAndroid Studioへの移行が進んでいるのかは謎。

でも人柱覚悟でAndroidStudioでいってみる。

Prerequisite

確認した環境は

  • Mac OSX Yosemite
  • Cocos2d-x 3.8.1
  • Xcode7
  • Android Studio 1.3
  • JDK 1.8
  • Android SDK 24.3.4
  • Android NDK r10e

あらかじめ入ってる前提にしたもの

  • Homebrew
  • Homebew Cask
  • Xcode

cocos2d-x の配置場所

再掲

公式からダウンロードして解答したcocos2d-x-3.8.1
mv ~/Downloads/cocos2d-x-3.8.1 /usr/local/opt/cocos2d-x
cd /usr/local/opt/cocos2d-x
./setup.py
  ----------
  Please enter the path of ANT_ROOT (or press Enter to skip):  ==>[Enter]
  ----------
mv cocos2d-x cocos2d-x-3.8.1
ln -s cocos2d-x-3.8.1 cocos2d-x

よくホーム直下にcocosを配置、って書いてあるけど、もうちょっとそれっぽいところに配置してみたつもり。

まず /usr/local/opt/cocos2d-x に配置した状態で setup.py を実行して、

export COCOS_CONSOLE_ROOT=/usr/local/opt/cocos2d-x/tools/cocos2d-console/bin
...

になるように .bashrc/.zshrc に設定を書き出させ、
その後、実ファイルを cocos2d-x-3.8.1 に移動して、cocos2d-x にシンボリックリンクを張っておく。

これで、もしcocosのバージョンが上がったら /usr/local/opt/cocos2d-x-X.X.X に配置して、シンボリックリンクの向き先を変えば幸せになれる計画。

cocos2d-xがhomebrew fomulaになったらこうなりそう・・というイメージで配置してみた。
誰かfomula作ってくれないかな・・・。

Troubleshooting

ANT_ROOT not defined. Please define it in your environment.

AndroidStudioではなく ADT用のプロジェクトでビルドしようとしている

--android-studio オプションを指定してAndroidStudio用プロジェクトをビルド

Can't connect to activity manager; is the system running?

Error type 2
android.util.AndroidException: Can't connect to activity manager; is the system running?
	at com.android.commands.am.Am.onRun(Am.java:299)
	at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
	at com.android.commands.am.Am.main(Am.java:97)
	at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
	at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:249)

デバイスを起動させるのを忘れて cocos run してしまい、後からデバイスを起動するとこうなる模様

デバイスを起動させた状態でもうちど cocos run -p android --android-studio --app-abi x86 でOKなはず

Failure [INSTALL_FAILED_NO_MATCHING_ABIS]

ネイティブコードのビルドターゲットがおかしい。

デフォルトでビルドするとターゲットアーキテクチャはARMになるらしい。でもGenymotionエミュレータのアーキテクチャはx86なので動かないよ状態。

--app-abi x86 オプションの指定を忘れるとこうなる。

java.lang.IllegalArgumentException: No config chosen

JavaScriptでの開発時、生成されたプロジェクトそのままで起動しようとすると、アプリ起動直後、下記のエラーでクラッシュする
(cocosコンソールからでもAndroidStudioからでも)

09-29 09:19:24.288    2428-2448/org.cocos2dx.MyGame E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 199
    Process: org.cocos2dx.MyGame, PID: 2428
    java.lang.IllegalArgumentException: No config chosen
            at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:869)
            at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1023)
            at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1400)
            at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239)

対応方法(再掲)

java(frameworks/runtime-src/proj.android-studio/app/src/org/cocos2dx/javascript/AppActivity.java)
public class AppActivity extends Cocos2dxActivity {

    @Override
    public Cocos2dxGLSurfaceView onCreateView() {
        Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
        // TestCpp should create stencil buffer
//
// 修正
//        glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
        glSurfaceView.setEGLConfigChooser(8, 8, 8, 0, 16, 8);
        return glSurfaceView;
    }
}

デバッガで追うとR:5bit, G:6bit, B:5bit なEGLConfigが存在しないのでエラー・・・という感じになっているようなんですが、AndroidのOpenGL周りはまだよくわからず。
なんでCocos2d-JSが5, 6, 5 で生成するのか・・・

19
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?