7
12

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.

cocos2d-xプロジェクトがAndroid Studioビルドできない時の対処

Last updated at Posted at 2016-07-31

会社に移換されたcocos2d-xのプロジェクトから
apkを抽出することになり、
Android Studioを使うことになった

いや素直にeclipseを使ってビルドすればよかったんだろうが、
何せ世の中がAndroid Studioに流れているので
これは乗り換える時期だと考えた結果である

まあでもしかし、こいつ...

使えん...

Android Studioなんてapkの抽出ができて
AVD Managerの役割をちゃんと果たせばいいと
考えていたのだが、

そもそもcocos2dのandroid-studioプロジェクトを
コンパイルすることができないというw

しかしそれでは結局shellでやるか
eclipseでやるようになって今までと
なんら変わらないようになってしまうので

コンパイル : cocosコマンド
実行 : Android Studio

でやっていくことにした

ということで以下cocos2dのプロジェクト立ち上げから
Android用にビルドするまでの手順

環境

  • mac
  • 実機(DIGNO C 404kc Android 4.4.4)

1. Android Studioをインストール

事前にjavaはインストールしておくこと

$ java -version

以下のページからダウンロード

Android StudioをApplicationsにコピーして実行

なんか色々聞かれるが
全部デフォルトのまま進めば問題ないと思う

スクリーンショット 2016-07-31 21.49.55.png

スクリーンショット 2016-07-31 21.50.24.png

スクリーンショット 2016-07-31 21.50.45.png

これはAndroid Studioを使ってみて
ちょっとだけ便利だと思ったことなのだが

Android Studioを始めて起動をすると
Androidフォルダを自動で作成してくれて
sdkを自動で取得してくれるのだ

eclipseはいちいち自分でフォルダを作って
sdkをとってきて、
antをとってきて、
ndkをとってきて...

という作業をやっていたので、
それが少しでも短縮されると思うと
ちょっと嬉しい
(とはいえndkはとってこないといけないのだが...)

2. NDKをダウンロードする

ここがちょっと難関なのだが
ndkは新しいバージョンのものだと
cocos2dxのプロジェクトはコンパイルできない

ということでndkのr10cを
取得したいわけだが、
以下の公式サイトでは最新のバージョンのものしか
ダウンロードできないのだ

はっきり言って嫌がらせとしか
思えないが、
uriを変更することで古いバージョンのndkも
取得することができる

以下がr10cをダウンロードするuri

ndkをダウンロードしたら
先ほどAndroid Studioが作ってくれた
Androidフォルダへndkという名前に変更して配置する

# 実行権限を付与
$ chmod a+x android-ndk-r10c-darwin-x86_64.bin
# binファイルを解凍
$ ./android-ndk-r10c-darwin-x86_64.bin
# Androidフォルダ直下に配置
$ sudo mv android-ndk-r10c ~/Library/Android/ndk

3. ANTをダウンロードする

cocosコマンドでコンパイルするので
antが必要になってくる
(正直ここは必要かどうか要検証かも)

以下のページからダウンロード

スクリーンショット 2016-07-31 22.25.42.png

antをダウンロードしたらndkと同様
Androidフォルダへantという名前に変更して配置する

# 解凍
$ tar xvf apache-ant-1.9.7-bin.tar.gz
# Androidフォルダ直下に配置
$ sudo mv apache-ant-1.9.7 ~/Library/Android/ant

4. cocos2d-xをインストール

以下のページからダウンロード

過去のバージョンは以下から

ちなみに自分は最新バージョンが
IPv6のみの対応に変更になっていること
(Appleのあの件か...)

それから安定を求めて
v3.10をあえてダウンロードした

スクリーンショット 2016-07-31 22.55.15.png

こちらも解凍して
今度はホームディレクトリに配置する

# 解凍
$ unzip cocos2d-x-3.10.zip
# ホームディレクトリに配置
$ mv cocos2d-x-3.10.zip ~/cocos2d-x

配置後はcocos2d-xをセットアップする

$ ~/cocos2d-x/setup.py

