Android のビルド

Android をビルドする際は、このページの手順に従ってください。

ビルド環境を設定する

作業ディレクトリ内から、envsetup.sh スクリプトをソースとしてビルド環境を設定します。

source build/envsetup.sh

このスクリプトは、Android ソースコードの操作を可能にする複数のコマンド(このページで使用するコマンドを含む)をインポートします。スクリプトのソースを表示するには、platform/build/envsetup.sh を参照してください。組み込みヘルプを表示するには、hmm と入力してください。

ターゲットを選択する

Android をビルドする前に、ビルドするターゲットを特定する必要があります。ターゲットは、ビルドする対象のターゲット プラットフォームを反映します。ビルドするターゲットを特定するには、lunch コマンドの後にターゲットを表す文字列を指定します。次に例を示します。

lunch aosp_cf_x86_64_phone-trunk_staging-userdebug

ターゲットとビルド環境の概要が表示されます。

============================================
PLATFORM_VERSION_CODENAME=VanillaIceCream
PLATFORM_VERSION=VanillaIceCream
PRODUCT_INCLUDE_TAGS=com.android.mainline
TARGET_PRODUCT=aosp_arm
TARGET_BUILD_VARIANT=eng
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=generic
HOST_OS=linux
HOST_OS_EXTRA=Linux-6.5.13-1rodete2-amd64-x86_64-Debian-GNU/Linux-rodete
HOST_CROSS_OS=windows
BUILD_ID=AOSP.MAIN
OUT_DIR=out
============================================

この文字列では、ターゲットを次の形式で指定しています。

lunch product_name-release_config-build_variant

この文字列の各構成要素について説明します。

  • product_name は、ビルドする製品の名前(aosp_cf_x86_64_phoneaosp_husky など)です。product_name は製品に応じて独自の形式で指定できますが、Google が使用する形式は以下の要素で構成されています。

    • aosp は、Android オープンソース プラットフォームを表します。
    • cf(省略可)は、ターゲットを Cuttlefish エミュレータ内で実行したい場合に指定します。
    • アーキテクチャとハードウェア(コードネーム)、たとえば x86_64_phonehusky(Google Pixel 8 Pro のコードネーム)。Google デバイスのコードネームのリストについては、デバイスのコードネームをご覧ください。
  • release_config には、リリース構成を設定します。たとえば、trunk_staging と呼ばれる開発用リリース構成などです。リリース構成は、機能リリースフラグが使用されていて、ビルドで有効または無効にされる特定の機能とコードを識別します。リリース構成について詳しくは、機能リリースフラグの値を設定するをご覧ください。

  • 文字列の build_variant 部分には、次の表に示す 3 つの値のいずれかを指定します。

    build_variant 説明
    user 制限されたセキュリティ アクセスを提供するビルド バリアントで、本番環境に適しています。
    userdebug デバイス デベロッパーが、開発中のリリースのパフォーマンスや機能を把握するためのビルド バリアントです。userdebug ビルドを使用して開発を行う場合は、userdebug のガイドラインに従ってください。
    eng このビルド バリアントは、ビルドに要する時間が短いため、パフォーマンスや機能を把握する必要のない日々の開発に最適です。

lunch を引数なしで実行すると、一般的なターゲットのリストが表示されます。このページの情報とデバイスのコードネームに記載の Google ハードウェアを表すコードネームを使用し、ターゲット文字列の要素をつなぎ合わせることで、独自のターゲット文字列を作成することもできます。

現在のターゲットを確認する

現在の lunch 設定を確認するには、次のコマンドを実行します。

$ echo "$TARGET_PRODUCT-$TARGET_BUILD_VARIANT"

コードをビルドする

ターゲットをビルドするには、次のコマンドを実行します。初回のビルドにかかる時間はワークステーションの仕様によって異なり、1 時間以内で終わる場合もあれば数時間かかることもあります。その後のビルドでは、所要時間は大幅に短縮されます。

m

ビルドの出力は $OUT_DIR に保存されます。いくつかのターゲットをビルドする場合、それぞれのビルドは $OUT_DIR に保存されます。

m コマンドは、ツリーの最上部からビルドします。したがって、m コマンドはサブディレクトリ内から実行できます。m コマンドは、TOP 環境変数が設定されていればそれを使用します。TOP が設定されていない場合、m コマンドは現在のディレクトリからツリーを検索し、ツリーの最上部の特定を試みます。

m コマンドは、-jN 引数を使用して並列タスクを処理できます。-j 引数を指定しない場合、ビルドシステムはシステムに最適と思われる並列タスク数を自動的に選択します。

デバイス イメージ全体ではなく特定のモジュールをビルドするには、m コマンドラインにモジュール名を指定します。また、m コマンドは「ゴール」と呼ばれる疑似ターゲットも提供します。たとえば、m nothing とすると何もビルドされず、ビルド構造の解析と検証のみが行われます。有効なゴールのリストを表示するには m help と入力してください。

ビルドエラーのトラブルシューティング(8.0 以前)

AOSP 8 以前のビルドでは、Java のバージョンの問題により m コマンドが中断されることがあります。たとえば次のようなメッセージが表示されます。

************************************************************
You are attempting to build with the incorrect version
of java.

Your version is: WRONG_VERSION.
The correct version is: RIGHT_VERSION.

Please follow the machine setup instructions at
    https://source.android.com/source/initializing.html
************************************************************

考えられる原因と解決策は次のとおりです。

  • AOSP 開発用セットアップ(2.3~8.0)の JDK セクションで指定されている JDK が正しくインストールされていない。
  • パスにおいて、以前インストールした別の JDK が先に出現する。正しい JDK をパスの先頭に追加するか、問題のある JDK を削除します。