AndroidはLinuxカーネルベースのJavaプラットフォームなので、当然、X86なPCで動作させることは可能です。
ネットを検索するといくつか手順書が見つけられるのですが、そのままの手順でうまくいくとは限りません。 なぜ、うまくいかないのかというとその説明を書いた人間の環境依存、ソースコードなどの更新により状況が変化したことにより不整合が発生するのでしょう。
したがって、手順を整理する時には以下の情報は必要です。
さて、いくつか見つけられる手順書を試してみましょう。
ちなみに、私が試すのは以前の記事で構築したubuntu Linux 9.04の環境です。日付はこの記事の投稿の日付と考えてもそう間違ってはいません。
日本での本家本元のような感じの手順書はこちらです。 きちんとpdfファイルにまとめてありますので、正しければいいドキュメントと言えます。
しかし、結論から先に言うと、この手順書ではビルドが正常完了しません。正常完了しない報告はこちらなどが一つの例です。
残念なことに、このドキュメントには日付がありません。
なお、環境変数を設定する部分で以下のようJAVAのバージョンに依存したディレクトリ名を指定している部分があります。
$ echo 'export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.07' >>/etc/bash.bashrc
これは当該ディレクトリの同列の階層を見れば分かるのですがシンボリックリンクが存在します。これによりバージョンに依存しない名前を指定できますので、以下のように、シンボリックリンクの方の名前を使うべきでしょう。
$ echo 'export JAVA_HOME=/usr/lib/jvm/java-6-sun' >>/etc/bash.bashrc
実際、私の環境ではバージョンが異なるため、ディレクトリ名も異なっています。
それでは手順について順次確認してみましょう。
手順どおりに進めて最初にエラーとなるのは以下です。
build/target/board/Android.mk:35: *** Please rename "vendor/asus/eee_701/Android.mk" to "vendor/asus/eee_701/AndroidBoard.mk". 中止.
これはメッセージのとおり、ファイル名の変更を行えばOKです。
次のエラーは以下。
make: *** `out/target/product/eee_701/system/etc/permissions/com.google.android.maps.xml' に必要なターゲット `vendor/google/frameworks/maps/com.google.android.maps.xml' を make するルールがありません. 中止. make: *** 未完了のジョブを待っています....
これに関しては、「vendor/asus/eee_701/eee_701.mk」ファイル中の"generic_with_google.mk"という文字列を"generic.mk"に変更することで対応可能。これについてはこちらを参考にしています。
次にエラーとなるのは、ビルド済みのファイルをコピーする部分です。
Copying installer base files... Copy: out/target/product/eee_701/obj/lib/libdiskconfig.so -> out/target/product/eee_701/installer/root/system/lib/libdiskconfig.so Copy: -> dirname: オペランドがありません 詳しくは `dirname --help' を実行して下さい。 mkdir: オペランドがありません 詳しくは `mkdir --help' を実行して下さい。 cp: ファイルオペランドがありません 詳しくは `cp --help' を実行して下さい。
この部分の処理をしているファイルは「bootable/diskinstaller/config.mk」です。コピー元とコピー先の指定が空白文字列になっているための不具合です。このmakeファイルに問題があるのではなく、何らかの前提条件に問題があるのでしょう。
この問題の対策は「external/e2fsprogs/Android.mk」の2行目の#によるコメントアウトをとって"include $(call all-subdir-makefiles)"の部分を有効にします。
ミラクルリナックスの方がまとめておられる手順書は
セコメントをする