次の方法で共有


ビルド項目

ビルド 項目は、.NET for Android アプリケーションまたはライブラリ プロジェクトのビルド方法を制御します。

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

Note

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

AndroidAdditionalJavaManifest

<AndroidAdditionalJavaManifest> は、依存関係の検証に必要な追加の POM ファイルを指定するために、 Java 依存関係解決 と組み合わせて使用されます。 これらは、多くの場合、Java ライブラリの POM ファイルによって参照される親またはインポートされた POM ファイルです。

<ItemGroup>
  <AndroidAdditionalJavaManifest Include="mylib-parent.pom" JavaArtifact="com.example:mylib-parent" JavaVersion="1.0.0" />
</ItemGroup>

次の MSBuild メタデータが必要です。

  • %(JavaArtifact): 指定された POM ファイルと一致する Java ライブラリのグループ ID と成果物 ID {GroupId}:{ArtifactId}
  • %(JavaVersion): 指定した POM ファイルに一致する Java ライブラリのバージョン。

詳細については、 Java 依存関係解決のドキュメント を参照してください。

このビルド アクションは.NET 9 で導入されました。

AndroidAsset

Java Android プロジェクトの assets フォルダーに含まれるファイルである Android アセットをサポートしています。

.NET 9 以降では、 @(AndroidAsset) ビルド アクションでは、 Asset Pack を生成するための追加のメタデータもサポートされています。 %(AndroidAsset.AssetPack)メタデータを使用して、その名前のアセット パックを自動的に生成できます。 この機能は、 $(AndroidPackageFormat).aab に設定されている場合にのみサポートされます。 次の例では、 movie2.mp4movie3.mp4 を個別のアセット パックに配置します。

<ItemGroup>
   <AndroidAsset Update="Asset/movie.mp4" />
   <AndroidAsset Update="Asset/movie2.mp4" AssetPack="assets1" />
   <AndroidAsset Update="Asset/movie3.mp4" AssetPack="assets2" />
</ItemGroup>

この機能を使用すると、通常は Google Play の最大パッケージ サイズ制限を超える大きなファイルをアプリケーションに含めることができます。

多数の資産がある場合は、 base アセット パックを使用する方が効率的な場合があります。 このシナリオでは、すべての資産を 1 つの資産パックに含まれるよう更新し、 AssetPack="base" メタデータを使用して、ベース aab ファイルに最終的に含まれる特定の資産を宣言します。 これにより、ワイルドカードを使用して、ほとんどのアセットをアセット パックに移動できます。

<ItemGroup>
   <AndroidAsset Update="Assets/*" AssetPack="assets1" />
   <AndroidAsset Update="Assets/movie.mp4" AssetPack="base" />
   <AndroidAsset Update="Assets/some.png" AssetPack="base" />
</ItemGroup>

この例では、 movie.mp4some.png は最終的に base aab ファイルに入り、他のすべてのアセットは assets1 アセット パックに入ります。

追加のメタデータは、.NET for Android 9 以降でのみサポートされています。

AndroidAarLibrary

.aar ファイルを直接参照するには、AndroidAarLibrary のビルド アクションを使用する必要があります。 このビルド アクションは、Xamarin コンポーネントで最もよく使用されます。 つまり、Google Play やその他のサービスを動作させるために必要な .aar ファイルへの参照を含めるためです。

このビルド アクションを使用するファイルは、ライブラリ プロジェクトで見つかる埋め込みリソースと同様に扱われます。 .aar は、中間ディレクトリに抽出されます。 次に、すべてのアセット、リソース、.jar ファイルが、適切な項目グループに含まれます。

AndroidAotProfile

ガイド付き AOT のプロファイルでの使用を目的に、AOT プロファイルを提供するために使用されます。

また、Visual Studio から、AOT プロファイルを含むファイルに AndroidAotProfile ビルド アクションを設定して使用することもできます。

AndroidAppBundleMetaDataFile

