きょこみのーと

元六本木でGo書いてました。今はVRでGo書いてます。

Cocos2d-x3.0rcで新規プロジェクト作成してandroid実機で動かす

はじめに

いつもどおり開発中のアプリのプロジェクトでcheckoutしてビルドしたらちょっとiOSのソースがエラーになったので、一旦新規プロジェクトつくって変更点を確認してみることにしました。

f:id:kyokomi:20140308214020p:plain

変更履歴は一応見たのですが、さすがに全コミットログまで見てる時間ないので、実際にプロジェクト作って動かしてみたほうが早いかと思います。

セットアップ

git pull してcheckout

省略します。わからない方は前回のエントリーをご参考にしてください。

Cocos2d-x3.0betaきたのでさっそく対応しました

setup.pyを叩く

cocos2d-xビルドに必要な環境変数のセットアップ用の.pyみたいです。

優しいですね。

事前に設定済みの環境変数は削除しておきました。

しかし、こんなのでハマるのきっと俺くらいwwww

$ python setup.py

Setting up cocos2d-x...

-> Adding COCOS2D_CONSOLE_ROOT environment variable... OK
  -> Added: COCOS_CONSOLE_ROOT = /Applications/cocos2d-x/tools/cocos2d-console/bin

-> Looking for NDK_ROOT envrironment variable... NOT FOUND
     Please enter its path (or press Enter to skip): /Applications/android_ndk
ADDED
  -- Added: NDK_ROOT = /Applications/android_ndk

-> Looking for ANDROID_SDK_ROOT envrironment variable... NOT FOUND
     Please enter its path (or press Enter to skip): /Applications/android-sdk-macosx
Error: /Applications/android-sdk-macosx is not a valid path of ANDROID_SDK_ROOT. Ignoring it.

Set up successfull:
     COCOS_CONSOLE_ROOT was added into /Users/kyokomi/.bash_profile
     NDK_ROOT was added into /Users/kyokomi/.bash_profile

ANDROID_SDK_ROOTがcocos2d-xが求めてるものじゃなかったらしい。

仕方ないのでpython初心者の私がsetup.pyを覗く。

android_path = os.path.join(android_sdk_root, 'sdk/tools/android')
if os.path.isfile(android_path):
    return True
else:
    return False

( ゚д゚)ポカーン...

自分の環境だとsdkってディレクトリがない。

/Applications/android-sdk-macosx/tools/android

なんだよなー。。。

ということで、いつものシンボリックリンク作戦でいきます。

$ cd /Applications/android-sdk-macosx
$ ln -s ./ sdk

ワンモアっせ!

$ ./setup.py

Setting up cocos2d-x...

-> Adding COCOS2D_CONSOLE_ROOT environment variable... ALREADY ADDED

-> Looking for NDK_ROOT envrironment variable... FOUND

-> Looking for ANDROID_SDK_ROOT envrironment variable... NOT FOUND
     Please enter its path (or press Enter to skip): /Applications/android-sdk-macosx
ADDED
  -> Added: ANDROID_SDK_ROOT = /Applications/android-sdk-macosx

Set up successfull:
     ANDROID_SDK_ROOT was added into /Users/kyokomi/.bash_profile

ばっちりできたー!

プロジェクト作成

cocosコマンドでプロジェクト作成

README.mdいわく、以下みたいな感じでプロジェクト作成らしい。

せっかくbetaからだっけ?GUI作ったのにもう廃止なんですね。(人気なかったのかな。。。)

$ cocos new Cocos2dx3.0rcSample -p com.kyokomi.cocos2dx.rcsample -l cpp -d /Users/kyokomi
-bash: cocos: command not found

( ゚д゚)ポカーン...( ゚д゚)ハッ!

さっき追加した環境パスとりこんでないですね。

コンソール閉じてもっかい開くか以下コマンドで環境パス読み込む。

$ source ~/.bash_profile

気を取り直してもう一度。

$ cocos new Cocos2dx3.0rcSample -p com.kyokomi.cocos2dx.rcsample -l cpp -d /Users/kyokomi
> Copy template into /Users/kyokomi/Cocos2dx3.0rcSample
> Copying cocos2d-x files...
> Rename project name from 'HelloCpp' to 'Cocos2dx3.0rcSample'
> Replace the project name from 'HelloCpp' to 'Cocos2dx3.0rcSample'
> Replace the project package name from 'org.cocos2dx.hellocpp' to 'com.kyokomi.cocos2dx.rcsample'

かるく構造みてみる

