2011年1月5日水曜日

android build on 32bit (froyo/gingerbread)


froyo(2.2)から、Androidのソースをbuildしようとしても
64bitじゃないからムリー。みたいな事をいわれてビルドできなかった。
しばらく放置してたけど、もう一度調べてみたら、
出来たのでメモをとっておく。

1)
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
もしくは、
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b gingerbread
でソースコード取得。

2)
$ repo sync

3)
64bitの記述があるところを修正
32-bit support in froyo/2.2を参考にすればいける。

./build/core/main.mk
の以下のように編集
ifeq ($(BUILD_OS),linux)
build_arch := $(shell uname -m)
-ifneq (64,$(findstring 64,$(build_arch))) ←コメントアウトしたり削除したり
+ifneq (i686,$(findstring i686,$(build_arch))) ←追加するコード
$(warning ************************************************************)
$(warning You are attempting to build on a 32-bit system.)

4)
以下の4つの中に
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk

LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
という記述があるので、コメントアウトするか
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
のように32bitに書き換える。

5)
$ make -j2
で、コンパイル開始。
コアの数や作業状況によっては、-j4としたほうがコンパイルは早くなる。


手順4)を抜かしてみたけど自分の環境では、
64bit用のヘッダーがないよー。みたいなエラーが出たので、
ダメみたいです。

最後は、以下を実行すればemulatorが立ち上がる。
./out/host/linux-x86/bin/emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -system ./out/target/product/generic -ramdisk ./out/target/product/generic/ramdisk.img -data ./out/target/product/generic/userdata.img -skindir ./sdk/emulator/skins/ -skin HVGA


froyoでもgingerbreadでも同じ手順でbuild出来ました。

1 件のコメント:

  1. 参考になりました。ありがとうございます。

    返信削除