Android App Bundle にメタデータとして含めるファイルを指定します。 フラグ値の形式は <bundle-path>:<physical-file> です。ここで、bundle-path は App Bundle のメタデータ ディレクトリ内のファイルの場所を示し、physical-file は格納する生データを含む既存のファイルです。

<ItemGroup>
  <AndroidAppBundleMetaDataFile
    Include="com.android.tools.build.obfuscation/proguard.map:$(OutputPath)mapping.txt"
  />
</ItemGroup>

詳しくは、bundletool のドキュメントをご覧ください。

AndroidBoundLayout

$(AndroidGenerateLayoutBindings) プロパティが false に設定されている場合にレイアウト ファイルに対してコードビハインドが生成されることを示します。 他のすべての側面では、 AndroidResourceと同じです。

このアクションは、次のレイアウト ファイルでのみ使用できます。

<AndroidBoundLayout Include="Resources\layout\Main.axml" />

AndroidEnvironment

AndroidEnvironment のビルド アクションを持つファイルは、プロセスの起動時に環境変数とシステム プロパティを初期化するために使用されます。 AndroidEnvironment ビルド アクションは、複数のファイルに適用でき、任意の順序で評価されます (そのため、複数のファイルで同じ環境変数またはシステム プロパティを指定しないでください)。

AndroidGradleProject

<AndroidGradleProject> を使用して、Android Studio または elsewehere で作成された Android Gradle プロジェクトの出力をビルドして使用できます。

Includeメタデータは、プロジェクトのビルドに使用される最上位レベルのbuild.gradleまたはbuild.gradle.ktsファイルを指している必要があります。 これは Gradle プロジェクトのルート ディレクトリにあり、 gradlew ラッパー スクリプトも含まれている必要があります。

<ItemGroup>
  <AndroidGradleProject Include="path/to/project/build.gradle.kts" ModuleName="mylibrary" />
</ItemGroup>

次の MSBuild メタデータがサポートされています。

  • %(Configuration): 指定されたプロジェクトまたはプロジェクト モジュールのビルドまたはアセンブルに使用する構成の名前。 既定値は Release です。
  • %(ModuleName): ビルドする module またはサブプロジェクト の名前。 既定値は空です。
  • %(OutputPath): Gradle プロジェクトのビルド出力パスをオーバーライドするように設定できます。 既定値は $(IntermediateOutputPath)gradle/%(ModuleName)%(Configuration)-{Hash} です。
  • %(CreateAndroidLibrary): 出力 AAR ファイルがプロジェクトに AndroidLibrary として追加されます。 %(Bind)%(Pack)などの<AndroidLibrary>でサポートされるメタデータは、設定されている場合に転送されます。 既定値は true です。

このビルド アクションは.NET 9 で導入されました。

AndroidJavaLibrary

AndroidJavaLibrary のビルド アクションを持つファイルは、最終的な Android パッケージに含まれる Java アーカイブ (.jar ファイル) です。

AndroidIgnoredJavaDependency

<AndroidIgnoredJavaDependency> は、 Java 依存関係解決と組み合わせて使用されます。

これは、無視する必要がある Java 依存関係を指定するために使用されます。 これは、Java の依存関係解決で検出できない方法で依存関係が満たされる場合に使用できます。

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations" Version="2.15.0" />
</ItemGroup>

次の MSBuild メタデータが必要です。

  • %(Version): 指定した %(Include)に一致する Java ライブラリのバージョン。

詳細については、 Java 依存関係解決のドキュメント を参照してください。

このビルド アクションは.NET 9 で導入されました。

AndroidJavaSource

AndroidJavaSource のビルド アクションを持つファイルは、最終的な Android パッケージに含まれる Java ソース コードです。

.NET 7 以降では、プロジェクト ディレクトリ内のすべての **\*.java ファイルが AndroidJavaSource のビルド アクションを持ち、"かつ" Assembly ビルドの前にバインドされます。 **\*.java ファイル内に存在する型とメンバーを、C# コードが簡単に使用できるようにします。

