Androidのソースをビルドする (cupcake)

システム3部鈴木です。

今後ソースに変更があった場合に対応できるよう、Androidをソースからコンパイルする方法を説明します。このエントリーではAndroid1.5(cupcake)を対象にしています。

開発環境の用意

Armadilloで動作するバイナリをビルドするには、@テクノが提供しているATDEという開発環境を使用します。
下記のサイトからダウンロードします。VMWareのイメージになっています。
Armadillo-500 FXダウンロード

ただ、このVMイメージはメモリが256MB、HDDが8GBなので、ビルドに時間がかかりますし、ソースを色々とDLすると、ディスクが一杯になってしまいます。
そこで、たとえばVMX Builderというツールを使用して、メモリの割り当てを増やし、ディスクを追加しておくと良いかと思われます。
VMX Builder Download
追加したディスクはext3でフォーマットし、/etc/mtabに追記しておくとマウントの手間が省けます。

セットアップは上記のサイトにある「FX液晶モデル – ソフトウェアマニュアル」というPDFファイルを参照してください。
「3.2. atmark-dist のビルドに必要なパッケージ」という項も確認して、必要なパッケージを最新にしておいてください。

なお、製品同梱のCDに含まれるファイルは上記のサイトのものよりだいぶ古いので、マニュアル中で「CDに入っている」と記載のあるものは上記サイトからDLしたもので代用するのが良いでしょう。

Androidユーザーランドをビルドしてみる

まず、Androidをビルドするために必要なパッケージを用意します。「開発環境の用意」で用意したDebianの環境で、下記のパッケージをインストールします。

# apt-get install flex bison gperf libsdl-dev libesd0-dev \
libwxgtk2.6-dev build-essential zip curl valgrind
# apt-get install unzip zlib1g-dev

次に、sun-java5-jdkをインストールするのですが、私の環境ではsoueces.listにnon-freeを追加してもsun-java6-jdkしか見つからなかったので、sunのサイトからダウンロードしました。
なお、sun-java6-jdkだとAndroidのソースのビルド中に警告が出て、続行できません。
Java SE ダウンロード – Previous Release – JDK 5
最新のJDK(現在はJDK 5.0 Update 20)をDLします。
プラットフォームはLinuxで、rpm形式のバイナリをDLしてください。
jdk-1_5_0_20-linux-i586-rpm.binをDLした事として、説明を続けます。

DLしたファイルに下記の操作を行い、jdk-1_5_0_20-linux-i586.rpmファイルを取り出します。

$ chmod +x jdk-1_5_0_20-linux-i586-rpm.bin
$ ./jdk-1_5_0_20-linux-i586-rpm.bin

できればDebianのパッケージ管理ツールで管理できるようにしたいので、.deb形式に変換します。
jdk_1.5.0_20-1_i386.debというファイルが出来上がります。

$ alien --scripts jdk-1_5_0_20-linux-i586.rpm

gdebiというツールでローカルのdebファイルをインストールできます。
アンインストールは「Synaptic パッケージマネージャ」など、標準的なツールで行えます。

# gdebi jdk_1.5.0_20-1_i386.deb

次はgit-coreです。既にインストールされているのですが、バージョンが古く、また、普通にapt-getで更新をかけても、1.5.4 以上になってくれません。
リポジトリにbackportsを追加する必要があります。
sources.listにリポジトリを追記して、インストールを行います。

# vi /etc/apt/sources.list
deb http://www.backports.org/debian/ etch-backports  main
deb-src http://www.backports.org/debian/ etch-backports  main
# apt-get update
# apt-get install debian-backports-keyring
# apt-get update
# apt-get -t etch-backports install git-core

次に、Androidのソースを取得し、ビルドします。
atmarkユーザのホームディレクトリで作業するものとして説明を続けます。

ソースを入手するために、repoというツールを~/binにインストールします。

$ mkdir bin
$ PATH=$PATH:/home/atmark/bin
$ curl http://android.git.kernel.org/repo >~/bin/repo
$ chmod a+x ~/bin/repo

ソースをDLするディレクトリを用意します。名前は自由に付けてください。

$ mkdir mydroid
$ cd mydroid

Android1.5(cupcake)のコードリストを取得します。
成功すると、YOUR NAME と Gmailアカウントを要求されます。
実在するGmailアカウントを入力してください。

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

ソースコードを取得します。2GB以上あり、時間がかかるので、気長に待ってください。

$ repo sync

makeの前に、取得したソースに対して、バッテリーの残量を調べるモジュールを修正します。
この作業を行わないと、Androidの起動直後にバッテリーの残量が無いと言われて、起動できません。
下記のサイトで詳しく解説して下さっていますので、「3.3.2 Batteryパッチ」の項に従ってファイルの修正を行ってください。
Android自社端末作成中 – ブリリアントサービス

修正が完了したらmakeします。

$ make

makeが完了したら、Armadilloに転送するためのファイルを作成します。
下記のディレクトリに移動して、中身を確認してください。

$ cd ~/mydroid/out/target/product/generic/
$ ls

rootというディレクトリがAndroidユーザーランドになります。
ただ、root/systemの中が空なので、…/generic/sysytem ディレクトリをコピーします。

$ cp -r ./system ./root/

キーレイアウト、キーマップのファイルのアクセス権を変更します。
これを行わないとボタンが効きません。全部backボタンのような動作をしてしまいます。
(keylayoutのほうは変更する必要が無いかもしれません)

$ chmod 0777 ./root/system/usr/keychars/* ./root/system/usr/keylayout/*

起動スクリプト等を変更します。
Android1.5を動かしてみる」でDLしたAndroidユーザーランドのtarファイルを展開し、作成されたディレクトリ直下に、起動スクリプトファイルがあるので、root直下にコピーします。
ここでは、展開後のディレクトリを~/androidとします。

$ cp ~/android/init.rc ./root

rootディレクトリをアーカイブして完成です。
(rootディレクトリを適当なところにコピーして、名前を変更したほうがいいかもしれません。cupcake等)

$ tar czf mydroid.tar.gz ./root

後は「Android1.0を動かしてみる」を参考に、
AndroidユーザーランドをArmadilloに展開してください。
wgetではなく、FTPでArmadilloにファイルを転送・展開すると良いと思われます。

タグ:

コメント / トラックバック1件

  1. Buffee より:

    Wow, this is in every repcset what I needed to know.

コメントをどうぞ