Android のソースのダウンロードとビルドの手順
ここ最近 Android のソースをダウンロードしてビルドする必要があったのですが、思いっきり環境構築の手順で躓いたので備忘録として手順を残しておきます。いろいろ教えて貰ったり調べたりしましたが、整える環境によって苦労の度合いが違うようです。今回は最も不都合が少ない推奨環境でのビルドについて説明します。
今回整える環境は下記の通りです。
- VirtualBox 4.2.1
- ubuntu-10.04.4-desktop-amd64
- jdk-6u35-linux-x64.bin
- android-4.0.3_r1
- android-sdk-4.0.3_r1
VirtualBox 4.2.1 で Ubuntu 10.04 desktop(64bit)環境を構築する
Android のソースビルドを最も簡単に行うには、OS として Ubuntu 10.04 desktop(64bit)を用いる必要があります。この環境をメインの OS とするわけにもなかなか行かないと思うので、ここは無料で仮想 OS 環境を構築可能な VirtualBox を用いることとします。
まずはダウンロードに時間のかかる Ubuntu 10.04.4 desktop(64bit版) をダウンロードします。
次に VirtualBox をダウンロードします。https://www.virtualbox.org/wiki/Downloads からお使いのホスト OS にあわせたソフトウェアを選択してダウンロードしてインストールを行います。
- http://download.virtualbox.org/virtualbox/4.2.0/VirtualBox-4.2.0-80737-Win.exe
- http://download.virtualbox.org/virtualbox/4.2.0/VirtualBox-4.2.1-80871-OSX.dmg
次に仮想マシンを作成して Ubuntu 10.04.4 をインストールします。インストール手順については、MacのVirtualBoxにLinuxのUbuntuをインストールする方法 / Inforati の説明が丁寧でわかり易かったので、参考にしください。
注意点として、仮想マシンの資源設定としてメモリ容量は 1024MB 以上、DISK 容量は可変設定で 30GB 以上を指定してください。Android の再コンパイルで 29GB 以上のディスク容量が必要になることを確認しております。VirtualBox で 100GB 設定にしても実用容量分しか実 HDD 容量を消費しないので大きめのサイズを設定しておくことをおすすめします。
上記作業完了後に、dkms と入れておくと、カーネルのアップデートがあっても自動的に VirtualBox 用のドライバを設定してくれたり便利なので、下記コマンドでインストールしておきます。
sudo apt-get install dkms
ここまでで、OS のインストール、Guest Additions のインストール&画面解像度の設定が完了です。
jdk-6u35-linux-x64.bin のインストール
Android 公式のページでは下記のように記述されていますが、java が Oracle に買収される前の情報なので忘れてください。
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
まずは Oracle の配布サイトより Java SE Development Kit 6 をダウンロードします。ライセンス規約の同意として「Accept License Agreement」にチェックをし、jdk-6u34-linux-x64.bin をクリックしてダウンロードします。
ダウンロードが完了したら以下のコマンドを実行してインストール正常性を確認します。java のバージョンが出力されれば成功です。
cd /usr/lib sudo mkdir jvm cd jvm sudo sh <ダウンロードディレクトリ>/jdk-6u34-linux-x64.bin sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_6u34/bin/java 1 sudo echo ' JAVA_HOME=/usr/lib/jvm/jdk1.6.0_34 PATH=$PATH:$JAVA_HOME/bin CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH ' >> /etc/bash.bashrc source /etc/bash.bashrc java -version
ビルドに必要なパッケージのインストール及び各種設定
次に Android のビルドに必要なパッケージ類をインストールします。
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 lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc
Linux システムのデフォルトのままでは一般ユーザーは標準では USB デバイスにアクセスすることができません。システム的にアクセスを許可するように構成する必要があります。
/etc/udev/rules.d/51-android.rules を root ユーザとして作成して、下記に示す手順で設定内容を記述します。設定内容としては、端末メーカーごとのベンダーIDとパーミッションを設定しています。ベンダーIDは下記ページから取得することができます。
Using Hardware Devices | Android Developers
sudo echo ' SUBSYSTEM=="usb", ATTR{idVendor}=="0502", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="413c", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0489", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="091e", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="109b", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="2116", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0482", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="17ef", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0409", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="2080", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0955", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="2257", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="10a9", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="1d4d", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0471", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="04da", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="054c", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="2340", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="0930", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666" ' > /etc/udev/rules.d/51-android.rules sudo chmod a+r /etc/udev/rules.d/51-android.rules sudo restart udev
続いてビルド作業の効率化の設定を行います。コンパイラ・キャッシュの仕組みとして ccache を用いてコンパイルをスピードアップする設定を行います。必要な環境変数を設定して反映させます。
echo ' export USE_CCACHE=1 export CCACHE_DIR=/home/test/tmp export PATH=$PATH:~/bin ' >> /etc/bash.bashrc source /etc/bash.bashrc
Andloid、SDK のソースを取得
Android のソースは git によりリポジトリ管理されています。ソース取得には複数の git リポジトリを効率的に扱うための repo コマンドを用います。下記の手順に従って repo コマンドのインストールおよびソースの取得を行います。
mkdir ~/bin PATH=~/bin:$PATH curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo chmod a+x ~/bin/repo mkdir WORKING_DIRECTORY cd WORKING_DIRECTORY repo init -u https://android.googlesource.com/platform/manifest repo init -u https://android.googlesource.com/platform/manifest -b android-sdk-4.0.3_r1 repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1 repo sync
Android ソースコードのビルド
repo sync により必要なソースファイルのダウンロードが完了したら下記の手順にしたがってビルド準備のための環境設定およびビルドを行います。make によるビルド作業は mac book Air 上の VirtualBox で概ね3時間ほど時間を要しました。ここまで正しく環境設定ができていればコンパイル作業が進みますので完了するまで気長に待ちます。
ビルドされた実行ファイルは WORKING_DIRECTORY/out 配下に出力されます。
source build/envsetup.sh lunch full-eng make -j4
以上で Android のソースファイルのダウンロードおよびビルドまでの手順の説明はおしまいです。まだまだ僕もこの分野は勉強し始めの身なので、間違い、さらに良い手順などご指摘等あれば是非お願いします。
コメントやシェアをお願いします!