この動作を無効にするには、%(AndroidJavaSource.Bind) を False に設定します。

AndroidLibrary

Androidlibrary は、プロジェクトへの .jar.aar のファイルの含め方を簡略化するための新しいビルド アクションです。

どのプロジェクトでも以下を指定できます。

<ItemGroup>
  <AndroidLibrary Include="foo.jar" />
  <AndroidLibrary Include="bar.aar" />
</ItemGroup>

上記のコード スニペットの結果は、.NET for Android プロジェクトの種類ごとに異なる効果があります。

  • アプリケーションおよびクラス ライブラリ プロジェクト:
  • Java バインド プロジェクト:

この単純化は、Androidlibrary をどこでも使用できることを意味します。

AndroidLintConfig

ビルド アクション 'AndroidLintConfig' は、 プロパティと組み合わせて使用する必要があります。$(AndroidLintEnabled) プロパティ。 このビルド アクションを含むファイルはマージされ、Android の lint ツールに渡されます。 これは、有効および無効にするテストに関する情報を含んだ XML ファイルになります。

詳細については、Lint に関するドキュメントを参照してください。

AndroidManifestOverlay

AndroidManifestOverlay ビルド アクションを使用して、AndroidManifest.xml ファイルを Manifest Merger ツールに提供できます。 このビルド アクションを含むファイルは、メインの AndroidManifest.xml ファイルと、参照からのマニフェスト ファイルと共に、Manifest Merger ツールに渡されます。 これらは、最終的なマニフェストにマージされます。

このビルド アクションを使用すると、ビルド構成に応じて変更や設定をアプリに提供できます。 たとえば、デバッグ中にのみ特定のアクセス許可が必要な場合は、オーバーレイを使用してデバッグ時にそのアクセス許可を挿入できます。 たとえば、次のようなオーバーレイ ファイルのコンテンツがあるとします。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.CAMERA" />
</manifest>

以下を使用すると、デバッグ ビルドにマニフェスト オーバーレイを追加できます。

<ItemGroup>
  <AndroidManifestOverlay Include="DebugPermissions.xml" Condition=" '$(Configuration)' == 'Debug' " />
</ItemGroup>

AndroidInstallModules

アプリ バンドルをインストールするときに bundletool コマンドによってインストールされるモジュールを指定します。

AndroidMavenLibrary

<AndroidMavenLibrary> では、Maven アーティファクトを指定できます。Maven アーティファクトは自動的にダウンロードされ、Android 用 .NET バインド プロジェクトに追加されます。 これは、Maven でホストされている成果物の Android バインド用の .NET のメンテナンスを簡略化するのに役立ちます。

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidMavenLibrary Include="com.squareup.okhttp3:okhttp" Version="4.9.3" />
</ItemGroup>

次の MSBuild メタデータがサポートされています。

  • %(Version): %(Include)によって参照される Java ライブラリの必須バージョン。
  • %(Repository): 使用するオプションの Maven リポジトリ。 サポートされている値は、Maven リポジトリへの Central (既定)、 Google、または https URL です。

<AndroidMavenLibrary>項目はAndroidLibraryに変換されるため、%(Bind)%(Pack)などの<AndroidLibrary>でサポートされるメタデータもサポートされます。

詳細については、 AndroidMavenLibrary のドキュメント を参照してください。

このビルド アクションは.NET 9 で導入されました。

AndroidNativeLibrary

ネイティブ ライブラリは、そのビルド アクションを AndroidNativeLibrary に設定することで、ビルドに追加されます。

Android では、複数のアプリケーション バイナリ インターフェイス (ABI) をサポートしているため、ビルド システムではネイティブ ライブラリがどの ABI に対してビルドされているかを知る必要があります。 ABI を指定する方法は 2 つあります。

  1. パス "スニッフィング"。
  2. %(Abi) 項目メタデータを使用する。

