2011年07月21日

RubyをAndroid用にビルドする

昨年の夏に書いた記事、「AndroidのNDKツールを使ってrubyをビルドして動かす」のアップデートです。
rubyのソースコードはruby-1.9.2-p290, NDKはr6を使用しています。
開発マシンはx86_64のUbuntu 10.04です。


ネイティブのruby 1.9.2のインストール

ruby 1.9.2をクロスビルドするためにはネイティブのruby 1.9.2が必要です。あらかじめインストールしておきます。
$ tar xvf ruby-1.9.2-p290.tar.bz2
$ mkdir obj
$ cd obj
$ ../ruby-1.9.2-p290/configure
$ make
$ sudo make install
/usr/local/binにインストールされます。

Rubyのソースにパッチをあてる

前回はNDKのヘッダファイルとRubyのソースの両方を修正しましたが、今回はRubyのソースの修正だけで行いました。このパッチのファイルはこの記事の後ろに置きました。
$ mv ruby-1.9.2-p290 ruby-1.9.2-p290.android
$ cd ruby-1.9.2-p290.android/
$ patch -p1 < ../ruby-1.9.2-p290-android.patch
$ cd ..

環境変数をセットしてconfigureの実行

環境変数をセットするファイルはこれ。一行目のNDK_TOPはNDKをインストールしたディレクトリに合わせて変更してください。

env.sh
export NDK_TOP=/path/to/your/ndk/android-ndk-r6
export SYSROOT=$NDK_TOP/platforms/android-8/arch-arm
export CFLAGS="-march=armv5te -msoft-float " 
export CC="$NDK_TOP/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc -mandroid --sysroot=$SYSROOT"
$ mkdir obj.android
$ cd obj.android
$ . ../env.sh
$ ../ruby-1.9.2-p290.android/configure  --host=arm-eabi --prefix=/system/local --enable-shared --disable-ipv6
 ...
ruby library version = 1.9.1
configure: creating ./config.status
config.status: creating Makefile
configure: WARNING: unrecognized options: --disable-ipv6
最後のWARNINGは気にしなくても大丈夫です。

ビルド

$ make 2>&1 |tee make.log
一度 /system/local にインストールします。
$ sudo mkdir -p /system/local
$ sudo make install
ドキュメントやインクルードファイル等は不要なので、/system/local/binと/system/local/libのみAndroid実機にコピーします。
普通はadb push コマンドを使うところですが、私の場合は実機のファイルシステムはNFSマウントしているので以下のようにコピーしました。
$ sudo cp -a /system/local/bin /export/android/root/system/local/
$ sudo cp -a /system/local/lib /export/android/root/system/local/
/system/local/lib/libruby.so はシステムのライブラリパスが通っているディレクトリに置く必要があります。今回はシンボリックリンクを張りました。
実機のshellで
# cd /system/lib
# ln -s ../local/lib/libruby.so libruby.so

動作確認

以下のページを見てください。 AndroidのNDKツールを使ってrubyをビルドして動かす

パッチファイル


(2011.7.26 追記)

Ruby 1.8用のパッチもgistに置きました。
ruby-1.8.7-p352-android.patch
先にruby-1.8.7をネイティブでビルドしてインストールしておく必要があります。


関連するページ

AndroidのNDKツールを使ってrubyをビルドして動かす


トラックバックURL

コメントする

名前
 
  絵文字
 
 
記事検索
最新コメント
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

QRコード
QRコード