Androidの構築

次の手順に従って、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 ビルドは us​​er および 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 が新しい構成で再起動します。