パス スニッフィングを使用すると、ネイティブ ライブラリの親ディレクトリ名が、ライブラリがターゲットとする ABI を指定するために使用されます。 したがって、ビルドに lib/armeabi-v7a/libfoo.so を追加すると、ABI は armeabi-v7a として "スニッフィング" されます。

項目属性名

Abi – ネイティブ ライブラリの ABI を指定します。

<ItemGroup>
  <AndroidNativeLibrary Include="path/to/libfoo.so">
    <Abi>armeabi-v7a</Abi>
  </AndroidNativeLibrary>
</ItemGroup>

AndroidPackagingOptionsExclude

最終的なパッケージから項目を除外できるファイル glob 互換項目のセット。 既定値は次のとおりです。

<ItemGroup>
	<AndroidPackagingOptionsExclude Include="DebugProbesKt.bin" />
	<AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>

項目では、 *?などのワイルドカードにファイル BLOB 文字を使用できます。 ただし、これらのアイテムは URL でエンコードするか、 $([MSBuild]::Escape(''))使用する必要があります。 これは、MSBuild が実際のファイル ワイルドカードとして解釈を試みないようにするためです。

次に例を示します。

<ItemGroup>
	<AndroidPackagingOptionsExclude Include="%2A.foo_%2A" />
  <AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>

注: *? 、および . は、 BuildApk タスクで適切なファイル glob に置き換えられます。

既定のファイル glob が制限が厳しすぎる場合は、csproj に以下を追加して削除できます

<ItemGroup>
	<AndroidPackagingOptionsExclude Remove="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>

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

AndroidPackagingOptionsInclude

最終的なパッケージから項目を含めるファイル glob 互換項目のセット。 既定値は次のとおりです。

<ItemGroup>
	<AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.kotlin_builtins')" />
</ItemGroup>

項目では、 *?などのワイルドカードにファイル BLOB 文字を使用できます。 ただし、これらの項目では URL エンコードまたは '$([MSBuild]::Escape(''))' を使用する必要があります。 これは、MSBuild が実際のファイル ワイルドカードとして解釈を試みないようにするためです。 次に例を示します。

<ItemGroup>
	<AndroidPackagingOptionsInclude Include="%2A.foo_%2A" />
  <AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>

注: *? 、および . は、 BuildApk タスクで適切なファイル glob に置き換えられます。

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

AndroidResource

AndroidResource ビルド アクションを持つすべてのファイルは、ビルド プロセス中に Android リソースにコンパイルされ、$(AndroidResgenFile) を介してアクセスできます。

<ItemGroup>
  <AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>

上級ユーザーであれば、同じ効果的なパスを使用して、別の構成で使用されている別のリソースを使用したいと考えるかもしれません。 これは、複数のリソース ディレクトリとファイルにこれらの異なるディレクトリ内で同じ相対パスを持たせ、MSBuild 条件を使用して、異なる構成の異なるファイルを条件付きで含めることで実現できます。 次に例を示します。

<ItemGroup Condition=" '$(Configuration)' != 'Debug' ">
  <AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
<ItemGroup  Condition=" '$(Configuration)' == 'Debug' ">
  <AndroidResource Include="Resources-Debug\values\strings.xml"/>
</ItemGroup>
<PropertyGroup>
  <MonoAndroidResourcePrefix>Resources;Resources-Debug</MonoAndroidResourcePrefix>
</PropertyGroup>

LogicalName – リソース パスを明示的に指定します。 ファイルの "別名定義" を許可して、複数の個別のリソース名として使用できるようにします。

<ItemGroup Condition="'$(Configuration)'!='Debug'">
  <AndroidResource Include="Resources/values/strings.xml"/>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
  <AndroidResource Include="Resources-Debug/values/strings.xml">
    <LogicalName>values/strings.xml</LogicalName>
  </AndroidResource>
</ItemGroup>

コンテンツ

通常の Content ビルド アクションはサポートされていません (コストのかかる可能性がある最初の実行手順を行わずにサポートする方法が見つかっていないからです)。

@(Content) ビルド アクションを使用しようとすると、XA0101警告が表示されます。

