AltJavaの"Kotlinでスマートフォン・クロスプラットフォーム開発入門"、勝手に略して、"ことクロ"シリーズ その5。
今回は、RoboVMチームがIntelliJを採用するまでのJetBrains社による経緯解説 (One IDE to rule them all – RoboVM Studio)を参考に、RoboVM Studioの現状を淡々と探っていたのだが、どうやら、今週末からのOracle JavaOneの祭りネタに行き当たったようなので、Google対Oracle代理戦争、、と釣り記事にさせてもらう(ここ数年、似たようなネタがあったような気がするが...本件、Javaな人々の見解がほしい...)
FYI:RoboVM on iOSの今後、詳しくは、今週末のOracle JavaOne "RoboVM sessions"でってことらしい。
=> Googleが担ぐAndroidStudioのJetbrain社と、AndroidもiOSもOracle-JDKでっていうOracleの方向性に延長線上にあるRoboVM&Kotlinのネタなので、けっこうこの先が気になっている。
Cf.Javaの本家と分家の争訟について:
OracleとGoogleの判決文を斜め読む
Cf.SQLite代替のクロスプラットフォームデータベースRealmチームからの釣り記事(?):
(日本語訳)Androidには新しい言語が必要か? Kotlin JetBrainsが作ったJavaの代案
#1) RoboVM Studioに関するRoboVMチームのyoutube
2015年9月の解説ビデオ:
- XcoceとJVMが入っているMacにRoboVM Studioをインストールすることで、RoboVMプロジェクトを扱えるIntelliJ環境が動く。
- Javaで書かれたiOSシュミレーターでのHelloWorldプログラムを実行。
- プログラムは、org.robovm.apple.uikit...のライブラリをインポートしている(すなわち、AppleのUIkitを使用)
- フリートライアル期間は14日
フリートライアル期間がもうちょっと長ければ、お試ししたいところだが・・・、もう少し基礎調査と考察をすすめることにする。
#2) 先人からの情報
Java
8月時点でのRoboVMまとめ。
RoboVM開発の基本形となる必要なjar(Cocoa Touchバインディング等)をクラスパスに入れて、javacコマンドでクラスファイルを生成し、robovmコマンドでターゲット機向けにビルドして実行する様子がわかる。引用:
javac -cp robovm-rt.jar:robovm-objc.jar:robovm-cocoatouch.jar:. HelloIOS.java
対象OSをiOS, CPUアーキテクチャをx86_64として指定してビルドする場合:
robovm -cp robovm-objc.jar:robovm-cocoatouch.jar:. -os ios -arch x86_64 -run HelloIOS
これらをgradleプラグインを利用したbuild.gradle
ファイルで一括実行する書き方が参考になる。その他、RoboVM Studio1.5への言及もあり。
どうも10月に入ってRoboVMのライセンス体系が変わった関係か、環境導入方法が変わっているもようで、そのあたりは要調査。
Groovy
github上のGroovyでRoboVMを動かすためのGradleプロジェクトのbuild.gradleを活用した昨年末の事例。一部動きはしたが、イベントリスナーのコードが動かなかったとのこと。。
Kotlin
今年5月時点でRoboVMのサンプルをKotlin向けにフォークした事例@github。
=> Gradleラッパーであるgradlewを使ってビルドできるようになっている。
#3) 今夏のiOS9~今月のRobovm1.9まで
今夏のRoboVM Studio1.6リリース時点の投稿のビデオ(9分ちょい)が参考になる。
なるほど、IntelliJ相当のRoboVM StudioでAndroid向けのUI作って実行した後、XCodeでUI作って、それをRoboVM Studioにインポートするわけね。
あと、roboVMをObjective-C/Swift側に埋め込んだり・・・
そして、今月21日、JavaOne開催に合わせて、RoboVM Studio1.9リリースとのこと。バージョンアップ早すぎ。。。
#4) 考察
Java/KotlinなどのJVM言語でクロスプラットフォーム開発、主な選択肢はどうやら3つ。
- コントローラとモデルはJVM。UI制御とViewはAndroid/iOSで別々。iOS向けにはうすいラッパーを書いて、Swiftのコード等をJVMから呼び出す。
- UI制御までJVM、Viewは個別。IntelliJ等でAndroidのViewを開発し、XCodeでiOSのViewを開発(RoboVMチームの推奨?)。
- UI制御はJVM、Android&iOSのViewも抽象化された何ものかを活用しJVM言語で共通的に記述。それって、次のJavaFX?? あるいは、RxJava系の未来???
現実には、3つ目の選択肢にまともなものはまだ存在しないが、Oracle対Googleの訴訟ネタと絡んで、RoboVM2.0以降は、Oracleも関与してなど、とならないか、若干期待。。Oracle社は最近改めてスマートフォンとJavaについての言及をしているようだが、公式見解はJavaOne待ちってことで・・・(続く)。
追記 : 現時点での自分の取るだろうアプローチを以下に書いた。
Java資産を活かした、FRP的クロスプラットフォーム開発環境 一案
=> 文脈はだいぶ違うけれど、RoboVM&Kotlinも使いものになるなら、それなりに使うよ、と考えている。