会社に移換された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にコピーして実行
なんか色々聞かれるが
全部デフォルトのまま進めば問題ないと思う
これは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が必要になってくる
(正直ここは必要かどうか要検証かも)
以下のページからダウンロード
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をあえてダウンロードした
こちらも解凍して
今度はホームディレクトリに配置する
# 解凍
$ 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フォルダを選択
選択をするとAndroid Studioが
なんか色々やり始めるので待つ
しばらく待つと
Android Studioが立ち上がる
んで最初に
おめえのプロジェクトのGradleのプラグイン
バージョン低いぜ?
とupdateを勧めてくるので
Remind me laterで無視する
またしばらく待つと
今度は実行ボタンが緑色になり
実行可能な状態になるので実行
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メソッドとして入れておいたけど
あんまりお勧めする方法ではないな
他にもなんか注意することがあったけど
思い出したら追記しよう