JRuby on Android - RUBOTO

JRuby開発者、Charles Nutter氏のブログにJRubyをAndroidに移植したとみられる記事が掲載されたわけだが、その翌日、事の詳細がHeadius: Ruboto Is Your Friendで公開された。結論からいえばJRubyはAndroidで動作するようになり、そして今後の修正点の洗い出しもできたことになる。Androidで動作させるための修正は執筆現在で最新版となるJRuby 1.2RC1に取り込まれている。どのように移植したのか、どういった問題があるのかが記載されており参考になる。

Headius: Ruboto Is Your Friendによれば、Charles Nutter氏は2009年1月の早い時期にすでにJRubyをAndroidへ移植することを考えていたという。AndroidのJava環境DalvikがJava 1.5とほぼ互換性がありJava MEプロファイルよりも多くの拡張ライブラリを備えているため、JRubyを移植して『Mobile JRuby』と言い出すいい機会だと考えていたようだ。しかし開発環境をダウンロードしてオンラインドキュメントを眺めたりはしたものの、実際の作業には至らなかったという。

事の転機は2月23日(米国時間)に実施されたユーザグループ(Ruby Users of Minnesota)で実施されたセッションにはじまる。同セッションではAndroidでの開発、iPhoneでの開発、StrutsからJRubyへのマイグレーションといった話があり、それに触発されて同日の夜にJRubyの移植作業に着手、なんと1時間後には動作するようにしたという。Headius: Ruboto Is Your Friendには作業の様子がコミカルにまとまっている。しかもその方法がおもしろい。

最初はEclipseのGUIベース環境を使ってAndroidアプリを作成。次にJRubyライブラリを追加しようとしたが方法が分からないためあきらめて、SDKのコマンドをいじくって探っていく方法に転向。ツールをいじるうちに既存のクラスやJarファイルをDalvikバイトコードへ変換するdxコマンドを発見。--dexでDalvikバイトコードへの変換を指定、-JXmx1024Mで1GBまでメモリを使うように指定、--outputで出力ファイルを指定している。

dxコマンドでJRubyのJarファイルをDalvikバイトコードへ変換 - Headius: Ruboto Is Your Friendより抜粋

変換後のJarファイルにはclassed.dexファイルが含まれている - Headius: Ruboto Is Your Friendより抜粋