JavaでiOSプログラムを作成できる「RoboVM」

シェアする

RoboVM  Develop iPhone and iPad Apps in Java with RoboVM

RoboVM」はJavaのバイトコードを、ARMまたはx86コードに変換することができるコンパイラ(フリーソフト。GPLv2)。これを使えばJava言語を使ってiOSプログラムを作ることができます。

iOS用プログラムを開発してみたいJavaプログラマにとっては、便利なツールになるかもしれません。AndroidとiOSでコードを共有するなんてこともできるみたいです。

インストール

インストール方法は、「Getting started」に詳しく書いてありますがちょっとめんどうです。

  • OracleのJava SE 7をインストール。
  • Xcode 4.5.2をMac App Storeからインストール。
  • XcodeのPreferencesメニューから、Command Line Toolsをダウンロードしてインストール。
  • 以下のコマンドを実行して、LLVM toolsを/opt/llvm以下にセットアップ。
    curl http://llvm.org/releases/3.2/clang+llvm-3.2-x86_64-apple-darwin11.tar.gz > llvm.tar.gz
    sudo mkdir -p /opt
    sudo tar xvfz llvm.tar.gz -C /opt
    sudo rm -f /opt/llvm
    sudo ln -s /opt/clang+llvm-3.2-x86_64-apple-darwin11 /opt/llvm
    

シンプルiOSアプリ

同じ場所に簡単なiOSアプリのサンプルプログラムが掲載されています。以下を IOSDemo.java として保存します。

import org.robovm.cocoatouch.coregraphics.*;
import org.robovm.cocoatouch.foundation.*;
import org.robovm.cocoatouch.uikit.*;

public class IOSDemo extends UIApplicationDelegate.Adapter {

    private UIWindow window = null;
    private int clickCount = 0;

    @Override
    public boolean didFinishLaunching(UIApplication application,
            NSDictionary launchOptions) {
  
        final UIButton button = UIButton.fromType(UIButtonType.RoundedRect);
        button.setFrame(new CGRect(115.0f, 121.0f, 91.0f, 37.0f));
        button.setTitle("Click me!", UIControlState.Normal);

        button.addOnTouchUpInsideListener(new UIControl.OnTouchUpInsideListener() {
            @Override
            public void onTouchUpInside(UIControl control, UIEvent event) {
                button.setTitle("Click #" + (++clickCount), UIControlState.Normal);
            }
        });

        window = new UIWindow(UIScreen.getMainScreen().getBounds());
        window.setBackgroundColor(UIColor.lightGrayColor());
        window.addSubview(button);
        window.makeKeyAndVisible();
        
        return true;
    }

    public static void main(String[] args) {
        NSAutoreleasePool pool = new NSAutoreleasePool();
        UIApplication.main(args, null, IOSDemo.class);
        pool.drain();
    }
}

UIWindowや、UIButtonなど、iOSプログラマならお馴染みのクラスがJavaプログラムの中でも使われていることがわかります。ボタンに対する、イベントハンドラの登録は、イベントリスナーを作って登録するというJavaプログラマお馴染みの方法ですね。

このJavaソースコードをJavaバイトコードにコンパイル。

mkdir classes
javac -cp /opt/robovm/lib/robovm-rt.jar:/opt/robovm/lib/robovm-objc.jar:/opt/robovm/lib/robovm-cocoatouch.jar -d classes/ IOSDemo.java

Javaバイトコード(*.class)をネイティブコードにコンパイルします(ここがやたら時間かかる)。

/opt/robovm/bin/robovm -verbose -arch x86 -os ios -cp /opt/robovm/lib/robovm-objc.jar:/opt/robovm/lib/robovm-cocoatouch.jar:classes/ -run IOSDemo

しばらく待つと、iOSシミュレーターに画面が表示されます。
IOSシミュレータのスクリーンショット 2013 03 08 20 48 56

クリックすると数字がカウントアップされるということで。

まとめ

サイト上に「Warning! RoboVM is pre-alpha software.」と警告が表示されていることからもわかるように、まだ実用段階ではないと思いますが、今後の発展によってはおもしろいかもしれません。イベントハンドラの登録方法とか、Java方式のほうが分かりやすいと思うプログラマーも多いでしょう。

Javaソースコードのトランスレーターとしては、Googleの開発した「J2ObjC」なんてのもあるみたいです。

スポンサーリンク
レクタングル(大)広告
レクタングル(大)広告

シェアする

フォローする