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 にあわせたソフトウェアを選択してダウンロードしてインストールを行います。

次に仮想マシンを作成して 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 add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ 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 をクリックしてダウンロードします。

img003.png

ダウンロードが完了したら以下のコマンドを実行してインストール正常性を確認します。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 のソースファイルのダウンロードおよびビルドまでの手順の説明はおしまいです。まだまだ僕もこの分野は勉強し始めの身なので、間違い、さらに良い手順などご指摘等あれば是非お願いします。

- スポンサーリンク -