生成项

“生成项”控制生成 Xamarin.Android 应用程序或库项目的方式。

AndroidAsset

支持 Android 资产,即将包含在 Java Android 项目的 assets 文件夹中的文件。

AndroidAarLibrary

AndroidAarLibrary 生成操作应用于直接引用 .aar 文件。 Xamarin 组件最常使用此生成操作。 也就是说,要添加对 .aar 文件的引用,它们是 Google Play 和其他服务正常运行所必需。

包含此生成操作的文件的处理方式类似于库项目中嵌入的资源。 .aar 会被提取到中间目录。 然后,任何资产、资源和 .jar 文件都会被添加到相应项组中。

AndroidAotProfile

用于提供 AOT 配置文件,以与配置文件指导的 AOT 一起使用。

还可以通过将 AndroidAotProfile 生成操作设置为包含 AOT 配置文件的文件,在 Visual Studio 中使用它。

AndroidAppBundleMetaDataFile

指定将作为元数据包含在 Android 应用程序包中的文件。 标记值的格式是 <bundle-path>:<physical-file>,其中 bundle-path 表示应用程序包元数据目录内的文件位置,physical-file 是包含要存储的原始数据的现有文件。

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

有关更多详细信息,请参阅 bundletool 文档。

已在 Xamarin.Android 12.3 中添加。

AndroidBoundLayout

指示 AndroidGenerateLayoutBindings 属性设置为 false 时,系统会为布局文件生成代码隐藏。 在所有其他情况下,它与上面所述的 AndroidResource 相同。 此操作仅适用于布局文件

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

AndroidEnvironment

生成操作为 AndroidEnvironment 的文件用于在过程启动期间初始化环境变量和系统属性AndroidEnvironment 生成操作可能会应用于多个文件,并且它们将以特定顺序进行评估(因此,不要在多个文件中指定相同的环境变量或系统属性)。

AndroidJavaLibrary

生成操作为 AndroidJavaLibrary 的文件是 Java 存档(.jar 文件),它将包含在最终的 Android 程序包中。

AndroidJavaSource

生成操作为 AndroidJavaSource 的文件是 Java 源代码,将包含在最终的 Android 程序包中。

从 .NET 7 开始,项目目录中的所有 **\*.java 文件都会自动具有 AndroidJavaSource 的生成操作, 将在程序集生成之前绑定。 允许 C# 代码轻松使用 **\*.java 文件中存在的类型和成员。

%(AndroidJavaSource.Bind) 设置为 False 可禁用此行为。

AndroidLibrary

AndroidLibrary 是一种新的生成操作,用于简化项目中包含 .jar.aar 文件的方式

任何项目都可以指定:

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

上述代码片段的结果对于每种 Xamarin.Android 项目类型都有不同的效果:

这种简化意味着可以在任何地方使用 AndroidLibrary

Xamarin.Android 11.2 中添加了此生成操作。

AndroidLintConfig

应将“AndroidLintConfig”生成操作与 生成属性结合使用$(AndroidLintEnabled) 属性。 系统将使用此生成操作的文件合并起来并传递给 Android lint 工具。 它们应当是包含要启用和禁用的测试的信息的 XML 文件。

有关详细信息,请参阅 lint 文档

AndroidManifestOverlay

AndroidManifestOverlay 生成操作可用于向清单合并器工具提供 AndroidManifest.xml 文件。 具有此生成操作的文件将与主 AndroidManifest.xml 文件以及引用中的清单文件一起传递到清单合并器。 然后,这些文件将合并到最终清单中。

可以使用此生成操作向应用提供更改和设置,具体取决于你的生成配置。 例如,如果仅在调试时需要具有特定权限,则可以在调试时使用覆盖来注入该权限。 例如,给定以下覆盖文件内容:

<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>

Xamarin.Android 11.2 中引入了此生成操作。

AndroidInstallModules

指定在安装应用程序包时通过 bundletool 命令安装的模块。

Xamarin.Android 11.3 中引入了此生成操作。

AndroidNativeLibrary

通过将生成操作设置为 AndroidNativeLibrary,将本机库添加到版本中。

请注意,由于 Android 支持多个应用程序二进制接口 (ABI),因此生成系统必须知道本机库是为哪个 ABI 生成的。 可通过两种方式指定 ABI:

  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>

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 – 显式指定资源路径。 允许使用“aliasing”文件,以便它们可用作多个不同的资源名称。

<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>

AndroidResourceAnalysisConfig

