donutブランチをAndroid Dev Phone 1で動作させる方法

Androidの現時点での最新環境であるdonutブランチを、Android Dev Phone 1で実際に動作させる手順を公開します。

PDFファイルも用意しています。

現在のgit環境では、下記urlに掲載されている公式の手順ではビルドが出来なくなっているので、解決方法も合わせて掲載します。

Building For Dream – Android Open Source Project
 http://source.android.com/documentation/building-for-dream

確認環境

 本ドキュメントに記載した手順は、以下の環境で確認しました。

ビルド環境その1 Ubuntu Linux 8.04LTS (日本語版) をインストール済みのPC(Pentium M 1.5GHz / MEMORY:1GB )
ビルド環境その2 Ubuntu Linux 8.04LTS (日本語版) + VMware(ホストPC:Windows)( Core2Duo 3.0GHz / MEMORY:4GB )
実機 Android Dev Phone 1 (Firmware Version 1.5)

制限事項

 本ドキュメントに記載の手順で作成したイメージは、本ドキュメント作成時点(2009/7/30)では無線LANが動作しません。

免責事項

 本ドキュメントは、実際に作業を進め、動作確認も行った上で公開しておりますが、その内容について、一切保証しないものとします。
万が一、Dev Phone 1 が起動しなくなった場合・故障してしまった場合等、本ドキュメントに記載の手順を実施した結果生じた損害について、弊社ではその責を一切負わないものとします。

1. ブランチソース取得

 弊社ブログ記事 Android のコンパイル環境を整える方法 を参考に環境構築を行います。
ただし、P.71に記載されているソースファイル取得の初期化 repo init を実行する際に以下のコマンドを実行し、ブランチにdonutを指定した上、ソース取得まで行います。
この際、makeはまだ行わないで下さい。

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

以降の手順では、ビルド環境の構築を以下の構成で行うものとします。

ビルドホーム /home/bs/mydroid
Note: local_manifest.xmlの扱いについて

Building For Dreamでは、実機ビルド用ソースを取得するために、local_manifest.xml を編集の上、/home/mydroid/.repo フォルダに配置する手順が記載されています。
 しかし、本ドキュメントを作成時点(2009/7/30)では、実機ビルド用のソース取得定義がmanifest.xmlに含まれており、実機カーネルを再構築しない限り、local_manifest.xmlを作成・編集する必要はありません。

2. Dev Phone 1からプロプライエタリファイル取得

 Dev Phone 1から、機種固有ドライバ等、ソース公開が行われていない、プロプライエタリなドライバ/ライブラリを取得します。
なお、取得する前に、必ずDev Phone 1のファームウェアを1.5にアップデートしておいてください。

Flashing your Android Dev Phone with a Factory System Image - htc
 http://www.htc.com/www/support/android/adp.html

2.1 Dev Phone 1をUbuntu PCに接続

 Dev Phone 1をPCに接続するため、以下のurlを参考に、Dev Phone 1用のデバイスファイルを作成します。

Developing on a Device - Android Developers
 http://developer.android.com/intl/ja/guide/developing/device.html

を参考に、ルート権限で以下のデバイスファイルを 50-android.rules という名前で作成し、
/etc/udev/rules.d/ に配置します。

ファイル 1: /etc/udev/rules.d/50-android.rules
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"

上記ファイル作成後、Dev Phone 1を接続します。
以下のコマンドを実行し、Dev Phone 1がPC上で認識している事を確認します。

$ adb devices
List of devices attached
HTxxxxxxxxxx device
2.2 プロプライエタリファイルの取得

 ディレクトリ /home/bs/mydroid/vendor/htc/dream-open/ に存在する、extract-files.sh を実行し、Dev Phone 1 からプロプライエタリファイルの取得を行います・・・が、このまま取得すると、Dev Phone 1に書き込んだ際に音が鳴りません。不足ファイルを取得するために、以下のファイルに対し、追加修正します。

ファイル 2: /home/bs/mydroid/vendor/htc/dream-open/extract-files.sh (追加分のみ)
adb pull /system/lib/libhtc_acoustic.so proprietary/libhtc_acoustic.so
ファイル 3: /home/bs/mydroid/vendor/htc/dream-open/AndroidBoard.mk (追加分のみ)
PRODUCT_COPY_FILES += \
$(proprietary)/libhtc_acoustic.so:system/lib/libhtc_acoustic.so

