#概要
JavaとScalaで書かれたアプリをiOSに移植してみました。
移植したのは私が開発しているMikuMikuStudioというゲームエンジンを使って作った、MMD(MikuMikuDance)プレーヤーです。
http://sourceforge.jp/projects/mikumikustudio/
Javaの実行にはRoboVMを使用しています。
OpenGLなどのライブラリとして、libGDXをカスタマイズして使用しています。
ソースはgithubにあります。
https://github.com/chototsu/mikumikustudio-gdx
#動画
http://www.nicovideo.jp/watch/sm22101434
#Javaをインストール
以下のURLからMac版のJavaをダウンロードします。
http://www.oracle.com/technetwork/java/javase/downloads/index.html
インストーラを起動し、インストールします。
#sbtをインストール
sbtのインストールはhomebrewを使うのが簡単です。
まずhomebrewをインストールします。
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
sbtをインストールします。
brew install sbt
#sbtの設定
そのままではコンパイル時にメモリー不足になるため、~/.sbtconfig に以下の設定を書きます。
SBT_OPTS="-Dfile.encoding=UTF-8 -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=384M"
#android sdkをインストールする
注意:Androidの開発をされない方はスキップしていただいて結構ですが、その場合も環境変数だけは設定して下さい。ANDROID_HOMEを設定しないとビルド時にエラーが出ます。
Android SDK を以下のURLからダウンロードします。
http://developer.android.com/sdk/index.html
環境変数を設定します。
export ANDROID_HOME=/Applications/android-sdk-macosx
#RoboVMをインストール
RoboVMをダウンロードします。現在はバージョン0.0.6を使用しています。
http://download.robovm.org/robovm-0.0.6.tar.gz
解凍します。
tar xvzf robovm-0.0.6.tar.gz
~/.robovm/homeにシンボリックリンクを張ります。
ln -s ~/robovm-0.0.6 ~/.robovm/home
シンボリックリンクを張るかわりに環境変数ROBOVM_HOMEに設定してもかまいません。
export ROBOVM_HOME=~/robovm-0.0.6/
#mikumikustudio-gdxをダウンロードする。
git clone https://github.com/chototsu/mikumikustudio-gdx.git
#起動
##Mac上で実行
sbt desktop/run
##iOSシミュレータで実行
sbt ios/iphone-sim
##実機で実行
sbt ios/device
#IntelliJ IDEAをインストール(オプション)
開発にはIntelliJ IDEAを入れると便利です。無料のCommunity editionでも十分使えます。
##インストール
以下のURLからダウンロードして下さい。
http://www.jetbrains.com/idea/
ダウンロードしたらインストーラを起動しインストールして下さい。
##プロジェクトの設定
プロジェクトのディレクトリで以下のコマンドを実行すると、プロジェクトをIntelliJ IDEAで開けるようになります。
sbt gen-idea
IntelliJ IDEAのプロジェクトファイルが作成されますので、IntelliJ IDEAでプロジェクトを開きます。
#まとめ
RoboVMはまだαバージョンですが十分実用に耐えうる性能と安定性がある事が分かりました。使ってみた印象では、AndroidのDalvikより速く、安定しています。皮肉な話ですがAndroidよりiOSの方がJavaの実行環境として優れていると言えるかもしれません。
RoboVMの登場で、Android,iOS,Windows,Mac,Linuxで動くアプリを同一ソースで書く事が出来るようになりました。
今後、iOSの開発言語としてJavaやScalaが有力な選択肢となるのではないでしょうか。