$ cd /Users/kyokomi/Cocos2dx3.0rcSample

$ tree -L 1
.
├── CMakeLists.txt
├── Classes
├── Resources
├── cocos2d
├── proj.android
├── proj.ios_mac
├── proj.linux
└── proj.win32

7 directories, 1 file

またcocos2dがいるぞ。結局コピーするんかい!!

っと思ったけど、よく見るとtool関係がない。

kyokomi@kyokomi-no-MacBook-Air:~/Cocos2dx3.0rcSample/cocos2d
$ tree -L 1
.
├── AUTHORS
├── CHANGELOG
├── CMakeLists.txt
├── README.md
├── build
├── cocos
├── docs
├── extensions
├── external
├── licenses
└── plugin

7 directories, 4 files

ちなみにこっちは、git checkout したやつ。

kyokomi@kyokomi-no-MacBook-Air:/Applications/cocos2d-x ((cocos2d-x-3.0rc))
$ tree -L 1
.
├── AUTHORS
├── CHANGELOG
├── CMakeLists.txt
├── README.md
├── build
├── cocos
├── docs
├── extensions
├── external
├── licenses
├── plugin
├── projects
├── samples
├── setup.py
├── templates
├── tests
└── tools

12 directories, 5 files

きっと/Application下とかにベースとなるcocos2d-xがいて、そこから各プロジェクトに必要なコードだけcocos2dディレクトにコピーする方針ですね。

ってことは、これからはcocos2dもコミット管理しますかね。

あれ、まさかbeta2の時も実はそうだった?

(まあいっか( ^ω^;))

ビルドして動作確認

androidのほうビルドします

いっぱつ叩いて引数エラーだしてヘルプみる作戦。。。逆に失敗!!!

kyokomi@kyokomi-no-MacBook-Air:~/Cocos2dx3.0rcSample/proj.android
$ ./build_native.py
The Selected NDK toolchain version was 4.8 !

... 省略 ...

[armeabi] Install        : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
make: Leaving directory `/Users/kyokomi/Cocos2dx3.0rcSample/proj.android'

なるほど、ndkだけビルドして終わった。ちゃんとビルドも成功

一応helpみると大体beta2の時と同じだった。

$ ./build_native.py --help
Usage: build_native.py [options]

Options:
  -h, --help            show this help message and exit
  -n NDK_BUILD_PARAM, --ndk=NDK_BUILD_PARAM
                        parameter for ndk-build
  -p ANDROID_PLATFORM, --platform=ANDROID_PLATFORM
                        parameter for android-update.Without the parameter,the
                        script just build dynamic library for project. Valid
                        android-platform are:[10|11|12|13|14|15|16|17|18|19]
  -b BUILD_MODE, --build=BUILD_MODE
                        the build mode for java project,debug[default] or
                        release.Get more information,please refer to
http://developer.android.com/tools/building/building-
                        cmdline.html

apkつくる

$ ./build_native.py -p 19 -b debug
The Selected NDK toolchain version was 4.8 !

... 省略 ...

debug:

BUILD SUCCESSFUL
Total time: 9 seconds

adb installで実機にインストール

$ adb install bin/Cocos2dx3.0rcSample-debug.apk
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
4425 KB/s (1734574 bytes in 0.382s)
     pkg: /data/local/tmp/Cocos2dx3.0rcSample-debug.apk
Success

ばっちり動いてます。

なんかLabelがシュッとしててカッコイイですね。

あと、FPSが詳細な感じになってる。

f:id:kyokomi:20140308214023p:plain

adb logcatみたら、まだ例のエラーが。。。これ自分の端末のが悪いのかな?バグなのか???

※Galaxy Nexusです。

E/cocos2d-x assert(22353): /Users/kyokomi/Cocos2dx3.0rcSample/proj.android/../cocos2d/cocos/2d/renderer/CCQuadCommand.cpp function:generateMaterialID line:64
D/cocos2d-x debug info(22353): Assert failed: ShaderID is greater than 2^10
E/cocos2d-x assert(22353): /Users/kyokomi/Cocos2dx3.0rcSample/proj.android/../cocos2d/cocos/2d/renderer/CCQuadCommand.cpp function:generateMaterialID line:64
D/cocos2d-x debug info(22353): Assert failed: ShaderID is greater than 2^10
E/cocos2d-x assert(22353): /Users/kyokomi/Cocos2dx3.0rcSample/proj.android/../cocos2d/cocos/2d/renderer/CCQuadCommand.cpp function:generateMaterialID line:64