構築プロパティ

MSBuild プロパティは、ターゲットの動作を制御します。

これらは、MSBuild PropertyGroup 内のプロジェクト ファイル (MyApp.csproj など) 内で指定されます。

注意

.NET for Android では、技術的にはアプリケーションとバインド プロジェクトの違いがないため、プロパティは両方で機能します。 実際には、個別のアプリケーション プロジェクトとバインド プロジェクトを作成することを強くお勧めします。 バインド プロジェクトで主に使用されるプロパティについては、「 MSBuild バインド プロジェクトのプロパティ リファレンス ガイド」を参照してください。

実行時スコープ

通常の Android アプリケーションは、.NET 11 以降の CoreCLR を対象としています。 10 以前.NET対象の Android アプリケーションでは、既定で Mono が使用されます。 $(PublishAot)を true に設定すると、サポートされている発行または最適化されたビルドの NativeAOT ランタイムが選択され、$(UseMonoRuntime)よりも優先されます。

$(UseMonoRuntime)=trueは、.NET 11 エスケープ ハッチではありません。 .NET 11 SDK は、NETSDK1242で拒否します。 Mono がサポートされているフレームワークを対象とする場合にのみ、.NET 10 以前の Mono ガイダンスを使用します。

.NET 11 の Android アプリケーションには、Android API レベル 24 以降が必要です。 $(SupportedOSPlatformVersion) は、アプリケーションのデプロイの最小値を設定し、Android マニフェストの //uses-sdk/@android:minSdkVersion にマップします。 ターゲット SDK を選択したり、Google Play ポリシーを表したりすることはありません。

.NET 11 CoreCLR ランタイム パックでは、次の.NETランタイム識別子 (RID) と対応する Android アプリケーション バイナリ インターフェイス (AVI) がサポートされます。

  • android-arm: armeabi-v7a
  • android-arm64: arm64-v8a
  • android-x64: x86_64

Android NativeAOT は試験段階であり、同じ 3 つの RID をサポートしています。 RID は、Android ABI 名とエミュレーターのシステム イメージ アーキテクチャとは異なります。

AdbTarget

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

AfterGenerateAndroidManifest

このプロパティに一覧表示された MSBuild ターゲットは、_GenerateJavaStubs で AndroidManifest.xml ファイルが生成される場所である内部の $(IntermediateOutputPath) ターゲットの直後に実行されます。 生成された AndroidManifest.xml ファイルに変更を加える場合、この拡張ポイントを使用して行うことができます。

AndroidAapt2CompileExtraArgs

Android アセットとリソースを処理するときに、aapt2 compile コマンドに渡すコマンド ライン オプションを指定します。

AndroidAapt2LinkExtraArgs

Android アセットとリソースを処理するときに、aapt2 link コマンドに渡すコマンド ライン オプションを指定します。

AndroidAddKeepAlives

オブジェクトが早期に収集されないように、リンカーによってバインド プロジェクト内に GC.KeepAlive() 呼び出しを挿入するかどうかを制御するブール型プロパティ。

リリース構成のビルドの既定値は True です。

trimmable型マップを使用する未作成のビルドの場合、GC.KeepAlive()呼び出しは、次の場合にのみ挿入されます。 $(AndroidEnableLegacyCompatibilityAssemblyFixups) も True。 trimmable型マップを使用してトリミングされたビルドでは、これらの呼び出しは挿入されません。

AndroidAotAdditionalArguments

Mono を使用する、サポート対象の .NET 10 以前のプロジェクトで、Mono AOT コンパイラの --aot=... 引数内に追加のコンマ区切りオプションを渡せるようにする文字列プロパティ。 このプロパティは、Mono AOT コンパイルが有効な場合にのみ使用されます。

一般に、このプロパティは空白のままにしておく必要がありますが、特殊なシナリオでは、柔軟性が向上する場合があります。

$(AndroidAotAdditionalArguments) プロパティは、関連する$(AndroidExtraAotOptions) プロパティとは異なります。$(AndroidAotAdditionalArguments)は --aot オプションに含まれますが、$(AndroidExtraAotOptions)はスタンドアロン引数を Mono AOT コンパイラ プロセスに直接渡します。

AndroidAotCustomProfilePath

Mono AOT プロファイラー データを保持するために aprofutil が作成する必要があるファイル。 既定値は custom.aprof です。

このプロパティは、Mono を使用するサポート対象の .NET 10 以前のプロジェクト向けのレガシー AOT プロファイリング ターゲットに適用されます。

AndroidAotProfilerPort

Mono AOT プロファイリング データを取得する際に aprofutil が接続する必要があるポート。 既定値は 9999 です。

このプロパティは、Mono を使用するサポート対象の .NET 10 以前のプロジェクト向けのレガシー AOT プロファイリング ターゲットに適用されます。

AndroidAotEnableLazyLoad

起動時に事前読み込みするのではなく、Mono AOT でコンパイルされたアセンブリの遅延読み込みを有効にします。

このプロパティは、Mono を使用する、サポートされている .NET 10 以前のプロジェクトに適用されます。 Mono AOT が有効になっており、デバッグ シンボルが含まれていない場合は、既定で True されます。 CoreCLR または NativeAOT は構成されません。

.NET 6 で導入されました。

AndroidApkDigestAlgorithm

jarsigner -digestalg で使用するダイジェスト アルゴリズムを指定する文字列値。

既定値は SHA-256 です。

AndroidApkSignerAdditionalArguments

開発者が apksigner ツールに引数を指定することを許可する文字列プロパティ。

AndroidApkSigningAlgorithm

jarsigner -sigalg で使用する署名アルゴリズムを指定する文字列値。

既定値は SHA256withRSA です。

AndroidApplication

プロジェクトが Android アプリケーション用 (True) か、または Android ライブラリ プロジェクト用 (False または存在しない) かを示すブール値。

<AndroidApplication>True</AndroidApplication> を持つプロジェクトは、Android パッケージ内に 1 つしか存在できない場合があります (残念ながら、この要件は検証されていないため、Android リソースに関する分かりにくい突拍子のないエラーが発生する可能性があります)。

AndroidApplicationJavaClass

android.app.Application を継承するクラスにおいて、 の代わりに使用する完全な Java クラス名。

$(AndroidApplicationJavaClass) プロパティは通常、 MSBuild プロパティなどの "他の" プロパティによって設定されます。$(AndroidEnableMultiDex)

アンドロイドパフォーマンスのためのエミット回避

起動パフォーマンスを向上させるために、 System.Reflection.Emit を "回避" するかどうかを決定するブール型プロパティ。 このプロパティは既定で True です。

System.Reflection.Emitの使用は、Android でのスタートアップ パフォーマンスに顕著な影響を与えます。 この動作は、次の機能スイッチでは既定で無効になっています。

  • Switch.System.Reflection.ForceInterpretedInvoke: MethodInfo.Invoke() または ConstructorInfo.Invoke()への 2 回目の呼び出しの後に、繰り返し呼び出しのパフォーマンスを向上させるためにコードが生成されます。

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: 依存関係挿入コンテナーからサービスを取得する 2 回目の呼び出しの後、繰り返し呼び出しのパフォーマンスを向上させるためにコードが生成されます。

ほとんどの Android アプリケーションでは、この動作を無効にすることが望ましいです。

使用可能な機能スイッチの詳細についてはBase クラス ライブラリ機能スイッチのドキュメントを参照してください。

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

AndroidBinUtilsPath

binutils、ld、ネイティブリンカー、ネイティブアセンブラなどの Android 用 as が格納されているディレクトリへのパス。 これらのツールは、.NET for Android ワークロードに含まれています。

既定値は $(MonoAndroidBinDirectory)\binutils\bin\ です。

AndroidBoundExceptionType

Android で提供される .NET 型が Java 型 ( Android.Runtime.InputStreamInvoker と System.IO.Stream、 Android.Runtime.JavaDictionary や System.Collections.IDictionaryなど) の観点から .NET 型またはインターフェイスを実装する場合に例外を伝達する方法を指定する文字列値。

  • Java: 元の Java 例外の型はそのまま伝播されます。

    Java は、たとえば、InputStreamInvoker が System.IO.Stream API を適切に実装していないことを意味します。これは、Java.IO.IOException から Stream.Read() ではなく System.IO.IOException がスローされる可能性があるためです。

  • System: 元の Java 例外の型がキャッチされ、適切な .NET 例外の型でラップされます。

    System は、たとえば、InputStreamInvoker が System.IO.Stream を正しく実装し、Stream.Read() が インスタンスをスロー "しない" ことを意味します。Java.IO.IOException (その代わりに、Exception.InnerException の値として Java.IO.IOException を含む System.IO.IOException をスローする場合もあります。)

    既定値は System です。

Android結合インターフェースには定数が含まれる

インターフェイスのバインド定数をサポートするかどうか、または IMyInterfaceConsts クラスを作成する回避策を使用するかどうかを決定するブール型プロパティ。

既定値は True です。

Androidバウンドインタフェースには静的メソッドとデフォルトメソッドが含まれています

インターフェイスの既定のメンバーと静的メンバーをサポートするかどうか、または abstract class MyInterface のような静的メンバーを含む兄弟クラスを作成する以前の回避策をサポートするかどうかを示すブール型プロパティ。

