11/06/2015

Ubuntuで、Android本体(Android Open Source Project)のソースコードをビルドしてみる

AndroidのOS基本部分はソースが公開されていることは、ご存じの方も多いと思いますが、最近ちょっと、Androidのアーキテクチャをリサーチしてみたり、手を加えてみたい欲求が出てきたので、ソースコード取得&ビルドまでをやってみる。の記録。

本家ページは以下。手順も書いてある。
http://source.android.com/source/index.html


サポートされている開発環境は、Ubuntu14.04 or Macで、メモリー16GB、ディスク100GB以上(ソース)、ビルドするなら150GB〜200GBいるとか書いてある。

うちには、そんな贅沢なスペックのマシンはありません。でもやる。最近中古で買ったメインマシンのHP Spectre(Ivy Bridge)がメモリー4GB、SSD250GBと、きわどいスペックですが、きっとビルド遅いだけで済むでしょう。Windows10マシンとして使っていたところ、急遽Ubuntu14.04 64bitをインストール。ハードウェアも、ほどよく枯れているので、とくにトラブルもなく快適動作。SkylakeのPCほしー。コスパ的に私が買うのは2年後の中古かなー。


まずは、要るものインストール

JDKから

$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk



別のJDKをデフォルトにしている人は以下で、切り替える

$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac

なんだか、OpenJDK使えとな。Oracleのじゃなくて。ここはとりあえず、従っておく。Googleさんのスタンスとして、このへんどうなんだろう。AndroidStudioだとOracleのリンクが指定されていたり。AOSPは、別扱いなのだろうか。まあ、今はいいや。今度、ちゃんとドキュメントちゃんと読みます。


コンパイルに必要なものをインストール

$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip


USBでAndroidデバイスを認識できるようudev設定追加。ハードウェアにデプロイしないのなら要らないと思われ。

$ wget -S -O - http://source.android.com/source/51-android.rules | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules


ソースをダウンロードするのに、repoというコマンドを使うので、その下ごしらえ

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo


ソースを取得するディレクトリ作成。私はとりあえずaospとしましたが、好きな名前でOKです。

$ mkdir aosp
$ cd aosp


repo初期化

$ repo init -u https://android.googlesource.com/platform/manifest


ブランチ指定したい人は、以下のように指定。ブランチ一覧はここを参考に。

$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

ソース取得

$ repo sync


家のネット環境がイモ(Wimax)なせいか、頻繁にエラーで中断される。何度かやり直して、Done。
この時点でソースの総容量が、約13GB、うーん。推奨環境では100GBという話だったが、ちゃんと全部取得できてるんやろか。

とりあえず、ビルドまで通してみる。

$ source build/envsetup.sh
$ lunch aosp_arm-eng

引数のビルドタイプはプロセッサアーキやハードウェアの指定+user, userdebug, engとある。eng(多分エンジニアリングとかの意と思われ)はデバッグ可能な開発者向けビルド的なやつっぽ。タブで補完すれば、指定可能なオプションが確認できる。

現時点で選択可能なのは以下だった。

aosp_angler-userdebug
aosp_arm-eng
aosp_arm64-eng
aosp_bullhead-userdebug
aosp_deb-userdebug
aosp_flo-userdebug
aosp_flounder-userdebug
aosp_fugu-userdebug
aosp_hammerhead-userdebug
aosp_hammerhead_fp-userdebug
aosp_mips-eng
aosp_mips64-eng
aosp_shamu-userdebug
aosp_x86-eng
aosp_x86_64-eng
full_fugu-userdebug
m_e_arm-userdebug
mini_emulator_arm64-userdebug
mini_emulator_mips-userdebug
mini_emulator_x86-userdebug
mini_emulator_x86_64-userdebug



$ make -j4

知ってる人は多いと思いますが、-j4は並列コンパイルのスレッド数を指定。ホストマシンのコア数によって加減する。当然、多くすれば、コンパイルが早いが、マシン性能を超えて指定しても、早くはならない。一般にコア数の2倍程度が良好とされるが(昔の目安)、最近は4コア8スレッドとか、物理コア1つにつき、ハイパースレッディングで仮想コア2つみたいなアーキになってきたりしてるので、そのあたりも踏まえて、自分のマシンで、いろいろ試して、いい感じの並列数を探すのがいいのかもしれない。

で、ビルドが、なんとか終わる、正確に測ってなかったが、 Core i7-3517U  1.90GHz (2Core, 4Thread) のCPUで、-j4オプションで、約4時間くらい。

早速、実行してみる。実機デバイスに焼くというてもありますが、今、デプロイしちゃっていい端末や、開発ボードもないので、エミュレーターで起動させてみる。

$ emulator





なんとも言えない、やっちまった感漂うブートスプラッシュの趣。



うーん。なんだか、しょぼいホーム画面です。Nexus5を愛用してるので、それに近いものが出てくると勝手に予想してましたが、思いの外、オープンソースになってる部分だけでは、しょぼい感じのようです。ビルド指定が、ただのarmだからだろうか。hammerhead(nexus5のコードネーム)というビルドオプションもあるので、次はそれでやってみようかな。


ちょっと、目を疑ったので、ビルド情報確認。

Android6.0で、ビルドナンバーには今日の日付と、私の名前入ってます。どうやら、私がビルドしたものに間違いないようです。

ちなみに、ビルド後の作業ディレクトリの総容量は約41GBでした。ごにょごにょしていくと増えていくんでしょうが、思ったほどでかくなくて、助かりました。最近、ラップトップの内蔵ストレージが、SSDやeMMCになって容量あたりのコスト高いですからねえ。足りなくなりがち。 とりあえず、当初の目標であるソース取得からビルドまでは、無事できましたので、これからイジって行きたいと思います。

今回はこんなところで。



0 件のコメント:

コメントを投稿