2011年07月21日
RubyをAndroid用にビルドする
昨年の夏に書いた記事、「AndroidのNDKツールを使ってrubyをビルドして動かす」のアップデートです。
rubyのソースコードはruby-1.9.2-p290, NDKはr6を使用しています。
開発マシンはx86_64のUbuntu 10.04です。
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をネイティブでビルドしてインストールしておく必要があります。