ビルド環境の構築

このセクションでは、Android ソースファイルをビルドするためのローカル作業環境の設定方法について説明します。Linux または macOS を使用する必要があります。現在 Windows でのビルドはサポートされていません。

コードレビューおよびコード更新プロセス全体の概要については、パッチのライフサイクルをご覧ください。

ブランチの選択

ビルド環境の要件の一部は、コンパイルするソースコードのバージョンによって決まります。利用可能なブランチの完全なリストについては、ビルド番号をご覧ください。また、最新のソースコード(master と呼ばれます)をダウンロードしてビルドすることもできます。その場合、リポジトリを初期化するときのブランチの指定は不要です。

ブランチを選択したら、以下の手順に従ってビルド環境を設定します。

Linux ビルド環境の設定

下記の手順は、master を含むすべてのブランチに適用されます。

Android ビルドは、組織内で定期的に Ubuntu LTS(14.04)と Debian のテストを受けています。その他のほとんどのディストリビューションでは、利用可能なビルドツールを用意する必要があります。

master ブランチを含む Gingerbread(2.3.x)以降のバージョンでは、64 ビット環境が必要です。古いバージョンは 32 ビットシステムでもコンパイル可能です。

必須パッケージのインストール(Ubuntu 14.04)

64 ビット版の Ubuntu が必要です(14.04 を推奨します)。

    sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
    

必須パッケージのインストール(Ubuntu 12.04)

Ubuntu 12.04 を使用して、古いバージョンの Android をビルドできます。バージョン 12.04 は、master リリースまたは最近のリリースではサポートされていません。

    sudo apt-get install git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
    sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
    

必須パッケージのインストール(Ubuntu 10.04~11.10)

Ubuntu 10.04~11.10 でのビルドはサポートが終了しましたが、古い AOSP のリリースのビルドに役立つ場合があります。

    sudo apt-get install git 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
    

Ubuntu 10.10 の場合:

    sudo ln -s /usr/lib32/mesa/libGL.so.1 /usr/lib32/mesa/libGL.so
    

Ubuntu 11.10 の場合:

    sudo apt-get install libx11-dev:i386
    

USB アクセスの構成

開発用デバイスのセットアップの手順に従い、すべての Android デバイスに対して、コミュニティが管理するデフォルトの udev ルールセットをインストールします。

個別の出力ディレクトリの使用

デフォルトでは、各ビルドの出力は、一致するソースツリーの out/ サブディレクトリに格納されます。

複数のストレージ デバイスを備えたマシンの中には、ソースファイルと出力を別々のボリュームに保存するとビルドが高速になるものもあります。ファイル システムが破損してもすべてのファイルを再生成できるので、クラッシュに対する堅牢性より速度を重視して最適化されたファイル システムに出力を保存し、パフォーマンスを高速化できます。

そのように設定するには、出力ディレクトリを保存する場所を指定して OUT_DIR_COMMON_BASE 変数をエクスポートします。

    export OUT_DIR_COMMON_BASE=<path-to-your-out-directory>
    

それぞれのソースツリーの出力ディレクトリは、ソースツリーを保持するディレクトリにちなんで名付けられます。たとえば、ソースツリー /source/master1 および /source/master2 があり、OUT_DIR_COMMON_BASE/output に設定されている場合、出力ディレクトリは /output/master1 および /output/master2 になります。

同じ名前のディレクトリに複数のソースツリーを格納しないでください。ソースツリーが出力ディレクトリを共有することになり、予測できない結果が生じます。これは、master ブランチを含む Jelly Bean(4.1)以上のみでサポートされています。

macOS ビルド環境の設定

デフォルト インストールでは、macOS は、大文字 / 小文字を保持するが区別しないファイル システムで実行されます。このタイプのファイル システムは Git でサポートされていないため、一部の Git コマンド(git status など)は異常な動作をします。このため、AOSP ソースファイルは、大文字と小文字を区別するファイル システムで常に処理することをおすすめします。これは、以下で説明するディスク イメージを使用して非常に簡単に実行できます。

適切なファイル システムが利用可能な場合、最新の macOS 環境で簡単に master ブランチをビルドできます。それより前のブランチでは、いくつかの追加ツールと SDK が必要です。

大文字と小文字を区別するディスク イメージの作成

ディスク イメージを使用して、既存の macOS 環境で大文字と小文字を区別するファイル システムを作成できます。ディスク イメージを作成するには、ディスク ユーティリティを起動し、[新規イメージ] を選択します。ビルドを完了するために最低限必要な空き容量は 25 GB ですが、今後の増加を考慮して、それより多くの容量を確保することをおすすめします。スパース イメージを使用すると、容量を節約しつつ、必要に応じて拡張できます。ボリューム形式として [大文字 / 小文字を区別、ジャーナリング] を選択します。

次のコマンドを使用して、シェルからファイル システムを作成することもできます。

    hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
    

これにより、.dmg(場合によっては .dmg.sparseimage)ファイルが作成されます。このファイルがマウントされると、Android 開発に必要な形式でフォーマットされたドライブとして機能します。

後でより大きなボリュームが必要になった場合は、次のコマンドでスパース イメージのサイズを変更できます。

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
    

ホーム ディレクトリに保存された android.dmg という名前のディスク イメージについて、下記のように、~/.bash_profile にヘルパー関数を追加できます。

  • mountAndroid を実行する際にイメージをマウントするには、次のようにします。
    # mount the android file image
        mountAndroid() { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
  • umountAndroid を実行する際にマウントを解除するには、次のようにします。
    # unmount the android file image
        umountAndroid() { hdiutil detach /Volumes/android; }

android ボリュームをマウントした後は、すべての作業をその場所で行います。外部ドライブと同様、取り外し(マウント解除)が可能です。

Xcode およびその他のパッケージのインストール

  1. Xcode コマンドライン ツールをインストールします。
    xcode-select --install
    古いバージョンの macOS(10.8 以下)では、Apple のデベロッパー向けサイトから Xcode をインストールする必要があります。Apple デベロッパーとして登録していない場合は、Apple ID を作成して、ダウンロードしてください。
  2. パッケージ管理のために MacPortsHomebrew のいずれかをインストールします。
  3. 関連ディレクトリが ~/.bash_profile ファイル内のパスで以下のようになっていることを確認します。
    1. MacPorts - /usr/bin/opt/local/binに存在する必要がある:
      export PATH=/opt/local/bin:$PATH
    2. Homebrew - /usr/local/bin:
      export PATH=/usr/local/bin:$PATH
    3. MacPorts の場合、次のコマンドを発行します。
      POSIXLY_CORRECT=1 sudo port install git gnupg
    4. Homebrew の場合、次のコマンドを発行します。
      brew install git gnupg2

    ファイル記述子制限の設定

    macOS では、同時にオープンできるファイル記述子数のデフォルト上限が小さすぎるため、高度に並列的なビルドプロセスはこの制限を超える場合があります。上限を増やすには、以下の行を ~/.bash_profile に追加します。

        # set the number of open files to be 1024
        ulimit -S -n 1024

    次のステップ: ソースのダウンロード

    以上でビルド環境の準備が整いました。ソースのダウンロードに進みましょう。