EmbeddedJar

.NET for Android バインド プロジェクトでは、 EmbeddedJar ビルド アクションによって Java/Kotlin ライブラリがバインドされ、 .jar ファイルがライブラリに埋め込まれます。 .NET for Android アプリケーション プロジェクトがライブラリを使用すると、C# から Java/Kotlin API にアクセスできるほか、最終的な Android アプリケーションに Java/Kotlin コードを含めることができます。

代わりに、 AndroidLibrary ビルド アクションを次のような代替手段として使用する必要があります。

<Project>
  <ItemGroup>
    <AndroidLibrary Include="Library.jar" />
  </ItemGroup>
</Project>

EmbeddedNativeLibrary

.NET for Android クラス ライブラリまたは Java バインド プロジェクトでは、 EmbeddedNativeLibrary ビルド アクションによって、 lib/armeabi-v7a/libfoo.so などのネイティブ ライブラリがライブラリにバンドルされます。 .NET for Android アプリケーションがライブラリを使用すると、 libfoo.so ファイルが最終的な Android アプリケーションに含まれます。

代わりに、 AndroidNativeLibrary ビルド アクションを使用できます。

EmbeddedReferenceJar

.NET for Android バインド プロジェクトでは、 EmbeddedReferenceJar ビルド アクションによって .jar ファイルがライブラリに埋め込まれますが、 EmbeddedJar のように C# バインドは作成されません 。 .NET for Android アプリケーション プロジェクトがライブラリを使用すると、最終的な Android アプリケーションに Java/Kotlin コードが含まれます。

AndroidLibraryビルド アクションは、<AndroidLibrary Include="..." Bind="false" />などの代替手段として使用できます。

<Project>
  <ItemGroup>
    <!-- A .jar file to bind & embed -->
    <AndroidLibrary Include="Library.jar" />
    <!-- A .jar file to only embed -->
    <AndroidLibrary Include="Dependency.jar" Bind="false" />
  </ItemGroup>
</Project>

JavaSourceJar

.NET for Android バインド プロジェクトでは、JavaSourceJar ビルド アクションが、Javadoc ドキュメント のコメント含まれるJava ソース コードを含む.jar ファイルで使用されます

代わりに、Javadoc は、生成されたバインディング ソース コード内で C# XML ドキュメント コメント に変換されます。

インポートされた Javadoc の "verbose" または "complete" の程度は、$(AndroidJavadocVerbosity) によって制御されます。

次の MSBuild メタデータがサポートされています。

  • %(CopyrightFile): インポートされたすべてのドキュメントに追加される Javadoc コンテンツの著作権情報を含むファイルへのパス。

  • %(UrlPrefix): インポートされたドキュメント内のオンライン ドキュメントへのリンクをサポートする URL プレフィックス。

  • %(UrlStyle): オンライン ドキュメントにリンクするときに生成する URL の "スタイル"。 現在サポートされているスタイルは、developer.android.com/reference@2020-Nov の 1 つだけです。

  • %(DocRootUrl): インポートされたドキュメント内のすべての {@docroot} インスタンスの代わりに使用する URL プレフィックス。

LibraryProjectZip

LibraryProjectZip ビルド アクションは、Java/Kotlin ライブラリをバインドし、.zipまたは.aar ファイルをライブラリに埋め込みます。 .NET for Android アプリケーション プロジェクトがライブラリを使用すると、C# から Java/Kotlin API にアクセスできるほか、最終的な Android アプリケーションに Java/Kotlin コードを含めることができます。

LinkDescription

LinkDescription ビルド アクションを持つファイルは、リンカーの動作を制御するために使用されます。

ProguardConfiguration

ProguardConfiguration ビルド アクションを持つファイルは、proguard 動作を制御するために使用されます。 このビルド アクションの詳細については、「ProGuard」を参照してください。

これらのファイルは、これらのファイルは、$(EnableProguard) MSBuild プロパティが True でない場合は無視されます。