生成操作 AndroidResourceAnalysisConfig 将某个文件标记为 Xamarin Android Designer 布局诊断工具的严重性级别配置文件。 目前这仅已用于布局编辑器,未用于生成消息。

有关详细信息,请参阅 Android 资源分析文档

在 Xamarin.Android 10.2 中新增。

内容

不支持正常的 Content 生成操作(因为我们还未想出如何在没有成本可能昂贵的首次运行步骤的情况下支持它)。

从 Xamarin.Android 5.1 开始,尝试使用 @(Content) 生成操作将导致 XA0101 警告。

EmbeddedJar

在 Xamarin.Android 绑定项目中,EmbeddedJar 生成操作绑定 Java/Kotlin 库,并将 .jar 文件嵌入到库中。 当 Xamarin.Android 应用程序项目使用库时,它将可以从 C# 访问 Java/Kotlin API,并在最终的 Android 应用程序中包含 Java/Kotlin 代码。

自 Xamarin.Android 11.2 起,可以使用 AndroidLibrary 生成操作作为替代方法,例如

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

EmbeddedNativeLibrary

在 Xamarin.Android 类库或 Java 绑定项目中,EmbeddedNativeLibrary 生成操作将本机库(例如 lib/armeabi-v7a/libfoo.so)绑定到库中。 当 Xamarin.Android 应用程序使用库时,libfoo.so 文件将包含在最终的 Android 应用程序中。

自 Xamarin.Android 11.2 起,可以使用 AndroidNativeLibrary 生成操作作为替代方法

EmbeddedReferenceJar

在 Xamarin.Android 绑定项目中,EmbeddedReferenceJar 生成操作将 .jar 文件嵌入库中,但没有像 EmbeddedJar 那样创建 C# 绑定。 当 Xamarin.Android 应用程序项目使用库时,它将在最终的 Android 应用程序中包含 Java/Kotlin 代码。

自 Xamarin.Android 11.2 起,可以使用 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>

JavaDocJar

在 Xamarin.Android 绑定项目中,对包含 Javadoc HTML 的 .jar 文件使用 JavaDocJar 生成操作。 分析 Javadoc HTML,以提取参数名称。

仅支持某些“Javadoc HTML 方言”,其中包括:

  • JDK 1.7 javadoc 输出。
  • JDK 1.8 javadoc 输出。
  • Droiddoc 输出。

此生成操作在 Xamarin.Android 11.3 中已弃用,且在 .NET 6 中将不受支持。 首选 @(JavaSourceJar) 生成操作。

JavaSourceJar

在 Xamarin.Android 绑定项目中,JavaSourceJar 生成操作用于包含 Java 源代码的 .jar 文件中,这些文件包含 Javadoc 文档注释

在 Xamarin.Android 11.3 之前,Javadoc 将在生成期间通过 javadoc 实用工具转换为 HTML,然后转换为 XML 文档。

从 Xamarin.Android 11.3 开始,Javadoc 将改为在生成的绑定源代码中转换为 C# XML 文档注释

$(AndroidJavadocVerbosity) 控制导入的 Javadoc 的“详细”或“完成”程度。

从 Xamarin.Android 11.3 开始,支持以下 MSBuild 元数据:

  • %(CopyrightFile):包含 Javadoc 内容版权信息的文件的路径,这些信息将追加到所有导入的文档中。

  • %(UrlPrefix):URL 前缀,用于支持链接到导入文档中的联机文档。

  • %(UrlStyle):链接到联机文档时要生成的 URL 的“样式”。 当前仅支持一种样式:developer.android.com/reference@2020-Nov

从 Xamarin.Android 12.3 开始,支持以下 MSBuild 元数据:

  • %(DocRootUrl):用于代替导入文档中所有 {@docroot} 实例的 URL 前缀。

LibraryProjectZip

在 Xamarin.Android 绑定项目中,LibraryProjectZip 生成操作绑定 Java/Kotlin 库,并将 .zip.aar 文件嵌入到库中。 当 Xamarin.Android 应用程序项目使用库时,它将可以从 C# 访问 Java/Kotlin API,并在最终的 Android 应用程序中包含 Java/Kotlin 代码。

注意

Xamarin.Android 绑定项目中只能包含一个 LibraryProjectZip。 .NET 6 中将删除此限制。

LinkDescription

生成操作为 LinkDescription 的文件用于控制链接器行为

ProguardConfiguration

生成操作为 ProguardConfiguration 的文件包含用于控制 proguard 行为的选项。 有关此生成操作的更多信息,请参阅 ProGuard

这些文件将被忽略,除非 $(EnableProguard) MSBuild 属性为 True