はじめに
Android Kernelをビルドしました.
かなり面倒でした.
環境はUbuntu15.10です.
android-sdkのインストール
Installing the Android SDK|Android Developersから最新のSDKをダウンロードする.
~/android以下にインストール.
特定のSDKのバージョンをインストールしたい時はandroidコマンドから管理ができるのでご安心を.
$ export PATH=~/bin:$PATH # repo command
$ export PATH=~/android/tools # android, emulator command
$ export PATH=~/android/platform-tools # adb command
ビルド環境の設定
emulatorのパスがbashの設定に書き込まれるのでbashで作業を
行うことを推奨.
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
RepoはGit上に構築されたツールで,多数のGitレポジトリの管理を容易にする.
そのため,Android開発においてはrepoコマンドが推奨される.
ソースコードのダウンロード
androidのソースコードはandroid Git repositoriesで管理されている.
Refs-platform/manifestから自分のビルドしたいブランチを探す.
repoコマンドでソースコードを取ってくることになるが,
今後同期するときにできるだけネットワークを介さないように
あらかじめローカルにミラーをとっておく.
(全リポジトリ合わせて数十GBととても長大である)
ミラーをローカルに作成.
$ mkdir -p /usr/local/aosp/mirror
$ cd /usr/local/aosp/mirror
$ repo init -u https://android.googlesource.com/mirror/manifest --mirror
$ repo sync -j8
ローカルのミラーからソースを取得
$ mkdir -p /usr/local/aosp/master
$ cd /usr/local/aosp/master
$ repo init -u /usr/local/aosp/mirror/platform/manifest.git -b master
$ repo sync -j8
本家のリポジトリと同期したい場合はローカルのミラーリポジトリのディレクトリでrepo sync
すれば良い.
$ cd /usr/local/aosp/mirror
$ repo sync
キャッシュの使用
ビルド後のサイズはとてつもなく大きくなるし,それだけあってビルドの時間もかかる.
今後ビルドを繰り返すときに待ち時間を減らすためにCCACHEを使う.
$ export USE_CCACHE=1
$ mkdir /usr/local/aosp/master/.ccache
$ export CCACHE_DIR=/usr/local/aosp/master/.ccache
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
コードのビルド
lunchコマンドでは[機種]_[アーキテクチャ]-[デバッグ指定]のようにビルドの設定ができる.
fullとaospが選べるが違いは工場出荷相当か開発段階かということである.
KVMサポートはホストとゲストのアーキテクチャが同じ時のみ有効になるのでx86を選択した.
デバッグレベルはengが最高なのでengを選んだ.
$ source build/envsetup.sh
$ lunch aosp_x86-eng
$ make -j8
ビルドのテスト
エミュレータを起動しよう.
$ emulator -qemu -m 512 -enable-kvm
エミュレータを起動中以下のコマンドをうつことでシェルが起動する.
$ adb shell