【レポート】

JavaアプリをAndroidに移植する方法 - JRubyの場合は1時間

2 1時間で動くように - 今後は事前コンパイラで高速化

  • >
  • >>

2/2

次に変換したファイルをエミュレータにアップロードする方法を探すが、UIが見つからない。jdbのようなデバッグツールがあるはずで、そこからアップロードできるはずだと推測を立ててadbコマンドを発見。pushサブコマンドでアップロードを試みるが書き込みができずに失敗。デバッガでシェルを起動してディレクトリを探し、/dataディレクトリが書き込めそうと見込んでファイルのアップロードに成功。

adbコマンドでファイルを書き込み可能な領域へコピー - Headius: Ruboto Is Your Friendより抜粋

次に実行コマンドを探して/system/bin/dalvikvmがそれらしいと発見。-jarオプションを指定するが動かない。-classpathを使うが例外が発生。例外が発生した部分をとりあえずコメントアウト、JMX関連機能を無効にして試し、動作に成功。ここまでが1時間ということになるようだ。

dalvikvmコマンドでJRubyを実行 - Headius: Ruboto Is Your Friendより抜粋

最終的にEnumSet関連の修正とJMXが動作するようにダミー代用機能を持ったファクトリークラスの作成、Dalvikワーニングに対応するようにBufferedReaderとBufferedInputSteamのコンストラクタにバッファサイズを指定するようにしたという。現状のJRuby on Androidには次の注意点がある。

  • JRubyはインタプリタモードとコンパイラモードが混ざったミックスモードで動作するが、Dalvikバイトコードは出力しないためインタプリタモードのみで動作する。これでは高速な動作は望めないわけだが、事前にすべてコンパイルするAll-at-onceコンパイラを開発することで対処できると考えている
  • 多くのライブラリ、特にネイティブコードに依存しているライブラリは動作しないものが多い。対応させることは可能だと考えている

今後の作業として次の項目が紹介されている。

  • Dalvikバイトコードを出力する機能を実装するよりも、All-at-onceコンパイル機能を実装する方が簡単そうなので、先にAll-at-onceコンパイル機能を実装する
  • コンパイル後のコードを配布できるようにJRubyのモジュール化を進める。こうすることで動作しないライブラリやパーサ、インタプリタ、コンパイラなど動作に不要な部分を排除してサイズの縮小化が可能になる
  • JRuby on Androidで何をしたいのかコミュニティとともにブレインストーミングしていく

アドバイスとしては、Androidのデフォルトスタックは8KBと小さいので-Xssや-Xmxを指定してサイズを広げるといいと紹介されている。Headius: Ruboto Is Your Friendに寄せられているコメントには、G1では/dataには書き込めず代わりに/sdcardに書き込めたという報告や、OSのバージョンごとに動作に違いがあるようだといった意見があげられている。

Charles Nutter氏の報告はいくつかの点で興味深い。動作しないライブラリは多いもののJRubyの移植に成功したこと(しかも報告が事実なら、動作するまでは1時間ほどしかかかっていない)、コマンドラインから探っていって動かす方法にたどり着いたこと、今後の改善点も見えたし作業するつもりがあることを明示していること、などだ。JavaアプリをAndroidに移植する際の参考資料として活用できる。

まだ日本ではAndroidを搭載したスマートフォンの販売ははじまっていない。しかし開発者は高い関心を抱いているようだ。先日Net Applicationsから発表されたモバイルシェアにおいても、iPhoneが支配的なシェアを持っている段階でもAndroidが勢いをもってシェアを伸ばしていることを報告している。

  • >
  • >>

2/2

インデックス

目次
(1) SDKコマンドから推測しながら移植にとりかかる
(2) 1時間で動くように - 今後は事前コンパイラで高速化
関連キーワード

関連記事



人気記事

一覧

イチオシ記事

新着記事