ハトネコエ Web がくしゅうちょう

プログラミングとかAndroid

Windows での Cocos2d-x の導入(cpp-testsをAndoridにインストールするまで)

全然解説サイトが無く苦労したので書いておきます。

【この説明は、公式サイトでも英語で読むことができます】
How to run cpp-tests on Android | Cocos2d-x

途中でいろいろ詰まったので、公式の説明を補完する気持ちで書いていきます。
OS : Windows8.1 64bit

最低限必要な物

・Cocos2d-x
Android SDK
Android NDK(※SDKとNDKは異なるものです、両方ともインストールしましょう)

インストールらしいインストールはSDKだけ。
cocos2d-x と Android NDK は zipファイルなので、解凍して、置きたいとこに置くだけ。

ちなみに自分は C:/Android/ ディレクトリに3つ全て置きました。
フォルダ名はバージョン名含めて「cocos2d-x-3.6」とかになってるけど、
後々のこと考えると、「cocos2d-x」とフォルダ名を変えておいた方が、
cocos2d-x自体のバージョンアップ時に対処できるのでいいかも。

SDKをインストールしたら、SDK Manager を起動して、
APIをダウンロードしておきましょう。
Android OS のシェアはググると出てくるので、そこ参考にダウンロードするといい感じ。
私は 5.1.1, 5.0.1, 4.4.2, 4.2.2, それから、Extras の全てをダウンロードしました。
けっこう時間かかります。

環境変数の設定

さて、入れ終わったら、cocos2d-x/setup.py を実行して、SDKやNDKを入れた場所を教えましょう。
Apacche ant をインストールした場所も聞かれます。
インストールしてなかったのでググってインストールしました。
setup.pyが起動しない場合は、Pythonが入っていません。Pythonをインストールしましょう。
(ただし、2015/5/8での最新は v2.7.9 と v3.4.3 ですが、cocos2d-xは現時点でv3系列には対応していませんので、v2.7.9 をダウンロードしてください)

インストールするものいっぱいですね。
けっこうたるいところです。

なお、このsetup.py、使ってみると分かるのですが、
環境変数ANDROID_SDK_ROOTやCOCOS_CONSOLE_ROOTなどを代わりに入れてくれるものになっています。
なので、これを使わず、手動で環境変数を入力することも出来なくはありません。


環境変数のPATHについてもsetup.pyで勝手に足してもらえるのですが、実は足りません。
必要なPATHを書いておきますと以下の4つです。
(※上述の通り、私は「C:/Android」ディレクトリにcocos2d-xもSDKもインストールしています)
C:\Android\cocos2d-x\tools\cocos2d-console\bin;C:\Android\cocos2d-x\templates;C:\Android\android-sdk\platform-tools;C:\Android\android-sdk\tools;

おそらくは前半2つしか足されていないと思うのですが、あとの2つはとても重要です。

cocos2d-x\tools\cocos2d-console\bin:コマンド cocos が置いてある
cocos2d-x\templates:わからない
android-sdk\platform-tools:コマンド adb が置いてある
android-sdk\tools:コマンド android が置いてある

これ公式サイトに説明無いのでハマりました。特にandroidはexeでなくbatファイルなので気付かないでいました。
この記事を書きながら発見しました。お気を付けください。

Pythonを初めてインストールした方は、python.exe の場所のPATH指定も忘れずに。cocosコマンドを動かすのに必要です。*1

ビルド

ここまで来ればもうあとは簡単です。公式サイトを見た方がわかりやすいかもしれませんね。

android list target

を実行すると、SDK ManagerでインストールしたAPIの一覧が確認できます。*2

(実行結果の一部を抜粋)
----------
id: 4 or "android-22"
     Name: Android 5.1.1
     Type: Platform
     API level: 22
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default),
WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : android-tv/armeabi-v7a, android-tv/x86, default/armeabi-v7
a, default/x86, default/x86_64
----------
id: 5 or "Google Inc.:Google APIs:17"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 3
     Description: Android + Google APIs
     Based on Android 4.2.2 (API level 17)
     Libraries:
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default),
WVGA854, WXGA720, WXGA800, WXGA800-7in
 Tag/ABIs : default/armeabi-v7a
----------

cocos2d-x/build ディレクトリに移動して、

android-build.py -p 19 cpp-tests

を実行することで、API 19 を使って、「cocos2d-x\tests\cpp-tests」にあるデータのAndoroid用ビルドがおこなわれます。
(公式サイトには「python android-build.py -p 19 cpp-tests」
とあるけれど、そうするとpythonが起動してしまった……)

-p の p はプラットフォームの p です。
ですので、今回はAndroid 4.2.2 (API 19)以上向けのビルドでしたが、
API 22 の機能をフルに使ったものでしたら、上の19は22とします。

それなりの時間がかかったのち(30秒くらい?)ビルドが完了すると、

debug:

BUILD SUCCESSFUL
Total time: 24 seconds
Move apk to C:\Android\cocos2d-x\tests\cpp-tests\bin\debug\android
build succeeded.

と表示されます。

おめでとうございます! Android携帯をお持ちの方は一度は見たことはあるかもしれない、
実行ファイル apkファイルが上記のフォルダに出力されました。
ここでは「C:\Android\cocos2d-x\tests\cpp-tests\bin\debug\android」に出力されたようですね。

インストール

もちろん、apkファイルをAndroidに移動させて、スマホでインストールってこともできると思いますが、パソコンからでも出来ます。
Androidの設定で、USBデバッグモードにしてから、パソコンとつなぎます。

USBデバッグモードにする方法はこちらをご覧ください。
Android端末を「デバッグモード」(USBデバッグ)に設定する | AndMem

そうしてコマンドプロンプトで先ほどのapkファイルが出力されたフォルダに移動した後、

adb install CppTests-debug.apk

を実行すると、スマホにインストールされていきます。

長くなりましたが、以上です。
今、記事書き終わって初めて、スマホでCppTestsを起動させてみたんですが、シュールですねこれ(笑)


[追記-2015/5/24]
友人に勧められたけど、この本が良さげ。ってか買っちゃいました。
cocos run でアプリが起動できるの知らなかった……(54ページ

出来る範囲はターミナルとテキストエディタで済ませたい派なので、
IDEに依存しすぎてない説明で好き。(それでも序盤でEclipseはたびたび出てくるけど)
わりとオススメ。

*1:正確には、cocosコマンドの中身が「python cocos.py」となっているため、cocosコマンドを実行したときのpythonコマンドが動かないという仕組み

*2:cocos2d-x公式サイトでは android list targets となっているが、android list --help 的には target。でも、targetでもtargetsでも動く