CentOS7でAndroid4.4（AOSP）ビルド環境

CentOS7で一からAndroid（AOSP）のビルド環境を構築した際の方法です。

##CentOSの環境構築
###OSのインストール
今回はVMWareにCentOS7(64bit)をインストールしました。
基本的にはデフォルトままでインストールしていますので紹介は割愛しますが、**ネットワークの設定**は忘れずに行ってください。（後で設定するのが面倒なため）
wgetやgitなどでファイルのダウンロードがあるため、ネットワーク設定は必須です。
固定IPを割り振っておくとsshでのアクセスの際に楽です。

###パッケージの導入
インストールしたばかりだと、設定に必要なパッケージもありません。
まずは、以下のパッケージをyumでインストールします。

`yum -y install wget zip unzip git bc perl-Git gcc gcc-c++`

###JavaSDKの導入
Oracle Java 6を入れます。
Lollipop以降のビルドを行う場合は、Oracle Java 7を導入してください。
[http://www.oracle.com/technetwork/java/javase/downloads/index.html](http://www.oracle.com/technetwork/java/javase/downloads/index.html)

`./jdk-6u45-linux-x64-rpm.bin -noregister
update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_38/bin/javac 50000
update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_45/bin/java 50000
update-alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.6.0_45/bin/javaws 50000
update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.6.0_45/bin/javap 50000
update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_45/bin/jar 50000
update-alternatives --install /usr/bin/jarsigner jarsigner /usr/java/jdk1.6.0_45/bin/jarsigner 50000
update-alternatives --install /usr/bin/javadoc javadoc /usr/java/jdk1.6.0_45/bin/javadoc 50000`

###ビルドに必要なパッケージを導入する
Androidのツールがi686用のため関連するライブラリをインストールします。
`yum -y install libstdc++.i686 libgcc.i686 libxml2.i686 glibc.i686 nss-softokn-freebl.i686 zlib.i686`

###その他ビルドで必要なパッケージを導入
ビルド時に必要と言われた以下のパッケージを導入します。
`yum -y bison flex python-mako`

yasmだけyumで導入できなかったので、ソースコードを取得して自分でコンパイルします。
ソースコードの取得は以下から。
[http://www.tortall.net/projects/yasm/releases/](http://www.tortall.net/projects/yasm/releases/)

`wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar zvxf yasm-1.3.0.tar.gz 
cd yasm-1.3.0
./configure
make
make install`

これで下準備は完了です。

##ソースコードを取得する
Android(AOSP)のGitからソースコードを取得します。
`curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
mkdir android
cd android
repo init -u https://android.googlesource.com/platform/manifest -b android-4.4.4_r2
repo sync`

初回のダウンロードにはとても時間が掛かります。寝る前に仕掛けて翌朝確認のつもりが良いと思います。
一度ダウンロードしたソースコードはtarなどで固めてバックアップを取っておくと良いです。

##ビルドする
`cd android
source build/envsetup.sh
lunch`

この時点で以下のようにどの規格向けでビルドするか聞かれます。
今回は、arm用の設定を使いました。

`You're building on Linux
Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_x86-eng
     3. aosp_mips-eng
     4. vbox_x86-eng
     5. aosp_deb-userdebug
     6. aosp_flo-userdebug
     7. aosp_grouper-userdebug
     8. aosp_tilapia-userdebug
     9. mini_armv7a_neon-userdebug
     10. mini_mips-userdebug
     11. mini_x86-userdebug
     12. aosp_hammerhead-userdebug
     13. aosp_mako-userdebug
     14. aosp_manta-userdebug
Which would you like? [aosp_arm-eng] 1`


これで設定が完了したので、あとはmakeするだけです。-j4は並列処理をする数を指定します。

`make -j4`

私の環境だと4コア4スレッドのなので、-j4にしています。-j8とかも試しましたが、メモリ不足に陥ったりしました。
10GB以上のメモリをVMに割り振っているなら-j8なども試してみると良いと思います。

ビルドにはかなりの時間が掛かります。
寝る前に仕掛けて翌朝確認くらいのつもりでいましょう。

ビルドが完了すると、out/target/productの下にlunchで設定した規格の関連ファイル一式が出来上がっています。


##参考文献
* [CentOS 6でAndroid-x86 4.4 Kitkatをビルドしたときのメモ - Qiita](http://qiita.com/t-yuki/items/d0e2561fb883d7b040cb)
* [Initializing a Build Environment | Android Open Source Project](https://source.android.com/source/initializing.html)