既定値は、.NET 6 では True、レガシの場合は False です。

AndroidBoundInterfacesContainTypes

インターフェイスで入れ子になった型をサポートするかどうか、または IMyInterfaceMyNestedClass のような入れ子になっていない型を作成する回避策をサポートするかどうかを示すブール型プロパティ。

既定値は、.NET 6 では True、レガシの場合は False です。

AndroidBuildApplicationPackage

パッケージ (.apk) を作成して署名するかどうかを示すブール値。 この値を True に設定することは、 SignAndroidPackage のビルド ターゲットを使用することと同意味を持ちます。

このプロパティは既定で False です。

AndroidBundleConfigurationFile

Android アプリ バンドルをビルドする際に、のbundletoolとして使用するファイル名を指定します。 このファイルは、APK を生成するためのどのディメンションでバンドルを分割するかなど、バンドルから APK を生成する方法のいくつかの側面を制御します。 .NET for Android では、圧縮されていないファイル拡張子の一覧など、これらの設定の一部が自動的に構成されます。

このプロパティが意味をなすのは、$(AndroidPackageFormat) が aab に設定されている場合のみです。

AndroidBundleToolExtraArgs

アプリ バンドルをビルドするときに bundletool コマンドに渡すコマンド ライン オプションを指定します。

AndroidClassParser

.jar ファイルの解析方法を制御する文字列プロパティ。 考えられる値:

  • class-parse: JVM を利用せずに、class-parse.exe を使用して直接 Java バイトコードを解析します。

  • jar2xml: この値は廃止され、サポートされなくなりました。

AndroidCodegenTarget

コード生成ターゲット ABI を制御する文字列プロパティ。 考えられる値:

  • XamarinAndroid: この値は廃止され、サポートされなくなりました。

  • XAJavaInterop1: JNI の呼び出しに Java.Interop を使用します。 XAJavaInterop1 を使用したバインドのアセンブリは、Xamarin.Android 6.1 以降でのみビルドおよび実行できます。 Xamarin.Android 6.1 以降は、この値で Mono.Android.dll をバインドします。

  • JavaInterop1: 試験的な値。現在、NativeAOT ランタイムの既定値です。

既定値は XAJavaInterop1 です。

AndroidパッケージをAbiごとに作成する

選択したすべての ABI をサポートする 1 つの.apkではなく、選択した Android ABI (arm64-v8a など) ごとに 1 つの.apkを作成するかどうかを決定するブール型プロパティ。 $(RuntimeIdentifiers)の RID は、これらの ABI を選択します。API は、RID ごとではなく ABI ごとに生成されます。

「ABI 固有の APK のビルド」ガイドも参照してください。

AndroidCreateProguardMappingFile

ビルド プロセスの一部として ProGuard マッピング ファイルを生成さするかどうかを制御するブール型プロパティ。

csproj に以下を追加するとファイルが生成され、AndroidProguardMappingFile プロパティを使用して最終的なマッピング ファイルの場所が制御されます。

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

.aab ファイルを生成すると、マッピング ファイルがパッケージに自動的に含まれます。 Google Play ストアに手動でアップロードする必要はありません。 .apk ファイルを使用する場合は、AndroidProguardMappingFile を手動でアップロードする必要があります。

True=r8 を使用する場合、既定値は $(AndroidLinkTool) です。

AndroidDebugKeyAlgorithm

debug.keystore 用に使用する既定のアルゴリズムを指定します。 既定値は RSA です。

Androidデバッグキーの有効期限

debug.keystore 用に使用する既定の有効性を指定します。 既定値は 10950、30 * 365 または 30 years です。

AndroidDebugStoreType

debug.keystore に使用するキー ストア ファイル形式を指定します。 既定値は pkcs12 です。

AndroidDeviceUserId

ゲストまたは職場のアカウントでアプリケーションを展開およびデバッグできるようにします。 値は、次の adb コマンドから取得した uid 値です。

adb shell pm list users

上記のコマンドにより次のデータが返されます。

Users:
	UserInfo{0:Owner:c13} running
	UserInfo{10:Guest:404}

uid は最初の整数値です。 上記の出力では、0 と 10 です。

AndroidDexTool

有効な値が d8 の列挙型プロパティ。 以前は、Xamarin.Android では dx の値がサポートされていました。

.NET for Android ビルド プロセス中に使用される Android dex コンパイラを示します。 既定値は d8 です。 D8 と R8 に関するドキュメントを参照してください。

AndroidEnableDesugar

desugar が有効かどうかを決定するブール型プロパティ。 現在、Android ではすべての Java 8 機能がサポートされておらず、desugar コンパイラの出力に javac と呼ばれるバイトコード変換を実行して、既定のツールチェーンにより新しい言語機能が実装されています。 既定値は、False を使用する場合は $(AndroidDexTool)=dx、True$(AndroidDexTool)= を使用する場合は d8 です。

AndroidEnableFastDeployment

高速展開が有効かどうかを決定するブール型プロパティ。 高速配置では、アプリケーション パッケージの外部にアセンブリがインストールされるため、デプロイと再構築の時間を短縮できます。

既定値は、デバッグ ビルドの場合は True され、リリース ビルドの場合は False されます。 このプロパティの設定は、 $(EmbedAssembliesIntoApk)の逆値を設定することと同じです。 両方のプロパティが設定されている場合は、 $(EmbedAssembliesIntoApk) が優先されます。

Android有効GooglePlayストア確認

開発者が次の Google Play ストア チェックを無効にできるようにするブール型プロパティ: XA1004、XA1005、および XA1006。 これらのチェックを無効にすることは、Google Play ストアを対象としておらず、このチェックを実行したくない開発者にとって役立ちます。

AndroidEnableLegacyCompatibilityAssemblyFixups

トリミングされていないビルドが参照アセンブリを変更して、レガシ バインディングとリソース デザイナーの動作をサポートするかどうかを制御するブール型プロパティ。 これらの変更には、不足している抽象インターフェイス メソッドの追加、レガシ リソース デザイナー参照の更新、および古い Xamarin.Android バインド アセンブリへの GC.KeepAlive() の呼び出しの挿入が含まれます。 trimmable型マップを使用してトリミングされたビルドでは、これらの互換性の修正は実行されず、このプロパティを True に設定しても、トリミングされたビルドでは有効になりません。

既定値は、trimmable が False の場合は $(AndroidTypeMapImplementation)、それ以外の場合は True です。

AndroidEnableMarshalMethods

LLVM マーシャリング メソッドが有効かどうかを決定する bool プロパティ。 LLVM マーシャリング メソッドは、Java native メソッドの登録にネイティブ エントリ ポイントを使用するアプリのスタートアップ最適化です。

このプロパティでは、既定値が False に設定されます。

$(PublishReadyToRun)がtrueされている場合、このプロパティをtrueに設定することはできません。 両方のプロパティを true に設定すると、 XA1049 でビルドが停止します。

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

AndroidEnableMultiDex

最終的な .apk で Multi-Dex サポートを使用するかどうかを決定するブール型プロパティ。

このプロパティは既定で False です。

AndroidEnableProfiler

Mono アプリケーションの場合、これは $(EnableDiagnostics) プロパティのシノニムです。 trueされている場合は、Mono 診断コンポーネント (libmono-component-diagnostics_tracing.so) がアプリケーションに含まれます。

.NET 11 以降の CoreCLR アプリケーションの場合、このプロパティにより、dotnet-traceやdotnet-gcdumpなどのツールで使用される CoreCLR 診断ポート構成が有効になります。Mono 診断コンポーネントは追加されません。 NativeAOT は、 $(PublishAot) によって選択された個別のランタイムであり、このプロパティは、サポートされている Android のパッケージ化と構成の動作のみを文書化します。

このプロパティは既定で False です。

AndroidEnableObsoleteOverrideInheritance

バインドされたメソッドがオーバーライドするメソッドから [Obsolete] 属性を自動的に継承するかどうかを決定するブール型プロパティ。

.NET 8 では、このプロパティのサポートが追加されました。

このプロパティは既定で True です。

AndroidEnablePreloadAssemblies

アプリケーション パッケージ内でバンドルされているすべてのマネージド アセンブリを、プロセスの起動中に読み込むかどうかを制御するブール型プロパティ。

True に設定すると、アプリケーション コードが呼び出される前に、アプリケーション パッケージ内でバンドルされているすべてのアセンブリがプロセスの起動中に読み込まれます。

False に設定すると、アセンブリは必要な場合にのみ読み込まれます。 必要に応じてアセンブリを読み込むと、アプリケーションの起動がより高速になり、デスクトップの .NET セマンティクスとの整合性も高まります。 時間の短縮を確認したい場合は、debug.mono.log を含めるよう timing システム プロパティを設定して、Finished loading assemblies: preloaded 内で adb logcat メッセージを探します。

依存関係の挿入を使うアプリケーションまたはライブラリでは、それらが同じように AppDomain.CurrentDomain.GetAssemblies() でアプリケーション バンドル内のすべてのアセンブリを返すことが必要な場合、それ以外ではアセンブリが必要なかった場合でも、このプロパティが True となる必要がある場合があります。

既定では、この値は False です。

AndroidEnableProfiledAot