上記ファイルの追加修正後、以下のコマンドを実行して、プロプライエタリファイルを取得します。

$ cd /home/bs/mydroid/vendor/htc/dream-open
$ ./extract-files.sh

3. ビルド

3.1 ビルド用ファイル buildspec.mk の作成

 以下の内容のファイルを buildspec.mk というファイル名で作成し、ビルドホーム /home/bs/mydroidに配置します。

ファイル 4: /home/bs/mydroid/buildspec.mk
TARGET_PRODUCT:=htc_dream
3.2 ビルド実行

 ビルドホームに移動して、ビルドを行います。

$ cd /home/bs/mydroid
$ make

 ビルドが無事に成功すると、ディレクトリ /home/bs/mydroid/out/target/products/dream-open に、以下のイメージファイルが作成されます。

ブートイメージ boot.img
システムイメージ system.img
リカバリイメージ recovery.img
ユーザーデータ userdata.img

4. Android Dev Phone 1への書き込み

4.1 実機書き込みツール fastboot の準備
4.1.1 Ubuntu PC環境の場合

 Dev Phone 1へ書き込むためのツール fastboot が ディレクトリ /home/mydroid/out/host/linuxx86/
bin/ にあるので、~/bin 等、パスの通ったディレクトリにコピーしておきます。

$ cp /home/bs/mydroid/out/host/linux-x86/bin/fastboot ~/bin
4.1.2 VMware環境(ホストPCがWindows)の場合

Vmware上では、Linux版fastbootが動作しないため、Dev Phone 1のファームウェアダウンロードサイト(以下のurl)にて、Windows版fastboot(fastboot.exe)のダウンロードを行います。

Flashing your Android Dev Phone with a Factory System Image - htc
 http://www.htc.com/www/support/android/adp.html

ダウンロード後、パスの通ったディレクトリにコピーしておきます。

4.2 ビルドイメージの書き込み

ディレクトリ /home/bs/mydroid/out/target/dream-open に生成された各ビルドイメージファイルをfastbootで Dev Phone 1に書き込みます。

4.2.1 Dev Phone 1 をFASTBOOTモードに設定

Dev Phone 1の電源をOFFにした状態で、backキーを押しながら電源ON します。
Serial0 という文字列が表示される事を確認し、USBケーブルでPCに接続します。
その際、FASTBOOT という文字列に変わる事を確認します。

4.2.2 fastbootを使用してビルドイメージを書き込む

以下のコマンドを実行し、Dev Phone 1に書き込みます。

$ fastboot flash recovery recovery.img
$ fastboot flash system system.img
$ fastboot flash boot boot.img
$ fastboot flash userdata userdata.img
4.2.3 リブート

Dev Phone 1を以下のコマンドでリブートします。

$ fastboot reboot

Dev Phone 1を再起動後、ランチャーから、Setting アプリを起動し、 About phone を選択します。
Firmware version で “Donut” の表示を確認してください。

Note:端末がロックされてしまった場合の対処方法

 Dev Phone 1を起動後、SIMカードを挿入していない場合は、端末がロックされ緊急発呼しか行えない場合があります。この状態を回避し、Menuキーを有効にする方法は以下の通りです。

参考url:
Not able to enter full phone functionality when no SIM - why?
http://groups.google.com/group/android-porting/browse_thread/thread/4f0fdc5c2b1fd9fa

1. adb shell コマンドを実行し、Dev Phone 1上のシェルを起動します。

$ adb shell

2. 以下のコマンドを実行し、/data/local.prop を生成後、リブートを行います。

# echo "keyguard.no_require_sim=1" > /data/local.prop
# sync
# reboot

5. 最後に

 本手順で作成したイメージには、Maps、GmailAndroid Marketが含まれない等、制約が多いですが、実機で動作させつつ、ネイティブフレームワーク部のログ出力等、コアなデバッグを行う上で有用なのではないかと考えています。
また、弊社では、自社製作のAndroid端末を開発していますが、個人レベルでハードウェアまで製作することは非常に困難だと思います。しかし、ソフトウェアレベルであれば、世界に一つだけの端末を作る…等とった事も可能です。