Nexus One用にfroyoソースをビルド (on ubuntu10.04)

投稿者: | 2010年6月28日

本来は先日購入したMacBookProのMacOSX10.6.4でやりたかったんだが、ビルド途中で引っかかってしまったので
とりあえずホストにubuntu Linux 10.04を使ってみた。


まずGet Android Source Codeにある
本家の手順の通り必要なパッケージをインストール。
Synapticパッケージマネージャから
curl,flex,bison,gperf,libsdl1.2-dev,build-essential,git-core
をインストール。
別のパッケージの依存関係でインストールされていたのか、
gnupg
はすでにインストール済みだった。

この他に”sun-java5-jdk”も必要だとあるが、Synapticにはないのですでにインストールしてあった”sun-java6-jdk”を使うようにmakeファイルのチェック部分の書き換えを行ったところビルドは通った。
また、”libwxgtk2.6-dev”もオプションと書いてあるので入れなかったが特に問題は発生せず。
実際には環境依存があると思うのでリンク先を見たほうが良い。

パッケージがインストールできたらソースをダウンロードする準備。
Get Android Source Code
Installing Repo の項目のとおりコマンドをダウンロード。

$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

として、ここにパスを通す。
 
ではソースの取得とダウンロード。
ビルド部分について参考にしたのは以下のサイト
Building from source – CyanogenMod Wiki
今回は標準ソースでビルドしてみたかったのでcyanogen modは使っていないが、ここの手順でビルドできるらしい。

Nexus Oneはビルドターゲット名”passion”だということを今回ビルドするまで知らなかったり…
google公式の端末なので以下のように普通にソースを拾ってくれば必要なファイルは一通り揃う。

ビルドするためのディレクトリを作成

$ mkdir build-test
$ cd build-test

取得するリポジトリの選択。

$repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo

今回はfroyoをダウンロードするのでこのように指定。

$repo sync

これでダウンロード実行。

ビルド用の設定スクリプトを実行

$source build/envsetup.sh

実機から必要なファイルを読み出す必要があるので、Nexus Oneをつないでadbから認識できるようにする。
rootでadbを起動しないと接続できないようなのでroot権限で

#adb start

あとはユーザでもOK

$cd device/htc/passion
$./extract-files.sh

extract-files.shを実行するときにはadbにパスが通っていないとエラーになるので先に通しておく。

makefileなどをpassion用に置き換え(だと思う)

$./setup-makefiles.sh


extract-files.shの最後で呼んでるのでいらないみたい。
 

アップデータがあれば

$./unzip-files.sh

を実行するらしい。今回は無いので実行しない。というより実行してもファイルがないと言われて何も処理されない。

ソースをダウンロードしたディレクトリに戻り、環境変数の設定。

ichinomoto@maya:~/android/build_test$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. generic-eng
     2. simulator
     3. full_dream-userdebug
     4. full_passion-userdebug
     5. full_sapphire-userdebug

Which would you like? [generic-eng] 4

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=full_passion
TARGET_BUILD_VARIANT=userdebug
TARGET_SIMULATOR=false
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================

どれでビルドするのか選択肢が出るので、とりあえず4番を選択。
今回はNexus Oneに書き込み出来るイメージを作ることができればよかったのでこの辺は適当。

ここで、TARGET_BUILD_VARIANTを

export TARGET_BUILD_VARIANT=eng

のように変えておかないとそのままでは通らなかった。(変えなくても問題ない場合もあるようで、詳細は不明)
また、javaは本来1.5が必要なのでバージョンチェックに引っかかるが、1.6でも大丈夫そうなので

build/core/main.mk

の105行目と121行目を修正

java_version := $(shell java -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')
javac_version := $(shell javac -version 2>&1 | head -n 1 | grep '[ "]1\.6[\. "$$]')

ここまで出来たらあとは

$make -j4

依存チェックのあとダーッとログが出て、特に問題がなければあとは放置。(-j4部分はお好みで)
-j4でmakeした場合は最大メモリ使用量はjavacを実行中に2.2GB程度だったので、それなりにメモリが必要。
エミュレータと実機用両方ビルドが終わった状態でHDDは10GB程度使用されているもよう。
(片方だけの時に見るの忘れてた…)
 

できたイメージは

out/target/product/passion

に出力される。
boot.img,system.img,userdata.img
をfastbootで書き込めば自前ビルドのイメージで起動する。
他にrecovery.imgもできるが、書き換えるかはお好みで。

うちの場合、何故かubuntu上からfastbootでNexus Oneを認識しなかったので、
上記3つのイメージをwindowsに持って行って

>fastboot flash boot boot.img
>fastboot flash userdata userdata.img
>fastboot flash system system.img

として書き込みを行った。

ビルドはPhenomII x4(x3 720BEを4コア化のうえ3GちょいにOCしてある)で20分程度だった。思ったよりかなり早い。
ただ、これだけ時間がかからなかったのはこの前に一度エミュレータ用にイメージを作ったせいじゃないかと思っている。
去年の今頃にX200sでエミュレータ用イメージをビルドしたときは2時間ぐらいかかった覚えがあるのだが。
#前回はこのあと結局下回りをいじるようなことは何もしなかったのか…

ちなみに、エミュレータ用にイメージをビルドする場合は、

$repo sync

のあと、いきなり

$make -j4

でOK。(-j4部分はお好みで)
できたイメージは

android-sdk-linux_86/platforms/android-8/images

に置くと、エミュレータでそのイメージが使われる。
他のところに置いて使う方法は調べてないので不明。

#引き続きOSXでのビルドで引っかかる問題について調査中。
あと、ここの手順だとkernelの変更はできないのでその辺は次で

Nexus One用にfroyoソースをビルド (on ubuntu10.04)」への2件のフィードバック

  1. ピンバック: Tweets that mention http://www.ekesete.net/log/?p=1658utm_sourcepingback -- Topsy.com

  2. ピンバック: Ubuntu 10.10 でのAndroidビルド環境構築 - 記録

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です