事前コンパイル時に Mono AOT プロファイルを使用するかどうかを決定するブール型プロパティ。 Mono を使用し、ReadyToRun、MIBC プロファイル、動的 PGO、または NativeAOT を構成していない、サポートされている .NET 10 以前のプロジェクトに適用されます。

プロファイルは、リストにされています。 @(AndroidAotProfile) 項目グループ。 プロファイルされた AOT が有効になっている場合、 $(AndroidUseDefaultAotProfile) が falseされていない限り、既定のプロファイルが含まれます。 カスタム プロファイルは、 @(AndroidAotProfile)を使用して追加できます。

$(RunAOTCompilation)がtrueされ、このプロパティが設定されていない場合、既定値は true になります。 その結果、Mono を使用する該当するリリース ビルドの true が既定で設定されます。

AndroidEnableRestrictToAttributes

obsoleteとdisableの有効な値を持つ列挙スタイルのプロパティ。

obsoleteに設定すると、Java 注釈androidx.annotation.RestrictToor でマークされている型とメンバーがエクスポートされていない Java パッケージ内にある場合は、C# バインドで[Obsolete]属性でマークされます。

この [Obsolete] 属性には、Java パッケージ所有者が API を "内部" と見なし、その使用に対して警告することを説明する説明メッセージが含まれています。

この属性には、"通常の" 古い API とは別に抑制できるように、カスタム警告コード XAOBS001 もあります。

disableに設定すると、API は通常どおりに生成され、追加の属性はありません。 (これは、.NET 8 より前と同じ動作です)。

API を自動的に削除するのではなく、 [Obsolete] 属性を追加することで、既存のパッケージとの API の互換性を維持しました。 代わりに、注釈or@RestrictToがエクスポートされていない Java パッケージ内にあるメンバーを削除する場合は、このプロパティに加えて Transform ファイルを使用して、これらの型がバインドされないようにすることができます。

<remove-node path="//*[@annotated-visibility]" />

.NET 8 では、このプロパティのサポートが追加されました。

このプロパティは既定で obsolete に設定されています。

AndroidEnableSGenConcurrent

Mono の同時 GC コレクターを使用するかどうかを決定するブール型プロパティ。

このプロパティは既定で True です。 これは、Mono を使用し、CoreCLR または NativeAOT のガベージ コレクターを構成しない、サポート対象の .NET 10 以前のプロジェクトに適用されます。

カスタムJavaオブジェクトで発生するAndroidエラー (AndroidErrorOnCustomJavaObject)

Java.Lang.Object または Java.Lang.Throwable から継承Android.Runtime.IJavaObjectすることなく、型が を実装できるかどうかを決定するブール型のプロパティ:

class BadType : IJavaObject {
    public IntPtr Handle {
        get {return IntPtr.Zero;}
    }

    public void Dispose()
    {
    }
}

True の場合、このような型は XA4212 エラーを生成し、それ以外の場合は XA4212 警告を生成します。

このプロパティは既定で True です。

AndroidExplicitCrunch

このプロパティはサポートされなくなりました。

AndroidExtraAotOptions

Mono を使用する、サポートされている .NET 10 以前のプロジェクトで、セミコロン区切りのスタンドアロン引数を Mono AOT コンパイラ プロセスに直接渡せるようにする文字列プロパティ。 このプロパティは、Mono AOT コンパイルが有効な場合にのみ使用されます。

一般に、このプロパティは空白のままにしておく必要がありますが、特殊なシナリオでは、柔軟性が向上する場合があります。

$(AndroidExtraAotOptions) プロパティは、関連する$(AndroidAotAdditionalArguments)プロパティとは異なります。$(AndroidExtraAotOptions)はスタンドアロン のプロセス引数を渡しますが、$(AndroidAotAdditionalArguments)はコンマ区切りの--aot=... オプションに含まれます。

AndroidFastDeploymentType

このプロパティは .NET 9 で削除されましたが、影響はありません。

AndroidFragmentType

レイアウト バインディング コードを生成するときに、すべての <fragment> レイアウト要素に使用される既定の完全修飾型を指定します。 既定値は、Android の標準の Android.App.Fragment 型です。

AndroidGenerateJniMarshalMethods

この試験的な機能は、.NET 11 で削除されました。 プロパティを設定しても効果はありません。

AndroidGenerateJniMarshalMethodsAdditionalArguments

この試験的な機能は、.NET 11 で削除されました。 プロパティを設定しても効果はありません。

AndroidGenerateLayoutBindings

コードビハインドのレイアウトの生成をtrueに設定することで有効にし、falseに設定することで完全に無効にします。

既定値は false です。

AndroidGenerateResourceDesigner

既定値は true です。 false に設定すると、Resource.designer.cs の生成が無効になります。

AndroidHttpClientHandlerType

注意

このプロパティは、.NET 11 ではサポートされていません。 プロジェクト ファイルから削除し、代わりに UseNativeHttpHandler を使用します。

AndroidIgnoreAllJniPreload

trueに設定されている場合、すべてのネイティブ JNI ライブラリがアプリケーションの起動時にプリロードされないようにするブール値。 既定では、このようなライブラリはすべて、適切な初期化を保証するために、アプリケーションの起動時にランタイムによって読み込まれます。 ただし、場合によっては、望ましい動作ではない可能性があり、このプロパティを使用すると効果的に無効にすることができます。

アプリケーションの起動時に読み込む必要がある一部のフレームワーク ライブラリは、このプロパティの影響を受けなくなります。

プリロード メカニズムからライブラリを除外するより詳細な方法については、 @(AndroidNativeLibraryNoJniPreload) も参照してください。

AndroidIncludeWrapSh

Android ラッパー スクリプト (wrap.sh) を APK にパッケージ化する必要があるかどうかを示すブール値。 ラッパー スクリプトはアプリケーションの起動方法や動作方法に大きく影響する可能性があるため、既定値は false になっています。スクリプトは、デバッグを行う場合やアプリケーションの起動または実行時の動作を変更する場合など、必要な場合にのみ含めるようにします。

スクリプトをプロジェクトに追加するには、 @(AndroidNativeLibrary) ビルド アクションを使用します。これは、アーキテクチャ固有のネイティブ ライブラリと同じディレクトリに配置されているため、wrap.sh という名前を付ける必要があります。

wrap.sh スクリプトへのパスを指定する最も簡単な方法は、ターゲット アーキテクチャにちなんだ名前を付けたディレクトリにスクリプトを配置することです。 この方法は、アーキテクチャごとに wrap.sh が 1 つしかない場合に機能します。

<AndroidNativeLibrary Include="path/to/arm64-v8a/wrap.sh" />

ただし、さまざまな目的のためにアーキテクチャごとに複数の wrap.sh が必要な場合には、この方法は機能しません。 そのような場合は、代わりに Link の AndroidNativeLibrary メタデータを使用して名前を指定できます。

<AndroidNativeLibrary Include="/path/to/my/arm64-wrap.sh">
  <Link>lib\arm64-v8a\wrap.sh</Link>
</AndroidNativeLibrary>

Link メタデータを使用する場合、その値に指定するパスは、APK ルート ディレクトリを基準とする有効なネイティブ アーキテクチャ固有のライブラリ パスである必要があります。 パスの形式は lib\ARCH\wrap.sh です。ARCH には次のいずれかを指定できます。

  • arm64-v8a
  • armeabi-v7a
  • x86_64
  • x86

AndroidIncludeAssetPacksInPackage(アンドロイドのパッケージにアセットパックを含める)

このプロパティは、アセット パックのビルドが最終的な .aab ファイルに自動的に含まれるかどうかを制御します。 既定では trueに設定されます。

場合によっては、ユーザーが中間リリースをリリースする必要がある場合があります。 このような場合、ユーザーは資産パックを更新する必要はありません。 特にアセット パックの内容が変更されていない場合。 このプロパティを使用すると、アセット パックが不要な場合はスキップできます。

.NET 9 で追加

AndroidInstallJavaDependencies

既定値は、コマンド ライン ビルドの true です。 trueに設定すると、<InstallAndroidDependencies/> ターゲットの実行時に Java SDK のインストールが有効になります。

.NET 9 では、このプロパティのサポートが追加されました。

AndroidInstrumentation

dotnet run経由でアプリケーションを起動するときに使用する Android インストルメンテーション ランナー クラス名を指定する文字列プロパティ。

このプロパティが設定されていない場合、 dotnet run は中間出力で生成された AndroidManifest.xml から起動するものを解決します。

  • $(AndroidUseInstrumentation)がtrueされている場合は、最初の<instrumentation/>要素が使用されます。
  • それ以外の場合は、起動可能な <activity/> が推奨され、アプリが起動可能なアクティビティを宣言しない場合は、最初の <instrumentation/> 要素が使用されます。 これにより、BenchmarkDotNet ホストなどのAndroid.App.Instrumentation サブクラスである唯一のエントリ ポイントを持つアプリをdotnet runできます。

アプリでどちらも宣言されていない場合、 XA1043 でビルドは失敗します。 $(AndroidUseInstrumentation)がtrueされていても、アプリで<instrumentation/>が宣言されていない場合、XA1048 でビルドは失敗します。

