次の手順に従って、Android の構築を開始します。
環境のセットアップ
envsetup.sh
スクリプトを使用して環境を初期化します。
source build/envsetup.sh
また
. build/envsetup.sh
関連するコマンドの説明については、 platform/build/envsetup.shのスクリプトを参照してください。これには、デバイス ターゲットを選択するためのlunchや、リファレンス TV アプリなどのバンドルされていないアプリを構築するためのタパスが含まれます。
そのスクリプトへの変更を取得するには、 repo sync
のたびにこのコマンドを再発行する必要があります。 source
を に置き換えることに注意してください.
(単一のドット) は数文字を節約し、短い形式はドキュメントでより一般的に使用されます。
envsetup.sh
スクリプトは、この演習で使用するコマンドを含め、Android ソース コードを操作できるようにするいくつかのコマンドをインポートします。
使用可能なコマンドの完全なリストを表示するには、次を実行します。
hmm
ターゲットの選択
ランチ
lunch
でビルドするターゲットを選択します。 lunch product_name - build_variant
は、ビルドする製品としてproduct_nameを選択し、ビルドするバリアントとしてbuild_variantを選択し、それらの選択を環境に保存して、その後のm
および他の同様のコマンドの呼び出しによって読み取られるようにします。
正確な構成を引数として渡すことができます。たとえば、次のコマンドは、すべてのデバッグを有効にして、エミュレーターの完全なビルドを参照します。
lunch aosp_arm-eng
引数なしで実行すると、 lunch
はメニューからターゲットを選択するように求められますが、メニューにはすべての可能性が含まれているわけではないことに注意してください。 AOSP でサポートされているすべてのデバイスのビルド構成については、デバイス ビルドの選択を参照するか、作業中のデバイスの正しいランチについてチームのメンバーに相談してください。
すべてのビルド ターゲットはBUILD-BUILDTYPE
の形式を取ります。ここで、 BUILD
は特定の機能の組み合わせを参照するコード名です。 BUILDTYPE
は次のいずれかです。
ビルドタイプ | 使用する |
---|---|
ユーザー | アクセス制限あり。生産に適した |
ユーザーデバッグ | ユーザーと同様ですが、root アクセス権とデバッグ機能があります。デバッグに推奨 |
英語 | デバッグツールを追加した開発構成 |
userdebug ビルドは、ユーザー ビルドと同じように動作し、通常はプラットフォームのセキュリティ モデルに違反する追加のデバッグを有効にする必要があります。これにより、userdebug ビルドは、より優れた診断機能を備えたユーザー テストに適したものになります。 userdebug ビルドで開発する場合は、 userdebug のガイドラインに従ってください。
eng ビルドは、プラットフォームで作業するエンジニアのエンジニアリングの生産性を優先します。 eng ビルドは、優れたユーザー エクスペリエンスを提供するために使用されるさまざまな最適化をオフにします。それ以外の場合、eng ビルドは user および userdebug ビルドと同様の動作をするため、デバイス開発者はこれらの環境でコードがどのように動作するかを確認できます。
実際のハードウェアでのビルドと実行の詳細については、 Flashing Devicesを参照してください。
タパス
tapas
コマンドは、バンドルされていないアプリのビルドを構成します。 Android ビルド システムによってビルドされる個々のアプリを選択します。 lunch
とは異なり、 tapas
はデバイスのイメージの構築を要求しません。
コマンドの詳細については、 tapas help
を実行してください。
コードの構築
このセクションは、セットアップが完了していることを確認するための簡単な要約です。
m
すべてをビルドします。 m
は、 -jN
引数を使用して並列タスクを処理できます。 -j
引数を指定しない場合、ビルド システムは、システムに最適であると考える並列タスク数を自動的に選択します。
m
上で説明したように、完全なデバイス イメージの代わりに特定のモジュールをビルドするには、 m
コマンド ラインにそれらの名前をリストします。さらに、 m
は特別な目的のためにいくつかの疑似ターゲットを提供します。いくつかの例は次のとおりです。
-
droid
-m droid
は通常のビルドです。デフォルトのターゲットには名前が必要なため、このターゲットがここにあります。 -
all
-m all
は、m droid
が行うすべてのものに加えて、droid
タグを持たないすべてのものをビルドします。ビルド サーバーはこれを実行して、ツリー内にあり、Android.mk
ファイルを含むすべてのものが確実にビルドされるようにします。 -
m
- ツリーの一番上からビルドを実行します。これは、サブディレクトリ内からmake
を実行できるため便利です。TOP
環境変数が設定されている場合は、それが使用されます。そうでない場合は、現在のディレクトリからツリーを検索し、ツリーの最上位を見つけようとします。引数なしm
を実行してソース コード ツリー全体を構築するか、名前を指定して特定のターゲットを構築することができます。 -
mma
- 現在のディレクトリ内のすべてのモジュールとその依存関係をビルドします。 -
mmma
- 提供されたディレクトリ内のすべてのモジュールとその依存関係をビルドします。 -
croot
-cd
のトップに移動します。 -
clean
-m clean
は、この構成のすべての出力ファイルと中間ファイルを削除します。これはrm -rf out/
と同じです。
m help
を実行して、 m
が提供する他の疑似ターゲットを確認します。
ビルドの実行
エミュレーターでビルドを実行するか、デバイスでフラッシュすることができます。既にlunch
でビルド ターゲットを選択しているため、ビルドされたターゲットとは異なるターゲットで実行される可能性はほとんどありません。
fastboot によるフラッシュ
デバイスをフラッシュするには、 fastboot
を使用します。これは、ビルドが成功した後にパスに含まれている必要があります。手順については、デバイスのフラッシュを参照してください。
Android デバイスのエミュレート
エミュレーターは、ビルド プロセスによって自動的にパスに追加されます。エミュレーターを実行するには、次のように入力します。
emulator
ビルド フィンガープリントについて
特定の Android ビルドに関連する問題を追跡して報告するには、ビルド フィンガープリントを理解することが重要です。ビルド フィンガープリントは、各ビルドに発行された製造元情報を含む一意の人間が読み取れる文字列です。正確な構文については、Android Compatibility Definition Document (CDD) のBuild Parametersセクション内のFINGERPRINTの説明を参照してください。
ビルド フィンガープリントは、特定の Android 実装とリビジョンを表します。この一意のキーにより、アプリの開発者や他のユーザーは、特定のファームウェア バージョンに関する問題を報告できます。 Android の問題報告プロセスについては、バグの報告を参照してください。
ビルド フィンガープリントは、すべての Android 実装の詳細をカプセル化します。
- API: Android とネイティブ、およびソフト API の動作
- コア API と一部のシステム UI の動作
- CDD で定義されている互換性とセキュリティの要件
- 期待される要件を満たすデバイスをターゲットにするためにアプリで使用される製品仕様と用途 - 機能設定
- ハードウェアおよびソフトウェア コンポーネントの実装
完全な詳細についてはCDDを参照し、まったく新しい Android デバイスを作成する手順については、新しいデバイスの追加を参照してください。
一般的なビルド エラーのトラブルシューティング
間違った Java バージョン
Java のバージョンと一致しないバージョンの Android をビルドmake
うとしている場合は、次のようなメッセージで中止します。
************************************************************ 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 ************************************************************
考えられる原因と解決策は次のとおりです。
- JDK 要件で指定されている正しい JDK をインストールできない。環境のセットアップおよびターゲットの選択の手順に従っていることを確認してください。
- 以前にインストールされた別の JDK がパスに表示されます。パスの先頭に正しい JDK を追加するか、問題のある JDK を削除します。
USB 許可なし
デフォルトでは、ほとんどの Linux システムでは、権限のないユーザーは USB ポートにアクセスできません。アクセス許可が拒否されたというエラーが表示された場合は、 USB アクセスの構成の手順に従ってください。
ADBが既に実行されていて、これらのルールを設定した後にデバイスに接続できない場合は、 adb kill-server
で強制終了できます。このコマンドにより、ADB が新しい構成で再起動します。