ICS向けAndroidのビルド環境を整える
最近、Galaxy Nexusを手に入れました。
この端末が欲しかった理由は自分専用のカスタムROMを作ること。Android 4.0のリファレンス機だけあって、カスタムROMは作りやすいのです。
とはいえAndroidのソースの入手からビルドを行うのはなかなか困難。
そこでカスタムROM作りの顛末を、自分の備忘録も兼ねてこのブログに残していきます。
あ、お約束ですが注意点。
このブログの記事を真似て端末が起動しなくなった、保証が切れたなどのトラブルが起きても当方では一切責任を負いません。
あくまで自己責任でお願いします。
開発環境
Androidのビルドに使用した環境は次のとおりです。
環境の構築
まずは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
以上で環境構築は終わりです。おつかれさまでした。