インストルメンテーションが起動されると、dotnet runはadb shell am instrument -w -r実行され、インストルメンテーションがクラッシュするか、Result.CanceledでInstrumentation.Finish()を呼び出すと、0 以外の終了コードで終了します。 $(WaitForExit)をfalseに設定すると-wが削除されるため、インストルメンテーションが開始されるとすぐにdotnet runが返され、結果は報告されません。

--後のすべての引数は、am instrument追加としてインストルメンテーションに転送されます。 フォームの引数KEY=VALUE-e KEY VALUEになり、残りの引数はすべて 1 つの-e args "..."に結合されます。

dotnet run -- --filter *MyBenchmark*

は、arguments.GetString("args")としてInstrumentation.OnCreate(Bundle?)に配信されます。

.NET 11 で導入されました。

AndroidJavadocVerbosity

バインド プロジェクト内で Javadoc ドキュメントをインポートする際に、C# XML ドキュメントのコメントをどの程度 "詳細" にするかを指定します。

そのツールを使用する必要があります。 @(JavaSourceJar) ビルドアクション。

$(AndroidJavadocVerbosity) プロパティは列挙型に似ています。指定可能な値は full または intellisense です。

既定値は intellisense です。

AndroidKeyStore

カスタム署名情報を使用するかどうかを示すブール値。 既定値は False で、既定のデバッグ署名キーがパッケージの署名に使用されることを意味します。

AndroidLaunchActivity

起動する Android アクティビティー。

AndroidLinkMode

Android パッケージ内に含まれるアセンブリで実行する必要があるリンクの種類を指定します。 Android アプリケーション プロジェクトでのみ使用されます。 既定値は SdkOnly です。 有効な値は次のとおりです。

  • None: リンクは試行されません。

  • SdkOnly: リンクは基本クラス ライブラリでのみ実行され、ユーザーのアセンブリでは実行されません。

  • Full: リンクは基本クラス ライブラリとユーザーのアセンブリで実行されます。

    注意

    AndroidLinkMode の値として Full を使用すると、特にリフレクションを使用している場合には、アプリが故障することがよくあります。 何をしているかを十分に理解している場合を除き、使用しないでください。

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

true の場合、ビルド システムは、すべてのアセンブリにおいて Resource.Designer.cs 内の Resource クラスのネストされた型をリンクから除外します。 これらの型を使用する IL コードは、フィールドにアクセスするのではなく、値を直接使用するように更新されます。

入れ子になった型をリンクすると、apk サイズを少し小さくすることができ、起動時のパフォーマンスを向上させることもできます。 "リリース" ビルドのみがリンクされます。

試験的です。 次のようなコードでのみ動作するように設計されています

var view = FindViewById(Resources.Ids.foo);

その他のシナリオ (リフレクションなど) はサポートされません。

AndroidLinkSkip

リンクしないアセンブリ名のセミコロン (;) で区切られたリストを、ファイル拡張子を使わずに指定します。 Android アプリケーション プロジェクト内でのみ使用されます。

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

proguard または r8 の有効な値を持つ列挙型プロパティ。 Java プログラムコードに使用されるコードシュリンカーを示します。 既定値は空の文字列、または proguard が $(AndroidEnableProguard) の場合は True です。 D8 と R8 に関するドキュメントを参照してください。

AndroidLintEnabled

開発者がパッケージ化プロセスの一部として、Android の lint ツールを実行できるようにするブール型プロパティ。

$(AndroidLintEnabled)=True の場合、次のプロパティが使用されます。

次のビルド アクションを使用することもできます。

詳細については、Android の ツールの lint を参照してください。

AndroidLintEnabledIssues

有効にする Lint のイシューをコンマ区切りで列挙した文字列プロパティ。

$(AndroidLintEnabled)=True の場合にのみ使用されます。

AndroidLintDisabledIssues

無効化する lint の問題をコンマで区切ったリストを表す文字列プロパティ。

$(AndroidLintEnabled)=True の場合にのみ使用されます。

AndroidLintCheckIssues

チェック対象の Lint のイシューをコンマ区切りで列挙した文字列プロパティ。

$(AndroidLintEnabled)=True の場合にのみ使用されます。

注: これらの問題のみがチェックされます。

Android管理シンボル

ファイル名と行番号の情報を Release スタック トレースから抽出できるように、シーケンス ポイントを生成するかどうかを制御するブール型プロパティ。

AndroidManifest

アプリの AndroidManifest.xml のテンプレートとして使用するファイル名を指定します。 ビルド時に、実際の AndroidManifest.xml を生成するためにその他の必要な値がマージされます。 $(AndroidManifest) は、/manifest/@package 属性にパッケージ名を含める必要があります。

AndroidManifestMerger

AndroidManifest.xml ファイルをマージするための実装を指定します。 これは、legacy が元の C# の実装を選択し、manifestmerger.jar が Google の Java 実装を選択する列挙型のプロパティです。

現在の既定値は manifestmerger.jar です。 古いバージョンを使用する場合は、csproj に次のコードを追加します

<AndroidManifestMerger>legacy</AndroidManifestMerger>

Google の統合によって、xmlns:tools="http://schemas.android.com/tools"がAndroid ドキュメントに記載されているサポートが有効になります。

AndroidManifestMergerExtraArgs

Android ドキュメント ツールに引数を指定する文字列プロパティ。

ツールからの詳細な出力が必要な場合は、.csproj に以下を追加できます。

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

Xamarin または GoogleV2 の有効な値を持つ列挙型プロパティ。 これは、使用するリポジトリを制御します。 InstallAndroidDependencies どの Android パッケージとパッケージバージョンが利用可能で、インストール可能かを判断する対象です。

Xamarin は、Visual Studio SDK マネージャー内の許可された一覧 (推奨) リポジトリです。

GoogleV2 は、Visual Studio SDK マネージャー内のすべての一覧 (サポート対象外) リポジトリです。

$(AndroidManifestType)が設定されていない場合は、Xamarinが使用されます。

AndroidManifestSource

によって使用されるリポジトリ マニフェストの絶対 URI または既存のローカル ファイル パスを指定する文字列プロパティ InstallAndroidDependencies ターゲット。 このプロパティが設定されていない場合は、 $(AndroidManifestType) によって選択された既定のリポジトリ マニフェストが使用されます。

次に例を示します。

<AndroidManifestSource>https://example.com/AndroidManifestFeed.xml</AndroidManifestSource>

AndroidManifestPlaceholders

AndroidManifest.xml のキーと値の置換ペアのセミコロン区切りのリストです。各ペアの形式は key=value です。

たとえば、プロパティ値 assemblyName=$(AssemblyName) によって、${assemblyName} プレースホルダーが定義され、それは AndroidManifest.xml 内で使用できます。

<application android:label="${assemblyName}"

これにより、ビルド プロセスから AndroidManifest.xml ファイルに変数を挿入することができます。

AndroidMultiDexClassListExtraArgs

com.android.multidex.MainDexListBuilder ファイルを生成するときに、開発者が引数を multidex.keep に渡すことを許可する文字列プロパティ。

1 つの具体的なケースは、dx のコンパイル中に次のエラーが発生する場合です。

com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded

このエラーが発生している場合は、以下を .csproj に追加できます。

<DxExtraArguments>--force-jumbo </DxExtraArguments>
<AndroidMultiDexClassListExtraArgs>--disable-annotation-resolution-workaround</AndroidMultiDexClassListExtraArgs>

これにより、dx ステップが成功します。

AndroidNdkDirectory

$(AndroidNdkDirectory) プロパティは、カスタム Android NDK インストール ディレクトリを指定します。 パスは、プロジェクト ファイルまたはコマンド ラインで設定できます。

dotnet build -p:AndroidNdkDirectory=/path/to/android-ndk

このプロパティが設定されていない場合、Android の.NETは、構成された Android 開発環境から NDK を検索します。

アンドロイドパッケージフォーマット

apk または aab の有効な値を持つ列挙型プロパティ。 Android アプリケーションを APK ファイルまたは Android アプリ バンドルとしてパッケージ化するかどうかを示します。 アプリ バンドルは、Google Play での送信を目的とした Release ビルドの新しい形式です。 既定値は apk です。

$(AndroidPackageFormat) を aab に設定すると、Android アプリ バンドルに必要な他の MSBuild プロパティが設定されます。

このプロパティは、.NET 6 では非推奨になります。 ユーザーは新しい AndroidPackageFormats に切り替える必要があります。

アンドロイドパッケージフォーマット

セミコロン区切りのプロパティで、有効な値は apk と aab です。 Android アプリケーションを APK ファイルまたは Android アプリ バンドルとしてパッケージ化するかどうかを示します。 アプリ バンドルは、Google Play での送信を目的とした Release ビルドの新しい形式です。

リリース ビルドをビルドするときは、さまざまなストアに配布するために aab と apk の両方を生成する必要がある場合があります。

AndroidPackageFormats を aab;apk に設定すると、両方が生成されます。 AndroidPackageFormats を aab または apk のいずれかに設定すると、1 つのファイルのみが生成されます。

既定値は、aab;apk ビルドに対してのみReleaseです。 デバッグに apk を使用する方が高速ですが、必要に応じて高速展開で aab もサポートされます (アセット パックのテスト時など)。

AndroidPackageNamingPolicy

生成された Java ソース コードの Java パッケージ名を指定するための列挙型スタイルのプロパティ。