ここでndkやらのパスを聞いてくる

注意するのはantはbinフォルダまで
指定すること

ちなみに自分は以下のような構成になった

NDK_ROOT : /Users/tanishi/Library/Android/ndk
ANDROID_SDK_ROOT : /Users/tanishi/Library/Android/sdk
ANT_ROOT : /Users/tanishi/Library/Android/ant/bin

これでログインシェルのプロフィールに
環境変数が追加されて
cocosコマンドが使えるようになっているはず

自分はzshなので

$ source ~/.zshrc

まあでもだいたいbashのはずなので

$ source ~/.bash_profile

でプロフィールの更新を適用する

最後にcocosコマンドを入力して仕上げ

$ cocos

コマンド一覧がズラーと出てきたら成功

5. プロジェクトを作成

cocosコマンドを使用して
プロジェクトを作成する

cocosのプロジェクトの言語は
c++,lua,javascript
の3つから選択することができる

今回はluaで作成することにした

$ cocos new -l lua -d ~/Desktop

特にプロジェクトの名前を指定していないので
MyLuaGameというプロジェクトフォルダがDesktopに作られる

ちなみに-l luaの部分を
-l cppでc++に
-l jsでjavascriptにすることができる

-dはプロジェクトを作成するディレクトリを
指定するためのオプション

6. Android用にコンパイル

ここでAndroid Studioでプロジェクトを開いてビルド!

と行きたいところだが
そうは問屋が卸してはくれない

先ほども記述した通り、
Android Studioではcocos2dプロジェクトを
コンパイルしてapkを抽出することができない

無理にビルドボタンを押そうものなら
凄まじい数のエラーが襲ってくる

なのでここはcocosコマンドを使用して
コンパイルする

$ cocos compile -s ~/Desktop/MyLuaGame -p android --android-studio

これでndkのバージョンが問題なければ
apkを抽出してくれるはず
(もちろん時間がめっちゃかかる)

7. 実機にapkをインストール

ちなみに今回は実機があるためエミュレータを使用しない
(PCのスペックが低すぎて、エミュレータを立ち上げようとした瞬間
PCが落ちたなんて口が裂けても言えない...)

まずはAndroid Studioを立ち上げて
Open an existing Android Studio project
からプロジェクト内のandroid-studioフォルダを選択

スクリーンショット 2016-07-31 23.34.24.png

スクリーンショット 2016-07-31 23.42.51.png

選択をするとAndroid Studioが
なんか色々やり始めるので待つ

しばらく待つと
Android Studioが立ち上がる

んで最初に

おめえのプロジェクトのGradleのプラグイン
バージョン低いぜ?

とupdateを勧めてくるので
Remind me laterで無視する

またしばらく待つと
今度は実行ボタンが緑色になり
実行可能な状態になるので実行

スクリーンショット 2016-07-31 23.53.32.png

スクリーンショット 2016-07-31 23.53.53.png

Androidにアプリがinstallされて
実行されれば成功

注意点

ちなみに今回は新規の状態でビルドしたから
あんまし関係ないけど、

たいていの場合はこう簡単にビルドが通ってくれない。

というのもndkがSTLに若干対応していないせいで
C++の一部標準ライブラリが使用できないためである

この場合、Android.mkを変更して
使用できないライブラリを使用できるようにするか

別途代わりを用意するかになる

ちなみに使用できないのは、
std::stringの型変換ライブラリだった

std::to_string
std::stoi
std::stof

以上は少なくとも確認できたが、
以下の方法で代わりを立てることができた

	template<class T> std::string toString(T value)
    {
        std::ostringstream oss;
        oss << value;
        return oss.str();
    }

    long stoi(const std::string& str, char **endp = nullptr, int base = 10)
    {
        return strtol(str.c_str(), endp, base);
    }

    float stof(const std::string& str)
    {

自分は面倒なので、
こいつらをStringUtil的なクラスに
staticメソッドとして入れておいたけど
あんまりお勧めする方法ではないな

他にもなんか注意することがあったけど
思い出したら追記しよう

7
12
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
7
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?