ビルド ターゲット

.NET for Android プロジェクトでは、次のビルド ターゲットが定義されています。

ビルド

プロジェクト内のソース コードとすべての依存関係をビルドします。

このターゲットでは Android パッケージ(ファイル)は作成されません。 Android パッケージを作成するには、SignAndroidPackage ターゲットを使用、"または" ビルド時に `$(AndroidBuildApplicationPackage) プロパティを True に設定します。

msbuild /p:AndroidBuildApplicationPackage=True App.slnx

AOTプロファイリングのビルドと開始

埋め込みの AOT プロファイラーを使用してアプリをビルドし、プロファイラー TCP ポートを $(AndroidAotProfilerPort) に設定して、既定のアクティビティを開始します。

このレガシー ターゲットは、Mono を使用する、サポートされている .NET 10 以前のプロジェクトに適用されます。 CoreCLR または NativeAOT プロファイルは構成されません。

既定の TCP ポートは 9999 です。

Xamarin.Android 10.2 で追加されました。

Clean

ビルド プロセスによって生成されたすべてのファイルを削除します。

コンピュートアベイラブルデバイス

dotnet runで使用できる使用可能な Android デバイスとエミュレーターの一覧をクエリして返します。

このターゲットは、.NET SDK の dotnet run コマンドによって自動的に呼び出され、 --device オプションを使用したデバイスの選択がサポートされます。 各デバイスに次のメタデータがある @(Devices) 項目グループが返されます。

  • 説明: わかりやすい名前 (エミュレーターの場合は "Pixel 7 - API 35"、物理デバイスの場合は "Pixel 6 Pro" など)
  • 型: "Device" または "Emulator"
  • 状態: デバイスの状態 - "オンライン"、"オフライン"、"未承認"、または "NoPermissions"
  • モデル: デバイス モデル識別子 (省略可能)
  • 製品: 製品名 (省略可能)
  • デバイス: デバイス名 (省略可能)
  • TransportId: adb トランスポート ID (省略可能)

たとえば、使用可能なすべてのデバイスを一覧表示するには、次のようにします。

dotnet build -t:ComputeAvailableDevices

このターゲットは 、.NET SDK デバイスの選択仕様 の一部であり、次のようなコマンドを有効にします。

dotnet run --device <device-serial>

$(Device) プロパティを使用してデバイスを選択すると、$(AdbTarget) プロパティは、すべての adb 操作でその特定のデバイスを対象とするように自動的に設定されます。

.NET 11 で追加されました。

FinishAotProfiling

BuildAndStartAotProfiling ターゲットの "後に" 呼び出される必要があります。

このレガシ ターゲットは、Mono を使用するサポートされている .NET 10 以前のプロジェクトに適用されます。

デバイスまたはエミュレーターからの AOT プロファイラー データを TCP ポート経由で収集し、 $(AndroidAotProfilerPort) を$(AndroidAotCustomProfilePath) に書き込みます。

ポートおよびカスタム プロファイルの既定値は 9999 と custom.aprof です。

追加のオプションを aprofutil に渡すには、それらを設定してください。 $(AProfUtilExtraOptions) プロパティ。

これは、次の内容と同じです。

aprofutil $(AProfUtilExtraOptions) -s -v -p $(AndroidAotProfilerPort) -o "$(AndroidAotCustomProfilePath)"

Xamarin.Android 10.2 で追加されました。

GetAndroidDependencies

@(AndroidDependency) ターゲットがインストールする Android SDK パッケージを決定するために使用する InstallAndroidDependencies 項目グループを作成します。

アプリケーション成果物を取得する

ビルドによって生成された APK および Android アプリ バンドル ファイルを含む @(ApplicationArtifact) 項目グループを作成して返します。

このターゲットは、プラットフォーム成果物を生成して@(ApplicationArtifact)に収集する、必要なBuildターゲットに常に依存します。 後から行われるインポートでは、$(GetApplicationArtifactsDependsOn) にターゲットを設定または追加して、このターゲットまたは Publish ターゲットが既存のアイテムを返す前に、それらのアイテムを追加のメタデータで更新できます。 $(GetApplicationArtifactsDependsOn)を置き換えると、必要なBuild依存関係は削除されません。

一般的なアプリケーション メタデータは、成果物が収集される前に、マージされた最終的な AndroidManifest.xml から読み取られます。 最終的なマニフェスト値は、カスタム マニフェストが生成された値をオーバーライドしたり、 $(GenerateApplicationManifest) が falseされた場合など、対応するプロジェクト プロパティよりも優先されます。 @string/app_nameなどのandroid:label リソース参照はリソース参照のままです。メタデータが返されるときにロケールは選択されません。

CI ジョブまたはカスタム ツールでビルド出力成果物パスが必要な場合は、このターゲットを直接呼び出します。

dotnet build MyApp.csproj -t:GetApplicationArtifacts -getTargetResult:GetApplicationArtifacts

呼び出し元が Publish 内のコピーされた publish 出力を必要とする場合は、$(PublishDir) ターゲット結果を使用します。

dotnet build MyApp.csproj -t:Publish -getTargetResult:Publish

インストール

既定のデバイスまたは仮想デバイスに、Android パッケージを作成、署名、およびインストールします。

$(AdbTarget) プロパティは、Android パッケージのインストール先または削除元となる Android ターゲット デバイスを指定します。

# Install package onto emulator via -e
# Use `/Library/Frameworks/Mono.framework/Commands/msbuild` on OS X
MSBuild /t:Install ProjectName.csproj /p:AdbTarget=-e

Android依存関係をインストールする

GetAndroidDependencies ターゲットを呼び出し、@(AndroidDependency) 項目グループで指定された Android SDK パッケージをインストールします。

dotnet build -t:InstallAndroidDependencies -f net8.0-android "-p:AndroidSdkDirectory=<path to sdk>" "-p:JavaSdkDirectory=<path to java sdk>"

このターゲットは Android 固有のターゲット用の .NET であるため、 -f net8.0-android が必要です。 この引数を省略すると、次のエラーが発生します。

error MSB4057: The target "InstallAndroidDependencies" does not exist in the project.

必要なコンポーネントをインストールする場所を知る必要がある場合は、 AndroidSdkDirectory プロパティと JavaSdkDirectory プロパティが必要です。 これらのディレクトリは空でも既存でもかまいません。 Sdk コンポーネントは、既存の SDK インストールの上にインストールされます。

$(AndroidManifestType) MSBuild プロパティは、パッケージ名とパッケージ バージョンの検出に使用される Visual Studio SDK Manager リポジトリ と、ダウンロードする URL を制御します。

公開

アプリケーションをビルドし、最終的な APK ファイルと Android アプリ バンドル ファイルを $(PublishDir)にコピーし、 @(ApplicationArtifact) 項目グループを返します。 返されるアイテムは、コピーされた発行ディレクトリ パスを使用し、 %(PackageFormat)、 %(Signed)、 %(PackageId)、 %(Abi)、 %(ApplicationId)、 %(ApplicationTitle)、 %(ApplicationName)、 %(ApplicationDisplayVersion)、 %(ApplicationVersion)などの成果物メタデータを保持します。

Publish 最初に GetApplicationArtifactsが実行され、プロジェクトがビルドされ、プラットフォームで生成された成果物が @(ApplicationArtifact) に設定されます。 $(GetApplicationArtifactsDependsOn)に追加されたターゲットは、発行ファイルを計算Publish前とPublishが@(ApplicationArtifact)を返す前に、それらの既存の項目に対して実行されるため、後でインポートすると発行呼び出し元のメタデータを追加できます。

たとえば、発行された成果物に対してクエリを実行するには、次のようにします。

dotnet build MyApp.csproj -t:Publish -getTargetResult:Publish

ログを記録しながら実行

追加のログ記録を有効にしてアプリケーションを実行します。 アプリケーションまたはランタイムの問題を報告または調査するときに役立ちます。 成功した場合、画面に出力されたメッセージには、ログに記録されたメッセージを含む logcat ファイルの場所が表示されます。

ターゲットの動作に影響を与えるプロパティ:

  • /p:RunLogVerbose=true により、より詳細なランタイム ログ記録が可能になります
  • /p:RunLogDelayInMS=X ここで、 X は、ログ出力をファイルに書き込む前に待機する時間 (ミリ秒単位) に置き換える必要があります。 既定値は 1000 です。

SignAndroidPackage

Android パッケージ (.apk) ファイルを作成して署名します。

/p:Configuration=Release とともに使用して、自己完結型の "リリース" パッケージを生成します。

このターゲットによって作成されたパッケージ ファイルは、 @(ApplicationArtifact) 項目グループで使用できます。

StartAndroidActivity

デバイスまたは実行中のエミュレーターで、既定のアクティビティを開始します。

別のアクティビティを開始するには、 $(AndroidLaunchActivity) プロパティをアクティビティ名に設定します。

これは、次の内容と同じです。

adb shell am start -S -n @PACKAGE_NAME@/$(AndroidLaunchActivity)

Xamarin.Android 10.2 で追加されました。

StopAndroidPackage

デバイスまたは実行中のエミュレーターで、アプリケーション パッケージを完全に停止します。

これは、次の内容と同じです。

adb shell am force-stop @PACKAGE_NAME@

Xamarin.Android 10.2 で追加されました。

アンインストール

既定のデバイスまたは仮想デバイスから Android パッケージをアンインストールします。

$(AdbTarget) プロパティは、Android パッケージのインストール先または削除元となる Android ターゲット デバイスを指定します。

Androidリソース更新

Resource.designer.cs ファイルが更新されます。

このターゲットは通常、新しいリソースがプロジェクトに追加されたときに、IDE によって呼び出されます。