値 LowercaseCrc64 のみがサポートされています。

AndroidPrepareForBuildDependsOn

Android ビルド プロセスを拡張するために使用できるセミコロンで区切られたプロパティ。 このプロパティに追加された MSBuild ターゲットは、アプリケーション プロジェクトとライブラリ プロジェクトの両方の種類に対してビルドの早い段階で実行されます。 既定では、このプロパティは空です。

例:

<PropertyGroup>
  <AndroidPrepareForBuildDependsOn>MyCustomTarget</AndroidPrepareForBuildDependsOn>
</PropertyGroup>

<Target Name="MyCustomTarget" >
  <Message Text="Running target: 'MyCustomTarget'" Importance="high"  />
</Target>

AndroidProguardMappingFile

-printmapping の proguard ルールをr8に指定します。 これは、mapping.txt ファイルが $(OutputPath) フォルダーに生成されることを意味します。 このファイルは、パッケージを Google Play ストアにアップロードするときに使用できます。

既定では、このファイルは AndroidLinkTool=r8 を使用すると自動的に生成され、次のファイル $(OutputPath)mapping.txt が生成されます。

このマッピング ファイルを生成したくない場合は、AndroidCreateProguardMappingFile プロパティを使用して作成を停止できます。 次を、プロジェクトに追加します。

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

または、コマンド ラインで -p:AndroidCreateProguardMappingFile=False を使用します。

AndroidD8IgnoreWarnings

--map-diagnostics warning infoに渡すd8を指定します。 既定値は True ですが、より厳密な動作を強制するために False を設定できます。 詳細については、 D8 と R8 のソース コード を参照してください。

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

AndroidR8IgnoreWarnings

-ignorewarnings の proguard ルールをr8に指定します。 これにより、特定の警告が発生した場合でも、r8 で Dex コンパイルを使用して続けることができます。 既定値は True ですが、より厳密な動作を強制するために False を設定できます。 詳細については、ProGuard のマニュアルを参照してください。

.NET 8 以降では、 --map-diagnostics warning infoを指定します。 詳細については、 D8 と R8 のソース コード を参照してください。

AndroidR8JarPath

r8 dex コンパイラおよびシュリンカーで使用する r8.jar へのパス。 既定値は、.NET for Android ワークロードインストールへのパスです。 詳細については、D8 と R8 に関するドキュメントをご覧ください。

AndroidR8ObfuscationMode

r8 が r8 の場合に、$(AndroidLinkTool) が Java 名をどのように難読化するかを指定する列挙型プロパティ。 サポートされる値は次のとおりです。

  • private-membersでは、クラス名とインターフェイス名Java、パブリックメンバー名またはプロテクト メンバー名が保持されます。 プライベート メンバーとパッケージ プライベート メンバーは難読化でき、R8 の最適化が有効になります。
  • disabledは難読化を無効にし、すべてのJava名を保持し、最適化されていない Android R8 の既定値を使用します。

このプロパティは、R8 コードの圧縮を無効にしません。

このプロパティは、.NET 10 サービス リリースで導入されました。 既定では、.NET 10 でdisabledし、.NET 11 以降でprivate-membersします。

AndroidResgenExtraArgs

Android アセットとリソースを処理するときに、aapt コマンドに渡すコマンド ライン オプションを指定します。

AndroidResgenFile

生成するリソース ファイルの名前を指定します。 既定のテンプレートでは、これは Resource.designer.cs に設定されます。

AndroidResourceDesignerClassModifier

生成される中間 Resource クラスのクラス修飾子を指定します。 有効値は public または internal です。

既定では、これは publicされます。

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

AndroidSdkBuildToolsVersion

Android SDK ビルド ツール パッケージは、特に、aapt および zipalign ツールを提供します。 複数の異なるバージョンのビルド ツール パッケージを同時にインストールすることができます。 パッケージ化するビルド ツール パッケージの選択は、"優先" ビルド ツールのバージョンをチェックして、ある場合はそれを使用して行われます。"優先" バージョンが "ない" 場合は、インストールされている最も高いバージョンのビルド ツール パッケージが使用されます。

$(AndroidSdkBuildToolsVersion) MSBuild プロパティには、優先ビルド ツールのバージョンが含まれています。 .NET for Android ビルド システムでは、 Xamarin.Android.Common.targetsの既定値が提供されます。また、以前の aapt バージョンが動作することがわかっている間に最新の aapt がクラッシュした場合など、プロジェクト ファイル内で既定値をオーバーライドして代替ビルド ツール バージョンを選択できます。

AndroidSigningKeyAlias

キーストア内のキーに別名を指定します。 これは、キーストアを作成するときに使用される keytool -alias 値です。

AndroidSigningKeyPass

キーストア ファイル内にあるキーのパスワードを指定します。 これは、keytool が Enter key password for $(AndroidSigningKeyAlias) ($(AndroidSigningKeyAlias) のキーのパスワードを入力) を求めたときに入力される値です。

このプロパティは env: プレフィクスと file: のプレフィクスもサポートし、これらのプレフィクスを使って、パスワードが格納された環境変数やファイルを指定できます。 これらのオプションを使用すると、ビルド ログにパスワードが表示されないようにすることができます。

たとえば、AndroidSigningPassword という名前の環境変数を使用するには、次のようにします。

<PropertyGroup>
  <AndroidSigningKeyPass>env:AndroidSigningPassword</AndroidSigningKeyPass>
</PropertyGroup>

C:\Users\user1\AndroidSigningPassword.txt にあるファイルを使用するには、次のようにします。

<PropertyGroup>
  <AndroidSigningKeyPass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningKeyPass>
</PropertyGroup>

注意

env: プレフィックスは、$(AndroidPackageFormat) が aab に設定されている場合はサポートされません。

AndroidSigningKeyStore

keytool で作成されたキーストア ファイルのファイル名を指定します。 これは、keytool -keystore オプションで指定された値に対応します。

Androidサイニングストアパス

$(AndroidSigningKeyStore) へのパスワードを指定します。 これは、キーストア ファイルを作成していて、keytool (キーストア パスワードを入力) で求められたときに、 に指定する値です。

このプロパティは env: プレフィクスと file: のプレフィクスもサポートし、これらのプレフィクスを使って、パスワードが格納された環境変数やファイルを指定できます。 これらのオプションを使用すると、ビルド ログにパスワードが表示されないようにすることができます。

たとえば、AndroidSigningPassword という名前の環境変数を使用するには、次のようにします。

<PropertyGroup>
  <AndroidSigningStorePass>env:AndroidSigningPassword</AndroidSigningStorePass>
</PropertyGroup>

C:\Users\user1\AndroidSigningPassword.txt にあるファイルを使用するには、次のようにします。

<PropertyGroup>
  <AndroidSigningStorePass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningStorePass>
</PropertyGroup>

注意

env: プレフィックスは、$(AndroidPackageFormat) が aab に設定されている場合はサポートされません。

AndroidSigningPlatformKey

apk の署名に使用するキー ファイルを指定します。 これは system アプリケーションをビルドするときにのみ使用されます。

Android署名プラットフォーム証明書

apk の署名に使用する証明書ファイルを指定します。 これは system アプリケーションをビルドするときにのみ使用されます。

AndroidStripILAfterAOT

AOT コンパイル メソッドの メソッド本体 を削除するかどうかを指定する bool プロパティ。

既定値は falseであり、AOT コンパイル済みメソッドのメソッド本体 削除されません 。

trueに設定すると、$(AndroidEnableProfiledAot)は既定でfalseに設定されます。 つまり、サポートされている .NET 8 および .NET 9 の Mono Release ビルドでは、$(RunAOTCompilation) は既定で true であるため、Mono AOT はすべてに対して有効になります。 これにより、アプリのサイズが増える可能性があります。 この動作は、 $(AndroidEnableProfiledAot) をプロジェクト ファイル内の true に明示的に設定することでオーバーライドできます。

このプロパティの試験的なサポートは .NET 8 で追加され、.NET 10 では削除されました。

AndroidStripNativeLibraries

ネイティブ共有ライブラリ (.so ファイル) からデバッグ シンボルを削除するようにパッケージ化プロセスに指示する bool プロパティ。

既定値は false であり、パッケージ化時にデバッグ シンボル (存在する場合) は保持されます。

AndroidSupportedAbis

このプロパティは、.NET 6 以降ではサポートされなくなりました。 それを削除し、Android ABI 名ではなく.NET RID で$(RuntimeIdentifier)または$(RuntimeIdentifiers)を使用します。

たとえば、次の.NET 11 の設定には、サポートされているすべての CoreCLR アーキテクチャが含まれています。

<PropertyGroup>
  <RuntimeIdentifiers>android-arm;android-arm64;android-x64</RuntimeIdentifiers>
</PropertyGroup>

AndroidTlsProvider

このプロパティは廃止されているため、使用しないでください。

AndroidTypeMapImplementation

型マップの実装を選択する列挙型のプロパティ。 有効値は llvm-ir または trimmable です。

既定値は、$(PublishAot)がtrueされている場合はtrimmableされ、それ以外の場合はllvm-irされます。

AndroidUseApkSigner

apksigner ではなく jarsigner ツールを使用することを開発者に許可するブール型プロパティ。

AndroidUseDefaultAotProfile

