電脳戯言記

プログラムのこととか日々のどうでもいいこととかをつらつらと記します。 Twitter ID: @nagakenjs

ICS向けAndroidのビルド環境を整える

最近、Galaxy Nexusを手に入れました。
この端末が欲しかった理由は自分専用のカスタムROMを作ること。Android 4.0のリファレンス機だけあって、カスタムROMは作りやすいのです。
とはいえAndroidのソースの入手からビルドを行うのはなかなか困難。
そこでカスタムROM作りの顛末を、自分の備忘録も兼ねてこのブログに残していきます。

あ、お約束ですが注意点。
このブログの記事を真似て端末が起動しなくなった、保証が切れたなどのトラブルが起きても当方では一切責任を負いません。
あくまで自己責任でお願いします。

開発環境

Androidのビルドに使用した環境は次のとおりです。

ハードウェア

ThinkPad X201s

CPU Intel Core i7 L620 2GHz(論理4コア)
メモリ 8GB
HDD 320GB(うち150GBをLinux用として確保)

HDDは十分な空き容量(50GB程度)を確保しておいてください。
ソースコードとビルドしたバイナリで25GB以上の容量を使います。
また、後述のccacheを使う場合はさらに10〜20GB使います。

ソフトウェア

OS Ubuntu 11.10 64bit
カーネル Linux 3.0.0-16-generic

環境の構築

まずはAndroidをビルドするために必要なアプリケーションやライブラリをインストールします。
基本的にはAOSPのサイトに書いてあるとおりに行いますが、若干手順を変えております。

JDKのインストール

OracleのJDKのサイトより、JDK6をインストールします。記事執筆時のバージョンはJava SE 6 Update 31でしたが、JDK6であれば問題ないと思います。

$ mkdir ~/work
$ cd ~/work
$ wget http://download.oracle.com/otn-pub/java/jdk/6u31-b04/jdk-6u31-linux-x64.bin
$ chmod +x jdk-6u31-linux-x64.bin
$ ./jdk-6u31-linux-x64.bin

以下は.bashrcに記述

export JAVA_HOME=~/work/jdk1.6.0_31
export PATH=$PATH:$JAVA_HOME/bin
export ANDROID_JAVA_HOME=$JAVA_HOME

sourceコマンドで記述内容を反映

$ source ~/.bashrc

ビルドに必要なパッケージのインストール

コンパイラなど必要なパッケージをaptでインストールします。

$ sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline-gplv2-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc
$ sudo apt-get install libx11-dev:i386

USBの設定

Galaxy Nexus用にUSBの設定をします。

$ sudo vi /etc/udev/rules.d/51-android.rules

51-android.rulesに以下を記述する。OWNERの****の部分は自分のユーザー名を指定

# adb protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0600", OWNER="****"
# fastboot protocol on maguro/toro (Galaxy Nexus)
SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e30", MODE="0600", OWNER="****"

追記後、以下のコマンドを実行する。

$ sudo chmod a+x /etc/udev/rules.d/51-android.rules
$ sudo /etc/init.d/udev restart

Android SDKのインストール

adbやfastboot用に必要です。Androidアプリを開発するわけではないので「Android SDK Platform-tools」のみインストールすればOKです。

$ mkdir -p ~/work/android
$ cd ~/work/android
$ wget http://dl.google.com/android/android-sdk_r16-linux.tgz
$ tar xvf android-sdk_r16-linux.tgz
$ ./android-sdk-linux/tools/android

.bashrcに以下を追記

export ANDROID_SDK_HOME=~/work/android/android-sdk-linux
export PATH=$PATH:$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/platform-tools

sourceコマンドで記述内容を反映

$ source ~/.bashrc

ccacheの設定

ccacheを使うと、コンパイル結果をキャッシュしてくれるので2回目以降のビルド時間を短縮することができます。
Androidはccacheに対応し
sourceコマンドで記述内容を反映

$ source ~/.bashrc

ているため、環境変数を設定すれば自動でキャッシュしてくれます。

.bashrcに以下を記述

export USE_CCACHE=1

ccacheは通常、~/.ccacheにキャッシュを保存します。ホームディレクトリに置きたくないという場合は、以下の設定をすることでキャッシュの保存先を変更できます。

.bashrcに以下を記述。ここでは/work/ccacheにキャッシュディレクトリを設定します。

export CCACHE_DIR=/work/ccache

sourceコマンドで記述内容を反映

$ source ~/.bashrc

ccacheのキャッシュディレクトリのデフォルトサイズは1GBと小さいため変更する必要があります。
AOSPのサイトでは50〜100Gほど設定するといいとあるので、ここでは50GBを設定します。
ccacheコマンドはAndroidのソースコード内に含まれています。ソースコードのダウンロード後に以下を実行してください。具体的な方法は改めて説明します。

Androidのソースコードのディレクトリへ移動
$ prebuilt/linux-x86/ccache/ccache -M 50G

repoのインストール

ソースコードのダウンロードや管理に利用するrepoをダウンロードします。

$ mkdir ~/bin
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

.bashrcに以下を記述

export PATH=$PATH:~/bin

sourceコマンドで記述内容を反映

$ source ~/.bashrc

以上で環境構築は終わりです。おつかれさまでした。