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

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

現在のターゲットを確認するには、次のコマンドを実行します。

echo "$TARGET_PRODUCT-$TARGET_RELEASE-$TARGET_BUILD_VARIANT"

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

lunch product_name-release-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 デバイスのコードネームのリストについては、デバイスのコードネームをご覧ください。
  • releasetrunk_staging に設定します。

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

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

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

コードをビルドする

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

$ m

最初の出力として、ターゲットとビルド環境の概要が表示されます。

============================================
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
============================================

ビルドの出力は $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 を削除します。