開発者が既定の Mono AOT プロファイルの使用を抑制できるようにする bool プロパティ。

既定のプロファイルは、このプロパティが false に設定されていない限り、$(AndroidEnableProfiledAot)がtrueされるときに使用されます。

このプロパティは、Mono を使用する、サポートされている .NET 10 以前のプロジェクトに適用されます。 CoreCLR の MIBC プロファイルまたは動的 PGO は選択されません。

AndroidUseDesignerAssembly

ビルド システムが_Microsoft.Android.Resource.Designer.dllファイルではなくResource.Designer.csファイルを生成するかどうかを制御する bool プロパティ。 この利点は、アプリケーションが小さくなり、起動時間が短縮されるという利点があります。

既定値は .NET 8 で true されます。

下位互換性を維持する場合は、Nuget 作成者として 3 つのバージョンのアセンブリを出荷することをお勧めします。 1 つは MonoAndroid 用、1 つは net6.0-android 用、1 つは net8.0-android 用です。 これを行うには、 Xamarin.Legacy.Sdk を使用します。 これは、Nuget ライブラリ プロジェクトがプロジェクト内の AndroidResource 項目を使用する場合、または依存関係を介して使用する場合にのみ必要です。

<TargetFrameworks>monoandroid90;net6.0-android;net8.0-android</TargetFrameworks>

または、クラシックと net7.0-android の両方が非推奨になるまで、この設定をオフにします。

この設定をオフにすることを選択した .NET 8 プロジェクトでは、それを使用する参照を使用できません。 この機能が有効になっていないプロジェクトでこの機能が有効になっているアセンブリを使用しようとすると、 XA1034 ビルド エラーが発生します。

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

AndroidUseInstrumentation

テストホストや BenchmarkDotNet ホストなどの<activity/>ではなく、<instrumentation/>要素を介してアプリケーションが起動されることを示すブール型プロパティ。

trueすると、dotnet runは生成されたAndroidManifest.xmlから$(AndroidInstrumentation)を解決し、アプリが起動可能なアクティビティも宣言している場合でも、adb shell am instrumentで起動します。

既定値は、true が true の場合は $(EnableMSTestRunner)、それ以外の場合は false です。 起動可能な <activity/> がないアプリは、このプロパティに関係なく、 <instrumentation/> を介して起動されることに注意してください。

.NET 11 で導入されました。

AndroidUseInterpreter

MonoVM .apk に、通常の JIT ではなく Mono インタープリターが含まれるブール型プロパティ。 既定では、Mono を使用するデバッグ ビルドに対して True し、それ以外の場合は False します。

このプロパティは、Mono を使用する、サポートされている .NET 10 以前のプロジェクトに適用されます。 これは CoreCLR 設定ではなく、Android .NET 11 以降にはインタープリターがありません。

試験的です。

AndroidUseLegacyVersionCode

開発者が versionCode の計算を Xamarin.Android 8.2 前の動作に戻すことを許可するブール型プロパティ。 これは、Google Play ストアに既存のアプリケーションがある開発者に向けてのみ使用する必要があります。 新しい $(AndroidVersionCodePattern) プロパティを使用することを強くお勧めします。

AndroidUseManagedDesignTimeResourceGenerator

デザイン時のビルドを、aapt ではなく管理対象リソース パーサーの使用に切り替えるブール型プロパティ。

AndroidUseNegotiateAuthentication

AndroidMessageHandlerでの NTLMv2/Negotiate 認証のサポートを有効にするブール型プロパティ。 既定値は Falseです。

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

AndroidUseSharedRuntime

このプロパティは廃止されているため、使用しないでください。

AndroidVersionCode

/manifest/@android:versionCode ファイル内の AndroidManifest.xml の代替として使用できる MSBuild プロパティ。 この機能をオプトインするには、<GenerateApplicationManifest>true</GenerateApplicationManifest> も有効にする必要があります。 .NET 6 では今後、これが既定値になります。

$(AndroidCreatePackagePerAbi) と $(AndroidVersionCodePattern) が使用されている場合、このプロパティは無視されます。

@android:versionCode は、Google Play リリースごとにインクリメントする必要がある整数値です。 Android ドキュメントを参照して、/manifest/@android:versionCodeの要件の詳細を確認してください。

Androidバージョンコードパターン

開発者がマニフェスト内の versionCode をカスタマイズできるようにする文字列プロパティ。 versionCode の決定に関する情報は、「Creating the Version Code for the APK」 (APK のバージョン コードの作成) を参照してください。

いくつかの例では、abi が armeabi でマニフェスト内の versionCode が 123 の場合、{abi}{versionCode} が True のときには 1123 により $(AndroidCreatePackagePerAbi) の versionCode が生成され、それ以外のときは 123 の値が生成されます。 abi が x86_64 でマニフェスト内の versionCode は 44 です。 これにより、544 が True の場合には $(AndroidCreatePackagePerAbi) が生成され、それ以外の場合は 44 の値が生成されます。

versionCode を 0 でレフト パディングしているため、レフト パディングの書式文字列 {abi}{versionCode:0000} を含めると、50044 が生成されます。 または、 などの 10 進パディングを使用することもできます。 {abi}{versionCode:D4} は前の例と同じ動作になります。

値は整数である必要があるため、'0' と 'Dx' のパディングの書式文字列のみがサポートされます。

事前定義済みのキー項目

  • abi - アプリのターゲットとなる abi を挿入します

    • 2 – armeabi-v7a
    • 3 - x86
    • 4 - arm64-v8a
    • 5 - x86_64
  • minSDK - AndroidManifest.xml からサポートされている Sdk の最小値を挿入するか、定義されていない場合は 11 を挿入します。

  • versionCode - Properties\AndroidManifest.xml から直接バージョン コードを使用します。

$(AndroidVersionCodeProperties) プロパティ (次で定義) を使用してカスタム項目を定義することができます。

既定では、値は {abi}{versionCode:D6} に設定されます。 開発者が古い動作を保持する必要がある場合は、$(AndroidUseLegacyVersionCode) プロパティを true に設定することで既定値をオーバーライドできます。

AndroidVersionCodeProperties

$(AndroidVersionCodePattern) で使用するために、開発者がカスタム項目を定義できるようにする文字列プロパティ。 これらは key=value ペアの形式です。 value 内のすべての項目は整数値である必要があります。 (例: screen=23;target=$(_AndroidApiLevel))。 ご覧のとおり、既存またはカスタムの MSBuild プロパティを文字列で利用することができます。

ApplicationId

/manifest/@package ファイル内の AndroidManifest.xml の代替として使用できる MSBuild プロパティ。 この機能をオプトインするには、<GenerateApplicationManifest>true</GenerateApplicationManifest> も有効にする必要があります。 .NET 6 では今後、これが既定値になります。

Android ドキュメントを参照して、/manifest/@packageの要件の詳細を確認してください。

アプリケーションタイトル

/manifest/application/@android:label ファイル内の AndroidManifest.xml の代替として使用できる MSBuild プロパティ。 この機能をオプトインするには、<GenerateApplicationManifest>true</GenerateApplicationManifest> も有効にする必要があります。 .NET 6 では今後、これが既定値になります。

Android ドキュメントを参照して、/manifest/application/@android:labelの要件の詳細を確認してください。

アプリケーションバージョン

/manifest/@android:versionName ファイル内の AndroidManifest.xml の代替として使用できる MSBuild プロパティ。 この機能をオプトインするには、<GenerateApplicationManifest>true</GenerateApplicationManifest> も有効にする必要があります。 .NET 6 では今後、これが既定値になります。

Android ドキュメントを参照して、/manifest/@android:versionNameの要件の詳細を確認してください。

AotAssemblies

Mono によってアセンブリが Ahead-of-Time(AOT)コンパイルでネイティブ コードにコンパイルされ、アプリケーションに含まれるかどうかを決定するブール型プロパティ。 指定しない場合、有効な値は $(RunAOTCompilation) に従います。デバッグ ビルドのFalseと、サポートされている .NET 10 以前のターゲット フレームワークで Mono を使用するリリース ビルドのTrue。

.NET 7 では非推奨です。 Mono を使用するサポート.NET 10 以前のプロジェクトの場合は、代わりに $(RunAOTCompilation) MSBuild プロパティに移行します。 falseに設定するなど、$(AotAssemblies)を指定すると、XA1029 警告が出力されます。 CoreCLR または NativeAOT に対してtrueに設定すると、既定のロジックが$(AotAssemblies)を$(RunAOTCompilation)に転送するため、$(RunAOTCompilation)が設定されていない (またはtrueに評価される) と、ビルド停止 XA1044 エラーが発生します。

.NET 11 CoreCLR プロジェクトの場合は、$(RunAOTCompilation)を追加せずに$(AotAssemblies)を削除します。 CoreCLR は Mono AOT パイプラインを使用しません。

AProfUtilExtraOptions

サポートされている .NET 10 以前のプロジェクトで従来の Mono AOT プロファイリング ターゲットを使用する場合に、aprofutilに渡す追加のオプション。

BeforeBuildAndroidAssetPacks

このプロパティに記載されている MSBuild ターゲットは、 AssetPack 項目がビルドされる直前に実行されます。

.NET 9 で追加

BeforeGenerateAndroidManifest

