2012年5月17日木曜日

Androidでcocos2d-xをやり始めた


さて、巷では「cocos2d!cocos2d!」と騒がれています。
しかし、この話は専らiPhoneアプリのお話です。
私もAndroidでcocos2d使いたい!
けど、cocos2d for Androidは死んでいるみたいな噂話もあるからどうしよう…。
そんな私に朗報です。
Androidでも使えるcocos2dがあります。
その名もcocos2d-x
cocos2d-xはクロスプラットフォームで行えるのでとっても便利です。
そして、こまめにアップデートやメンテナンスもされていて素敵です。
これを使うしかないな!ということで使いたいとなって環境構築のお話です。
書いていく言語はC/C++なのがネックですが、頑張ります。

ちなみに参考にしたのはこちらです。
Facebook内のcocos2d Developers Japanというグループで紹介されていた記事
そして我らが@yoichinejiさんがブログに書かれていた記事
この二つを読み解いて、少しずつ環境構築を行っていきましょう。

注意!
私は開発に関わるものは基本的に/Applications内に入れるようにしています。
そのため、サンプルで上げているパスが/Applications始まりになっていますが、パスは各自の環境に合わせて修正をしてください!

1.cocos2d-xをインストールする

まず、Androidでcocos2d-xを使うとなると、AndroidのSDK環境だけではなくNDKの環境が必要となります。
C/C++で書いていきますからね。
AndroidのNDK環境の環境構築に関しては、先達の素晴らしい方々がブログに記事を残していますので、そちらを参考にしてください。
cocos2d-xの箇所から書いていきたいと思います。

まず、cocos2d-xのダウンロードページから、zipファイルを落としてきます。
私は現時点で、最新の安定板としてcocos2d-1.0.1-x-0.12.0.zipを落としてきました。
落としてきたzipファイルを任意の箇所に展開します。
そして、コマンドでcocos2d-xのフォルダに移動します。
$ cd /Applications/cocos2d-1.0.1-x-0.12.0 
この中にcreate-android-project.shというファイルがあります。
このファイルを編集しなければならないのですが、このように編集します。

CotEditor好きなんです
ここで重要になるのは、
  • NDK_ROOT_LOCAL="/Applications/android-ndk-r8"
  • ANDROID_SDK_ROOT_LOCAL="/Applications/android-sdk-macosx"
というものです。
これは各自の環境に合わせてパスを指定してください。
よくAndroidSDKですと、「/Applications/android-sdk-macosx/tools」まで指定することがありますが、今回は必要ないです。
何故かと言いますと、cocos2d-x側で補完してくれます。
この箇所は注意してください。

これでできる!と思ったのでcreate-android-project.shを実行しましたところ、多いにエラーが吐かれました。
しかも,
「AndroidSDKのtools/androidがないよ!」
と怒られていました。
確認したところありました。
うーんうーんと唸りながら色々見ていますと、create-android-project.sh内にNDK_ROOTなるものがあります。
なんだろう?と思いながら、.bash_profileファイルにAndroidNDKのパスをNDK_ROOTに設定しまして、create-android-project.shを実行しましたところ動きました。
よくわからないです。

2.cocos2d-xをビルドしてみる

1の段階で少し触れましたが実際にどのようにビルドを行うのかを書いていきます。
まず、前述した通りにコマンドでcocos2d-xのフォルダに移動します。
次に、create-android-project.shを実行します。
実行コマンドは下記の通りです。
$ ./create-android-project.sh
実行しますとこのようにターミナルに表示されます。
Input package path. For example: org.cocos2dx.exampleと出ていますので、使用するパッケージ名を入力していきます。
ただ、ここで注意したいのはNDKを利用しますので途中でパッケージ名を変えますと、Java側だけではなく、C/C++側に記載したパッケージ名の変更も発生します。
SDKからNDKのメソッドを呼び出すには、NDK側で呼び出されるメソッド名がパッケージ名から始まるのです。
例えば「jp.co.megmegfive.startGame」といったメソッド名にしないと呼べなかったと思います。
そのため、パッケージ名を変更するとなるとリファクタリングの量が多くなってしまいます。
一気にリファクタリングができるかあやふやですが、後々のことを考えますとこの段階でパッケージ名を決定させておくと後々楽になるのではないかとおもいます。
一度NDK周りでこのパッケージ名の変更でとんでもなくはまったことがありますからね…。
あんな思いはしたくないです。