このプロパティに一覧表示されている MSBuild ターゲットは、_GenerateJavaStubs の前に直接実行されます。

構成

使用するビルド構成 ("Debug" や "Release" など) を指定します。 Configuration プロパティは、ターゲットの動作を決定するその他のプロパティの既定値を決定するために使用されます。 追加の構成は、IDE 内で作成できます。

既定では、Debug の構成により、以下の結果となります Install および SignAndroidPackage は、動作するために他のファイルやパッケージの存在を必要とする、より小さい Android パッケージを作成することを目的としています。

既定の Release 構成によって Install および SignAndroidPackage 単独で動作する Android パッケージの作成を目指します。これにより、他のパッケージやファイルをインストールせずに使用できます。

デバッグシンボル

プロパティと組み合わせて、Android パッケージが "デバッグ可能" かどうかを決定するブール値。$(DebugType) デバッグ可能なパッケージは、デバッグ シンボルを含んでいて、//application/@android:debuggable 属性を true に設定し、自動的に追加します。 INTERNET のアクセス許可を設定し、デバッガーがプロセスにアタッチできるようにします。 DebugSymbols が True "かつ" DebugType が空の文字列または Full の場合、アプリケーションはデバッグ可能です。

DebugType

ビルドの一部として生成するためのデバッグ シンボルの型を指定します。これはアプリケーションがデバッグ可能かどうかにも影響します。 考えられる値:

  • Full: 完全なシンボルが生成されます。 もし DebugSymbols MSBuild プロパティも True の場合、アプリケーション パッケージはデバッグ可能です。

  • PdbOnly: "PDB" シンボルが生成されます。 アプリケーション パッケージはデバッグ可能ではありません。

DebugType が設定されていないか、空の文字列の場合、DebugSymbols プロパティが、アプリケーションがデバッグ可能かどうかを制御します。

デバイス

デバイス (dotnet run --device <Device>、Run、Installなど) と対話するUninstallまたは MSBuild ターゲットを使用する場合にターゲットとする Android デバイスまたはエミュレーターを指定します。

値は、 adb devicesによって返される完全なデバイスのシリアル番号または識別子である必要があります。 たとえば、デバイスのシリアルが emulator-5554されている場合は、 -p:Device=emulator-5554を使用する必要があります。

このプロパティを設定すると、値AdbTargetを使用して -s "<Device>" プロパティを初期化するために使用されます。

デバイスの選択の詳細については、 .NET SDK デバイスの選択仕様を参照してください。

診断アドレス

dotnet-dsrouter、127.0.0.1または$(DiagnosticConfiguration)の IP アドレス コンポーネントなど、DOTNET_DiagnosticPortsによって提供される値。

このプロパティが空でない場合、 $(AndroidEnableProfiler) が明示的に false に設定されていない場合、Android 診断が暗黙的に有効になります。 CoreCLR の場合、結果の TCP エンドポイントは通常ループバックに保持され、 dotnet-dsrouterによって使用されます。 Android エミュレーターの場合は、10.0.2.2を使用して開発マシンに到達します。物理デバイスの場合は、dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Androidによって Android ポートフォワーディングが有効になっている127.0.0.1を使用します。

既定値は 127.0.0.1 です。

診断設定

dotnet-dsrouterのためにDOTNET_DiagnosticPortsによって提供される値は次のようになります。

  • 127.0.0.1:9000,connect,suspend
  • 127.0.0.1:9000,connect,nosuspend

明示的な構成なしで診断が有効になっている場合、派生する既定値はアドレス 127.0.0.1、ポート 9000、 DiagnosticSuspend=false、および DiagnosticListenMode=connectです。

コマンドラインから dotnet build に , という文字を指定する場合は、%2c でエスケープする必要がある点に注意してください。

dotnet build -c Release -p:DiagnosticConfiguration=127.0.0.1:9000%2cconnect%2csuspend

これにより、アプリケーション内にパッケージ化された DOTNET_DiagnosticPorts 環境変数が自動的に設定されます。 connect モードでは、Android ランタイムは構成済みの TCP エンドポイントに接続し、その接続をローカル診断ツールにブリッジdotnet-dsrouterします。 エンドポイントは認証されず、暗号化されていないため、ローカルの開発インターフェイスに保持します。

このプロパティまたは以下のいずれかのコンポーネント プロパティを設定すると、 $(AndroidEnableProfiler) が明示的に false に設定されていない場合、Android 診断が暗黙的に有効になります。

DiagnosticListenMode

dotnet-dsrouter、connect、または$(DiagnosticConfiguration)のリッスンモードコンポーネントなど、DOTNET_DiagnosticPortsによって提供される値。

このプロパティが空でない場合、 $(AndroidEnableProfiler) が明示的に false に設定されていない場合、Android 診断が暗黙的に有効になります。

既定値は connect です。

DiagnosticPort

dotnet-dsrouter、9000または$(DiagnosticConfiguration)のポート コンポーネントなど、DOTNET_DiagnosticPortsによって提供される値。

このプロパティが空でない場合、 $(AndroidEnableProfiler) が明示的に false に設定されていない場合、Android 診断が暗黙的に有効になります。

既定値は 9000 です。

DiagnosticSuspend (ダイアグノスティックサスペンド)

dotnet-dsrouterやtrue/suspend、false/nosuspendまたは$(DiagnosticConfiguration)のコンポーネントなど、DOTNET_DiagnosticPortsによって提供されるブール値。

このプロパティが空でない場合、 $(AndroidEnableProfiler) が明示的に false に設定されていない場合、Android 診断が暗黙的に有効になります。

既定値は false です。

EmbedAssembliesIntoApk

アプリのアセンブリをアプリケーション パッケージに埋め込む必要があるかどうかを決定するブール型プロパティ。

このプロパティは、 $(AndroidEnableFastDeployment)の逆です。 新しいプロジェクトでは、 $(AndroidEnableFastDeployment) を使用して高速展開を制御する必要があります。 両方のプロパティが設定されている場合は、 $(EmbedAssembliesIntoApk) が優先されます。

このプロパティは、リリース ビルドには True、デバッグ ビルドには False にする必要があります。 高速展開でターゲット デバイスがサポートされない場合は、デバッグ ビルドでこのプロパティを にする必要があるTrue。

クラッシュ レポートを有効にする

CoreCLR または NativeAOT ランタイムの使用時に、環境変数 1 を DOTNET_EnableCrashReport に設定するブール型プロパティ。 これにより、アプリケーションの起動時にクラッシュ レポートを生成できます。

このプロパティは既定で False され、 $(UseMonoRuntime) が Trueされている場合は無視されます。

診断機能を有効化

選択したランタイムの診断を有効にする Android SDK/MSBuild プロパティ。 Mono アプリケーションの $(AndroidEnableProfiler) のシノニムです。 CoreCLR の場合、 dotnet-trace および dotnet-gcdumpで使用される診断ポート構成が有効になります。

$(EnableDiagnostics) は、CoreCLR ランタイム環境変数 DOTNET_EnableDiagnosticsと同じではありません。 前者は Android SDK/MSBuild ターゲットによって評価されます。後者は、環境変数として指定されるとランタイムによって読み取られます。

このプロパティは既定で False です。

EnableLLVM

Ahead-of-Time でアセンブリをネイティブ コードにコンパイルするときに、MONO AOT コンパイラで LLVM を使用するかどうかを決定するブール型プロパティ。

このプロパティが有効になっているプロジェクトをビルドするには、Android NDK がインストールされている必要があります。

このプロパティは既定で False です。

このプロパティは、Mono を使用する、サポートされている .NET 10 以前のプロジェクトに適用され、$(RunAOTCompilation) が True の場合にのみコンパイルに影響します。

このプロパティを CoreCLR または NativeAOT の true に設定すると、 false にリセットされ、 XA1044 でビルドが停止されます。

EnableMSTestRunner

Android テスト プロジェクトの MSTest ランナー を有効にするブール型プロパティ。 trueに設定すると、dotnet runはam startではなくam instrument経由でアプリケーションを起動し、Android のインストルメンテーション プロトコルを使用してテスト結果を報告できるようにします。

このプロパティは既定で False です。

.NET 11 で導入されました。

EnableProguard

proguard を Java コードをリンクするパッケージ化プロセスの一部として実行するかどうかを決定するブール型プロパティ。

このプロパティは既定で False です。

True の場合、@(ProguardConfiguration) ファイルは proguard の実行を制御するために使用されます。

EventSourceSupport

falseに設定すると、トリミングされた Android アプリケーションで .NET の EventSource のサポートが無効になります。 この機能を無効にすると、 dotnet-counters などの .NET 診断ツールは機能しなくなりますが、アプリケーション サイズが小さいという利点があります。

falseまたはReleaseが有効になっていない限り、$(EnableDiagnostics) モードでは既定で$(AndroidEnableProfiler)に設定されます。

アプリケーションマニフェストを生成する

最終的な AndroidManifest.xml ファイルに値を出力する次の MSBuild プロパティを有効または無効にします。

既定値 $(GenerateApplicationManifest) は trueです。

JavaMaximumHeapSize