閑話休題。

ずらずらと出てきました!
パッケージ名を入力しますとターゲットの一覧が表示されます。
これはAndroidSDKでインストールしている内容ですので、それぞれが違うと思います。
表示されたidを入力します
input target idとありますので、リストで表示されたidを入力します。

idとプロジェクト名を入力しました。
ターゲットを入力しますと、input your project name:と表示されますので、任意のプロジェクト名を入力して下さい。
ずらずらっとまた出ました。
プロジェクト名を入力して、上記のような画像が表示されたらビルドの成功です!
ここまで辿り着くまでがとても長かったです。

3.Eclipseに読み込む

ビルドが通りましたので、今度はEclipseに読み込んでapkファイルを作成していきます。
先ほどビルドしたものは、cocos2d-x直下に記載したプロジェクト名でフォルダが作成されています。
フォルダの中はこのような構成になっています。
シンプル
これでEclipseに読み込めばOKというとそうではありません。
最初にやってしまいましたが、このままandroidフォルダでプロジェクトを作成しましてもエラーがあるためビルドが通りませんでした。
よくよくみますとlibs/armeabiフォルダがありません。
NDKの場合ですと、この中にある.soファイルを読み取ってAndroidSDKと連携を取っていきます。
では、どうやって.soファイルを作るかと言いますと、まず、コマンドでプロジェクトのandroidフォルダに移動します。
次に、
./build_native.sh
というコマンドを実行します。
このコマンドを実行しますと、nativeのビルドが実行されていきます。
ものすごくログは長いです。
この前に大量のログがあるので一部割愛しています。
注目すべきは最後の7行目からです。
.soファイルの生成に成功したようです。
よかったよかった。

さて、本題のEclipseへの読み込みです。
右クリックをして、
New→Android Projectを選択。
ダイアログが表示されますので、先ほど書きましたプロジェクト名を入力します。
それからCreate project from existing sourceを選択しまして、
cocos2d-xのフォルダ/プロジェクト名/android
をLocationとして選択します。
こんな感じで入力します
次にNextを選びまして、2で選んだビルドターゲットを同じものを選びます。
異なるビルドターゲットを選んで齟齬が起きるんじゃないかと思ってこうしています。
実際はわからないですが、揃えられるのなら揃えていた方が安全な気はします。
私はAPI Level8のものを選んだので、それにしています。
そしてダイアログのFinishボタンを押しますとEclipseにプロジェクトが生成されます。
これでEclipseへの読み込みは完了です。

4.Eclipseからアプリをインストール

ここから先は通常のAndroid アプリと同じです。
新規作成したプロジェクトですので、念のためProject→Cleanを選びます。
これでクリーンビルドは完了です。
次に、プロジェクトを選択してRun As→Android Applicationを選択します。
そうしますと、先ほどビルドを行ったapkファイルが端末にインストールされます。
T-01Cだからfpsが残念すぎる…。
この画面が表示されましたら、無事に環境が整ったということです!
これでcocos2d-xで開発ができますね!

5.まとめ

家でおおいにターゲット一覧が出なくてハマった理由の解消法としまして、

  • AndroidSDKを置いているディレクトリ名を変更した(android-sdk-mac_x86からandroid-sdk-macにしました)
  • パス指定の修正
2番目は凡ミスとしましても、1番目はなんでダメだったんでしょうかね?
よくわからなかったです…。


さて、cocos2d-xやcocos2dもほとんどわかっていないので、これからも情報発信はしていきますが、かなり遅くなると思います。
C/C++もさっぱりわかっていないので、さらに時間がかかりそうではあります。
それでも少しずつやっていこうかと思っていますので、よろしくお願いします。

とりあえず、どなたかに簡単に開発の基礎を教えていただければ嬉しいです!
そのためにもcocos2dのあのイベントには参加しなければ…!

0 件のコメント:

コメントを投稿