java プロパティで指定された値を使用して、パッケージ化プロセスの一部として -Xmx.dex ファイルをビルドします。 指定されていない場合、-Xmx オプションでは java に 1G の値が指定されます。 その他のプラットフォームに比べて、Windows では一般的にこの値が必要なことがわかりました。

_CompileDex ターゲットが java.lang.OutOfMemoryError をスローする場合には、このプロパティを指定する必要があります。

以下を変更することで値をカスタマイズします。

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

java ファイルのビルド時に、.dex に渡すコマンドラインオプションを指定します。

JarsignerTimestampAuthorityCertificateAlias

このプロパティを使用すると、タイムスタンプ認証機関のキーストアに別名を指定できます。 詳細については、Java の署名のタイムスタンプのサポートに関するドキュメントを参照してください。

<PropertyGroup>
    <JarsignerTimestampAuthorityCertificateAlias>Alias</JarsignerTimestampAuthorityCertificateAlias>
</PropertyGroup>

JarsignerTimestampAuthorityUrl

このプロパティでは、タイムスタンプ機関サービスへの URL を指定できます。 これを使用して、.apk 署名に確実にタイムスタンプを含めるようにすることができます。 詳細については、Java の署名のタイムスタンプのサポートに関するドキュメントを参照してください。

<PropertyGroup>
    <JarsignerTimestampAuthorityUrl>http://example.tsa.url</JarsignerTimestampAuthorityUrl>
</PropertyGroup>

LinkerDumpDependencies

リンカーの依存関係ファイルの生成を有効にするブール型プロパティ。 このファイルは、illinkanalyzer ツールに対する入力として使用できます。

linker-dependencies.xml.gz という名前の依存関係ファイルがプロジェクト ディレクトリに書き込まれます。 .NET5 または 6 では、obj/<Configuration>/android<ABI>/linked ディレクトリ内のリンク アセンブリの横に書き込まれます。

既定値は Falseです。

MandroidI18n

この MSBuild プロパティは廃止され、サポートされなくなりました。

MauiEnableFullReadyToRun

CoreCLR を使用し、ReadyToRun を有効にしたRelease構成で組み込まれている、.NET MAUI Android アプリケーションのブール型プロパティ。 このプロパティが設定されていないか false場合、MAUI は既定の MIBC プロファイルで部分的な ReadyToRun を使用します。 完全な ReadyToRun を有効にするには、このプロパティを true に設定します。 $(PublishReadyToRun)がfalseされている場合、このプロパティは無効です。

Full ReadyToRun を使用すると、アプリケーションとダウンロードのサイズが増えますが、プリコンパイルされるメソッドが増えるため、実行時のパフォーマンスが向上する可能性があります。

.NET MAUIでの CoreCLR と ReadyToRun の詳細については、「.NET MAUIでのランタイムとコンパイル」を参照してください。

MetricsSupport

falseに設定すると、トリミングされた Android アプリケーション向けの .NET の メトリック サポートが無効になります。 この機能を無効にすると、 System.Diagnostics.Metrics などの API は機能しなくなりますが、アプリケーション サイズが小さくなるという利点があります。

falseまたはReleaseが有効になっていない限り、$(EnableDiagnostics) モードでは既定で$(AndroidEnableProfiler)に設定されます。

MonoAndroidAssetPrefix

ファイル名の先頭から削除される "パス プレフィックス" を、AndroidAsset として指定します。 これにより、リソースがある場所を変更することができます。

既定値は Assets です。 Java プロジェクトの構造には、これを assets に変更します。

MonoAndroidResourcePrefix

ファイル名の先頭から削除される "パス プレフィックス" を、AndroidResource として指定します。 これにより、リソースがある場所を変更することができます。

既定値は Resources です。 Java プロジェクトの構造には、これを res に変更します。

MonoSymbolArchive

注意

これは Xamarin.Android のレガシ MSBuild プロパティでした。 .NET 6 以降では使用できません。

"実際の" ファイル名と行番号の情報をリリース スタック トレースから抽出するために、後で .mSYM で使用するための mono-symbolicate 成果物を作成するかどうかを制御するブール型プロパティ。

これは、デバッグ シンボルが有効になっている リリース アプリ に対しては、既定で True になっています: $(EmbedAssembliesIntoApk) が True、 $(DebugSymbols) が True であり、 $(Optimize) が True。

PublishReadyToRun

CoreCLR を使用するときにアセンブリを ReadyToRun 形式にコンパイルするかどうかを制御するブール型プロパティ。 ReadyToRun アセンブリには、MSIL とネイティブ コードの両方が含まれています。 これにより、JIT の互換性を維持しながらアプリケーションの起動時間を短縮できますが、アプリケーションとダウンロードのサイズが増加します。

CoreCLR を使用する Android アプリケーションでは、このプロパティの既定値は true 構成では Release であり、Debug 構成では既定で有効になっていません。 Mono または NativeAOT を使用する場合、ReadyToRun は適用されません。

ReadyToRun にはトリミングが必要です。 $(PublishTrimmed)がtrueされていない場合、Android の.NETはPublishReadyToRunと$(PublishReadyToRunComposite)を無効にし、警告 XA0119 を出力します。

ReadyToRun コンパイルは、既定では複合です。 $(PublishReadyToRunComposite)を参照してください。 .NET MAUI では、既定の MIBC プロファイルを使用した partial ReadyToRun も使用します。 完全な ReadyToRun にオプトインする $(MauiEnableFullReadyToRun) を参照してください。

詳細については、「.NET MAUIでのランタイムとコンパイル」を参照してください。

PublishReadyToRunComposite

ReadyToRun コンパイルでアプリケーション アセンブリを複合イメージに結合するかどうかを制御するブール型プロパティ。 複合 ReadyToRun を使用すると、アセンブリ間の最適化が可能になりますが、ビルド時間が長くなる可能性があります。

CoreCLR を使用する Android アプリケーションでは、true が true の場合、このプロパティの既定値は $(PublishReadyToRun) です。 複合 ReadyToRun を含む ReadyToRun では、$(PublishTrimmed) は true である必要があります。

RunAOTCompilation

アセンブリを Mono AOT コンパイラで Ahead-of-Time(AOT)コンパイルし、Mono ランタイムを使用するアプリケーションに含めるかどうかを決定する真偽値プロパティ。 このプロパティは、Debug ビルドでは既定で Release になり、サポートされている .NET 10 以前のターゲット フレームワークで Mono を使用する False ビルドでは既定で True になります。

この MSBuild プロパティは、Xamarin.Android の msBuild プロパティ $(AotAssemblies) 置き換えます。 これは、Blazor WASM に使用されるのと同じプロパティです。

このプロパティでは、ReadyToRun または NativeAOT は有効になりません。 CoreCLR または NativeAOT の true に設定すると、 false にリセットされ、 XA1044 でビルドが停止されます。

CoreCLR ではそれを false に設定すると、プロパティを暗黙的に無視するのではなく、XA1044 でビルドも停止します。 .NET 11 以降では、$(RunAOTCompilation)を削除し、$(PublishReadyToRun)を false に設定して ReadyToRun (R2R) AOT コンパイルを無効にします。

NativeAOT の $(RunAOTCompilation) を false に設定することは引き続き許可されます。

UseMonoRuntime

.NET 10 以前でサポートされるターゲットにおいて、Android アプリケーションが CoreCLR ではなく Mono ランタイムを使用するかどうかを制御するブール型プロパティです。 このプロパティを false に設定するとそれらのターゲットで Mono が使用され、true に設定すると CoreCLR が使用されます。 true に設定されている場合、$(PublishAot) が優先され、サポートされているパブリッシュまたは最適化ビルドでは NativeAOT を選択します。

このプロパティは、.NET 10 以前では既定で true であるため、Android アプリケーションでは Mono が使用されます。 .NET 11 以降では、既定でfalseされるため、Android アプリケーションでは CoreCLR が使用され、明示的なtrue値はNETSDK1242で拒否されます。

詳細については、「.NET MAUIでのランタイムとコンパイル」を参照してください。

WaitForExit

Android アプリケーションを起動するときの dotnet run の動作を制御するブール型プロパティ。

$(WaitForExit)がfalseされていない場合 (既定値)、dotnet runは次のようになります。

  • Android アプリケーションを起動する
  • アプリケーションのプロセス用にフィルター処理されたストリームlogcat出力
  • アプリケーションが終了するか、ユーザーが Ctrl + C キーを押すのを待ちます
  • Ctrl + C キーを押したときにアプリケーションを強制停止する

$(WaitForExit)がfalseされると、dotnet runは単にアプリケーションを起動し、アプリケーションの終了や出力のストリーミングを待たずに直ちに戻ります。

このプロパティは、アプリケーションが$(AndroidInstrumentation)を介して起動されたときに-wadb shell am instrumentを渡すかどうかを制御します。

$(WaitForExit) <activity/> を起動 <instrumentation/> を起動
true (既定値) adb shell am start -S -W adb shell am instrument -w -r
false adb shell am start -S adb shell am instrument -r

adb shell am instrumentインストルメンテーションが完了した後にのみ結果を報告するため、インストルメンテーションの出力または意味のある終了コードが必要な場合は、$(WaitForExit)をfalseすることはできません。 これは、テストの実行や BenchmarkDotNet ホストなどのシナリオで重要であるため、 dotnet test は常に既定値を使用します。

.NET 11 で導入されました。