生成属性
MSBuild 属性控制目标的行为。
它们是在项目文件中指定的,例如 MSBuild PropertyGroup 中的 MyApp.csproj。
注意
在 .NET for Android 中,应用程序与绑定项目在技术上没有区别,因此属性将在两者中都起作用。 在实践中,强烈建议创建单独的应用程序和绑定项目。 MSBuild 绑定项目属性参考指南中 记录了主要用于绑定项目的属性 。
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
。
AndroidAotAdditionalArguments
一个字符串属性,在对将 $(AndroidEnableProfiledAot)
或 $(AotAssemblies)
设置为 true
的项目执行 Aot
任务期间,允许将选项传递到 Mono 编译器。
调用 Mono 交叉编译器时,此属性的字符串值会添加到响应文件。
通常情况下,此属性应保留为空,但在某些特殊场景中,它可以提供有用的灵活性。
$(AndroidAotAdditionalArguments)
属性与相关 $(AndroidExtraAotOptions)
属性不同;$(AndroidAotAdditionalArguments)
将完整的独立空格分隔选项(如 --verbose
或 --debug
)传递给 AOT 编译器,而 $(AndroidExtraAotOptions)
包含以逗号分隔的参数,这些参数是 AOT 编译器的 --aot
选项的一部分。
AndroidAotCustomProfilePath
aprofutil
应创建的用于保存探查器数据的文件。
AndroidAotProfiles
允许开发人员通过命令行添加 AOT 配置文件的字符串属性。 它是以分号或逗号分隔的绝对路径列表。
AndroidAotProfilerPort
获取分析数据时 aprofutil
应连接到的端口。
AndroidAotEnableLazyLoad
启用 AOT 程序集的推迟(延迟)加载,而不是在启动时预加载它们。 对于启用了任何形式的 AOT 的发布版本,默认值为 True
。
在 .NET 6 中引入。
AndroidApkDigestAlgorithm
一个字符串值,指定将用于 jarsigner -digestalg
的摘要算法。
默认值为 SHA-256
。
AndroidApkSignerAdditionalArguments
一个字符串属性,允许开发人员向 apksigner
工具提供自变量。
AndroidApkSigningAlgorithm
一个字符串值,指定将用于 jarsigner -sigalg
的签名算法。
默认值为 SHA256withRSA
。
AndroidApplication
此布尔值指示项目是用于 Android 应用程序 (True
) 还是用于 Android 库项目(False
或不存在)。
在 Android 包中,可能只存在一个具有 <AndroidApplication>True</AndroidApplication>
的项目。 (遗憾的是,这一要求尚未得到验证,这可能会导致与 Android 资源有关的微妙和奇怪的错误。)
AndroidApplicationJavaClass
完整 Java 类名称,用于在类继承自 Android.App.Application 时替代 android.app.Application
。
$(AndroidApplicationJavaClass)
属性通常由其他属性(如 $(AndroidEnableMultiDex)
MSBuild 属性)设置。
AndroidAvoidEmitForPerformance
一个布尔属性,用于确定是否 System.Reflection.Emit
“避免”以提高启动性能。 该属性默认为 True
。
System.Reflection.Emit
使用对 Android 上的启动性能有明显影响。 对于以下功能开关,默认禁用此行为:
Switch.System.Reflection.ForceInterpretedInvoke
:第二次调用MethodInfo.Invoke()
或ConstructorInfo.Invoke()
发出代码以提高重复调用的性能。Microsoft.Extensions.DependencyInjection.DisableDynamicEngine
:在从依赖项注入容器检索服务的第二次调用后,将发出代码以提高重复调用的性能。
在大多数 Android 应用程序中,最好禁用此行为。
在 .NET 8 中添加。
AndroidBinUtilsPath
包含 Android binutils(如本机链接器 ld
和本机汇编程序 as
)的目录路径。 这些工具包含在适用于 Android 工作负载的 .NET 中。
默认值为 $(MonoAndroidBinDirectory)\binutils\bin\
。
AndroidBoundExceptionType
一个字符串值,该值指定当 .NET for Android 提供的类型的 .NET 在 Java 类型(例如Android.Runtime.InputStreamInvoker
、System.IO.Stream
或或和System.Collections.IDictionary
)Android.Runtime.JavaDictionary
方面实现 .NET 类型或接口时应如何传播异常。
Java
:原始 Java 异常类型按原样传播。Java
意味着,例如,InputStreamInvoker
无法正确实现System.IO.Stream
API,因为可能会从Stream.Read()
引发Java.IO.IOException
,而不是从System.IO.IOException
引发。System
:捕获原始 Java 异常类型,并将其包装到适当的 .NET 异常类型中。System
意味着,例如,InputStreamInvoker
正确实现System.IO.Stream
,Stream.Read()
不会引发Java.IO.IOException
实例。 (它可能会引发包含Java.IO.IOException
作为Exception.InnerException
值的System.IO.IOException
。)默认值为
System
。
AndroidBoundInterfacesContainConstants
一个布尔属性,用于确定是否支持接口上的绑定常数,或者将使用创建 IMyInterfaceConsts
类的解决方法。
默认值为 True
。
AndroidBoundInterfacesContainStaticAndDefaultInterfaceMethods
一个布尔属性,支持接口上的默认成员和静态成员,还是创建一个包含静态成员的同级类(如 abstract class MyInterface
)的旧解决方法。
在 .NET 6 中,默认值为 True
,在旧版中为 False
。
AndroidBoundInterfacesContainTypes
一个布尔属性,支持接口中嵌套的类型,还是创建非嵌套类型(如 IMyInterfaceMyNestedClass
)的解决方法。
在 .NET 6 中,默认值为 True
,在旧版中为 False
。
AndroidBuildApplicationPackage
此布尔值指示是否创建包 (.apk) 并为其签名。 将此值设置为 True
等效于使用 SignAndroidPackage
生成目标。
该属性默认为 False
。
AndroidBundleConfigurationFile
指定一个文件名,以在生成 Android 应用程序捆绑包时用作 bundletool
的配置文件。 此文件从某些方面控制捆绑包如何生成 APK,例如从哪些维度拆分捆绑包来生成 APK。
适用于 Android 的 .NET 会自动配置其中一些设置,包括要保持未压缩的文件扩展名列表。
仅当 $(AndroidPackageFormat)
设置为 aab
时,此属性才是相关的。
AndroidBundleToolExtraArgs
指定在生成应用程序包时传递给 bundletool 命令的命令行选项。
AndroidClassParser
一个字符串属性,用于控制如何分析 .jar
文件。 可能的值包括:
class-parse:使用
class-parse.exe
直接解析 Java 字节码,无需 JVM 的帮助。jar2xml:此值已过时,不再受支持。
AndroidCodegenTarget
一个字符串属性,用于控制代码生成目标 ABI。 可能的值包括:
XamarinAndroid:此值已过时,不再受支持。
XAJavaInterop1:使用 Java.Interop 进行 JNI 调用。 只能通过 Xamarin.Android 6.1 或更高版本构建和执行使用
XAJavaInterop1
的绑定程序集。 Xamarin.Android 6.1 和更高版本会将Mono.Android.dll
与此值绑定。
默认值为 XAJavaInterop1
。
AndroidCreatePackagePerAbi
一个布尔属性,用于确定是否应该创建一组文件($(AndroidSupportedAbis)
中指定的每个ABI 一个),而不是在单个 .apk
中支持所有 ABI。
另请参阅生成 ABI 特定的 APK 指南。
AndroidCreateProguardMappingFile
一个布尔属性,用于控制是否在生成过程中生成 proguard 映射文件。
将以下内容添加到 csproj 将导致生成文件,并使用 AndroidProguardMappingFile
属性来控制最终映射文件的位置。
<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>
生成 .aab
文件时,映射文件会自动包含在包中。 无需手动将其上传到 Google Play 商店。 使用 .apk
文件时,需要手动上传 AndroidProguardMappingFile
。
使用 $(AndroidLinkTool)
=r8 时,默认值为 True
。
AndroidDebugKeyAlgorithm
指定要用于 debug.keystore
的默认算法。 默认值为 RSA
。
AndroidDebugKeyValidity
指定要用于 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 功能;默认工具链通过对 javac
编译器的输出执行称为 desugar
的字节码转换,实现新的语言功能。 如果使用 $(AndroidDexTool)=dx
,则默认值为 False
;如果使用 $(AndroidDexTool)
=d8
,则为 True
。
AndroidEnableGooglePlayStoreChecks
一个布尔属性,允许开发人员禁用以下 Google Play 商店检查:XA1004、XA1005 和 XA1006。 对于目标不是 Google Play 商店并且不想运行这些检查的开发人员来说,禁用这些检查非常有用。
AndroidEnableMarshalMethods
一个布尔属性,用于确定是否启用 LLVM 封送方法。
LLVM 封送方法是应用启动优化,它使用本机入口点进行 Java native
方法注册。
默认情况下,此属性为 False。
在 .NET 8 中添加。
AndroidEnableMultiDex
此布尔属性确定是否将在最终的 .apk
中使用 multi-dex 支持。
该属性默认为 False
。
AndroidEnableObsoleteOverrideInheritance
一个布尔属性,用于确定绑定方法是否自动从它们重写的方法继承 [Obsolete]
属性。
.NET 8 中添加了对此属性的支持。
该属性默认为 True
。
AndroidEnablePreloadAssemblies
一个布尔属性,用于控制在进程启动时是否加载应用程序包内绑定的所有托管程序集。
如果设置为 True
,在进程启动时,将在调用任何应用程序代码前加载应用程序包内绑定的所有程序集。
如果设置为 False
,将仅根据需要加载程序集。
根据需要加载程序集可让应用程序更快地启动,并且也更符合桌面 .NET 语义。
若要查看节省的时间,请将 debug.mono.log
系统属性设置为包含 timing
,然后在 Finished loading assemblies: preloaded
中查找 adb logcat
消息。
使用依赖项注入的应用程序或库可能要求此属性为 True
(如果它们又要求 AppDomain.CurrentDomain.GetAssemblies()
返回应用程序捆绑包中的所有程序集),即使不需要程序集也是如此。
默认情况下,此值为 False。
AndroidEnableProfiledAot
此布尔属性确定是否在预先编译时使用 AOT 配置文件。
配置文件在 @(AndroidAotProfile)
项组。 此 ItemGroup 包含默认配置文件。 通过删除现有的配置文件并添加你自己的 AOT 配置文件可以进行替代。
该属性默认为 False
。
AndroidEnableRestrictToAttributes
一个值为和 disable
. 的obsolete
枚举样式属性。
设置为 obsolete
时,使用 Java 注释androidx.annotation.RestrictTo
标记的类型和成员或处于非导出的 Java 包中,将使用 C# 绑定中的属性进行标记[Obsolete]
。
此属性 [Obsolete]
具有描述性消息,说明 Java 包所有者认为 API 为“内部”,并警告其使用。
此属性还具有自定义警告代码 XAOBS001
,因此可以独立于“普通”过时 API 将其取消。
设置为
添加 [Obsolete]
属性而不是自动删除 API 是为了保持与现有包的 API 兼容性。 如果希望 删除 具有 @RestrictTo
批注 或 处于非导出 Java 包中的成员,除了此属性之外,还可以使用 转换文件 来防止这些类型绑定:
<remove-node path="//*[@annotated-visibility]" />
.NET 8 中添加了对此属性的支持。
此属性默认设置为 obsolete
<
AndroidEnableSGenConcurrent
此布尔属性确定是否使用 Mono 的并发垃圾收集器。
该属性默认为 False
。
AndroidErrorOnCustomJavaObject
此布尔属性确定类型能否实现 Android.Runtime.IJavaObject
,而无需同时继承自 Java.Lang.Object
或 Java.Lang.Throwable
:
class BadType : IJavaObject {
public IntPtr Handle {
get {return IntPtr.Zero;}
}
public void Dispose()
{
}
}
若为 True,这些类型生成 XA4212 错误;否则,生成 XA4212 警告。
该属性默认为 True
。
AndroidExplicitCrunch
不再支持此属性。
AndroidExtraAotOptions
一个字符串属性,在对将 $(AndroidEnableProfiledAot)
或 $(AotAssemblies)
设置为 true
的项目执行 Aot
任务期间,允许将选项传递到 Mono 编译器。
调用 Mono 交叉编译器时,此属性的字符串值会添加到响应文件。
通常情况下,此属性应保留为空,但在某些特殊场景中,它可以提供有用的灵活性。
$(AndroidExtraAotOptions)
属性不同于相关 $(AndroidAotAdditionalArguments)
属性;$(AndroidAotAdditionalArguments)
将逗号分隔的自变量置于 Mono 编译器的 --aot
选项中。 相反,$(AndroidExtraAotOptions)
将完整独立的逗号分隔的选项(如 --verbose
或 --debug
)传递到此编译器。
AndroidFastDeploymentType
:
(冒号)分隔的值列表,$(EmbedAssembliesIntoApk)
MSBuild 属性为 False
时可用于控制部署到目标设备上的快速部署目录的类型。 如果资源是快速部署的,则不会嵌入到生成的 .apk
中,这样做可以加快部署时间。 (部署的速度越快,.apk
需要重建的频率越低,安装过程可能会更快。)有效值包括:
Assemblies
:部署应用程序程序集。Dexes
:部署.dex
文件、本机库和类型映射。Dexes
值仅可以在运行 Android 4.4 或更高版本 (API-19) 的设备上使用。
默认值为 Assemblies
。
在提交 f0d565fe 中删除了对通过该系统快速部署资源和资产的支持。 这是因为它需要使用已弃用的 API 才能工作。
**在 .NET 9 中删除了对此功能的支持
“实验”。
AndroidFragmentType
指定生成布局绑定代码时,要用于所有 <fragment>
布局元素的默认完全限定的类型。 默认值为标准 Android Android.App.Fragment
类型。
AndroidGenerateJniMarshalMethods
一个布尔属性,用于在生成过程中生成 JNI 封送方法。 大大减少了在绑定帮助程序代码中对 System.Reflection
的使用。
默认值为 False
。 如果开发人员想要使用新的 JNI 封送方法功能,则可以设置
<AndroidGenerateJniMarshalMethods>True</AndroidGenerateJniMarshalMethods>
在 .csproj
中进行设置。 或者通过如下设置,在命令行上提供该属性:
-p:AndroidGenerateJniMarshalMethods=True
“实验”。 默认值为 False
。
AndroidGenerateJniMarshalMethodsAdditionalArguments
一个字符串属性,可用于将参数添加到 jnimarshalmethod-gen.exe
调用中,并且可用于调试,因此可以使用 -v
、-d
或 --keeptemp
等选项。
默认值为空字符串。 可以在 .csproj
文件中或命令行上设置。 例如:
<AndroidGenerateJniMarshalMethodsAdditionalArguments>-v -d --keeptemp</AndroidGenerateJniMarshalMethodsAdditionalArguments>
或:
-p:AndroidGenerateJniMarshalMethodsAdditionalArguments="-v -d --keeptemp"
AndroidGenerateLayoutBindings
如果设置为 true
,则允许生成布局代码隐藏,如果设置为 false
,则完全禁止。
默认值为 false
。
AndroidGenerateResourceDesigner
默认值为 true
。 设置为 false
时,禁用 Resource.designer.cs
的生成。
AndroidHttpClientHandlerType
控制 System.Net.Http.HttpClient
默认构造函数使用的默认 System.Net.Http.HttpMessageHandler
实现。 值是 HttpMessageHandler
子类的程序集限定类型名称,适用于 System.Type.GetType(string)
。
在 .NET 6 及更新版中,此属性仅在与 .NET 6 一 $(UseNativeHttpHandler)=true
起使用时才有效。
此属性最常见的值为:
Xamarin.Android.Net.AndroidMessageHandler
:使用 Android Java API 执行 HTTP 请求。 它类似于旧版Xamarin.Android.Net.AndroidClientHandler
,但进行了多项改进。 它支持 HTTP 1.1 和 TLS 1.2。 它是默认的 HTTP 消息处理程序。System.Net.Http.SocketsHttpHandler, System.Net.Http
:.NET 中的默认消息处理程序。 它支持 HTTP/2、TLS 1.2,建议用于 Grpc.Net.Client 的 HTTP 消息处理程序。 此值等效于$(UseNativeHttpHandler)=false
.取消设置/空字符串,等效于
System.Net.Http.HttpClientHandler, System.Net.Http
对应于 Visual Studio 属性页中的 Default 选项。
当 Visual Studio 中“最低 Android 版本”配置为“Android 4.4.87”或更低版本,或者当 Visual Studio for Mac 中“目标平台”设置为“新式开发”或“最大兼容性”时,新建项目向导为新项目选择此选项。
System.Net.Http.HttpClientHandler, System.Net.Http
:使用托管HttpMessageHandler
。对应于 Visual Studio 属性页中的 Managed 选项。
注意
在 .NET 6 中,指定的类型不得 Xamarin.Android.Net.AndroidClientHandler
或 System.Net.Http.HttpClientHandler
继承自这些类之一。 如果要从“经典”Xamarin.Android 迁移, AndroidMessageHandler
请改用或派生自定义处理程序。
注意
通过设置 XA_HTTP_CLIENT_HANDLER_TYPE
环境变量,可以支持 $(AndroidHttpClientHandlerType)
属性。
在文件中找到的 $XA_HTTP_CLIENT_HANDLER_TYPE
值(生成操作为 @(AndroidEnvironment)
)优先级更高。
AndroidIncludeWrapSh
一个布尔值,指示是否应将 Android 包装器脚本 (wrap.sh
) 打包到 APK 中。 默认值为 false
,因为包装器脚本可能会严重影响应用程序的启动和运行方式,并且应仅在必要时才包含该脚本,例如,当调试或以其他方式更改应用程序启动/运行时行为时。
使用 生成操作将该脚本添加到项目中,@(AndroidNativeLibrary)
生成操作,因为它与特定于体系结构的本机库位于同一目录中,并且必须命名为 wrap.sh
。
指定 wrap.sh
脚本路径的最简单方法是将其放在以目标体系结构命名的目录中。 如果每个体系结构只有一个 wrap.sh
,则此方法适用:
<AndroidNativeLibrary Include="path/to/arm64-v8a/wrap.sh" />
但是,如果出于不同目的,项目的每个体系结构需要多个 wrap.sh
,则此方法将不可行。
在这种情况下,可以使用 AndroidNativeLibrary
的 Link
元数据指定名称:
<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 中添加了对此属性的支持。
AndroidJavadocVerbosity
指定在绑定项目中导入 Javadoc 文档时,C#XML 文档注释的“详细”程度。
需要使用 @(JavaSourceJar)
生成操作。
$(AndroidJavadocVerbosity)
属性类似于枚举,其可能值为 full
或 intellisense
:
intellisense
:仅发出 XML 注释:<exception/>
、<param/>
、<returns/>
、<summary/>
。full
:发出intellisense
元素和<remarks/>
、<seealso/>
,以及支持的其他任何内容。
默认值为 intellisense
。
AndroidKeyStore
一个布尔值,指示是否应使用自定义签名信息。 默认值是 False
,这意味着将使用默认的调试签名密钥来对包进行签名。
AndroidLaunchActivity
要启动的 Android 活动。
AndroidLinkMode
指定应对 Android 包中包含的程序集执行的链接的类型。 仅在 Android 应用程序项目中使用。 默认值是 SdkOnly。 有效值为:
None:不会尝试链接。
SdkOnly:仅在基类库上执行链接,而不是用户程序集。
Full:将在基类库和用户程序集上执行链接。
注意
使用“完整”这一
AndroidLinkMode
值常会导致应用损坏,尤其是使用放射时。 除非你真正知道在做什么,否则请避免。
<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 代码的代码压缩器。 默认值为空字符串,如果 $(AndroidEnableProguard)
为 True
,则为 proguard
。 请参阅有关 D8 和 R8 的文档。
AndroidLintEnabled
一个布尔属性,允许开发人员在打包过程中运行 android lint
工具。
$(AndroidLintEnabled)
为 True 时,使用以下属性:
也可以使用以下生成操作:
请参阅 Lint 帮助,了解有关 Android lint
工具的详细信息。
AndroidLintEnabledIssues
一个字符串属性,是要启用的 lint 问题的逗号分隔列表。
仅在 $(AndroidLintEnabled)
=True 时使用。
AndroidLintDisabledIssues
一个字符串属性,是要禁用的 lint 问题的逗号分隔列表。
仅在 $(AndroidLintEnabled)
=True 时使用。
AndroidLintCheckIssues
一个字符串属性,是要检查的 lint 问题的逗号分隔列表。
仅在 $(AndroidLintEnabled)
=True 时使用。
请注意:只检查这些问题。
AndroidManagedSymbols
此布尔属性控制是否生成序列点,以便可以从 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 Manager 中的“批准的列表(推荐)”存储库。
GoogleV2
是 Visual Studio SDK Manager 中的“完整列表(不支持)”存储库。
如果未 $(AndroidManifestType)
设置, Xamarin
则使用。
AndroidManifestPlaceholders
AndroidManifest.xml 的键值替换对列表,采用分号分隔,其中每个对的格式为 key=value
。
例如,assemblyName=$(AssemblyName)
的属性值定义一个 ${assemblyName}
占位符,随后该占位符可以出现在 AndroidManifest.xml 中:
<application android:label="${assemblyName}"
这提供了一种将生成过程中的变量插入 AndroidManifest.xml 文件的方法。
AndroidMultiDexClassListExtraArgs
一个字符串属性,允许开发人员在生成 multidex.keep
文件时将自变量传递给 com.android.multidex.MainDexListBuilder
。
具体事例:是否在 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
步骤成功。
AndroidPackageFormat
枚举样式的属性,有效值为 apk
或 aab
。 指示希望将 Android 应用程序打包为 APK 文件还是 Android 应用程序包。 应用程序包是一种新的格式,适用于要在 Google Play 上提交的 Release
版本。 默认值为 apk
。
当 $(AndroidPackageFormat)
设置为 aab
时,系统将设置 Android 应用程序包所必需的其他 MSBuild 属性:
$(AndroidUseAapt2)
为True
。$(AndroidUseApkSigner)
为False
。$(AndroidCreatePackagePerAbi)
为False
。
.net 6 将弃用此属性。 用户应切换到较新的 AndroidPackageFormats
。
AndroidPackageFormats
一个分号分隔的属性,其有效值为 apk
和 aab
。
指示希望将 Android 应用程序打包为 APK 文件还是 Android 应用程序包。 应用程序包是一种新的格式,适用于要在 Google Play 上提交的 Release
版本。
生成发布版本时,可能需要生成两者和 aab
以及一个 apk
,以便分发到各个商店。
将 AndroidPackageFormats
设置为 aab;apk
将导致生成两者。 将 AndroidPackageFormats
设置为 aab
或 apk
将只生成一个文件。
默认值aab;apk
Release
仅适用于生成。
建议继续使用 apk
进行调试。
AndroidPackageNamingPolicy
枚举样式的属性,用于指定生成的 Java 源代码的 Java 包名称。
唯一支持的值为 LowercaseCrc64
。
AndroidPrepareForBuildDependsOn
可用于扩展 Android 生成过程的分号分隔属性。 添加到此属性的 MSBuild 目标将在生成早期针对应用程序和库项目类型执行。 默认情况下,此属性为空。
示例:
<PropertyGroup>
<AndroidPrepareForBuildDependsOn>MyCustomTarget</AndroidPrepareForBuildDependsOn>
</PropertyGroup>
<Target Name="MyCustomTarget" >
<Message Text="Running target: 'MyCustomTarget'" Importance="high" />
</Target>
AndroidProguardMappingFile
指定 r8
的 -printmapping
proguard 规则。 这意味着 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
指定 r8
的 -ignorewarnings
proguard 规则。 这允许 r8
继续进行 dex 编译(即使遇到特定的警告)。 默认值为 True
,但可以设置为 False
以强制实施更严格的行为。 有关详细信息,请参阅 ProGuard 手册。
从 .NET 8 开始,指定 --map-diagnostics warning info
。 有关详细信息, 请参阅 D8 和 R8 源代码 。
AndroidR8JarPath
指向 r8.jar
的路径,可与 r8 dex 编译器和压缩器结合使用。 默认值是用于 Android 工作负载安装的 .NET 的路径。 有关详细信息,请参阅 D8 和 R8 相关文档。
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
要求“输入 $(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>
注意
$(AndroidPackageFormat)
设置为 aab
时,不支持 env:
前缀。
AndroidSigningKeyStore
指定由 keytool
创建的密钥存储文件的文件名。 这对应于提供给 keytool -keystore 选项的值。
AndroidSigningStorePass
指定 $(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>
注意
$(AndroidPackageFormat)
设置为 aab
时,不支持 env:
前缀。
AndroidSigningPlatformKey
指定要用于对 apk 进行签名的密钥文件。
这仅在生成 system
应用程序时使用。
AndroidSigningPlatformCert
指定要用于对 apk 进行签名的证书文件。
这仅在生成 system
应用程序时使用。
AndroidStripILAfterAOT
一个布尔属性,指定是否 将删除 AOT 编译方法的方法主体 。
默认值为false
,不会删除 AOT 编译方法的方法主体。
设置为 $(AndroidEnableProfiledAot)
> 时,默认设置为 $(RunAOTCompilation)
true
默认为 -- 为所有内容启用 AOT)。
这可能会导致应用大小增加。 可以通过在项目文件中显式设置 $(AndroidEnableProfiledAot)
来 true
重写此行为。
.NET 8 中添加了对此属性的支持。
AndroidSupportedAbis
此字符串属性包含应加入 .apk
中的分号 (;
) 分隔的 ABI 列表。
支持的值包括:
armeabi-v7a
x86
arm64-v8a
x86_64
AndroidTlsProvider
此属性已过时,不应使用。
AndroidUseAapt2
一个布尔属性,使开发人员能够控制 aapt2
打包工具的使用。
默认情况下,此值为 True。
此属性不能设置为 false。
AndroidUseApkSigner
一个布尔属性,允许开发人员使用 apksigner
工具,而不是 jarsigner
。
AndroidUseDefaultAotProfile
允许开发人员禁止使用默认 AOT 配置文件的布尔属性。
若要禁止使用默认 AOT 配置文件,则将此属性设置为 false
。
AndroidUseDesignerAssembly
一个 bool 属性,用于控制生成系统是否将生成 _Microsoft.Android.Resource.Designer.dll
为应用于文件的布尔 Resource.Designer.cs
属性。 这一点的好处是较小的应用程序和更快的启动时间。
默认值在 true
.NET 8 中。
作为 Nuget Author,如果想要保持向后兼容性,建议提供三个版本的程序集。
一个用于 MonoAndroid,一个用于 net6.0-android,一个用于 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 中添加。
AndroidUseInterpreter
一个布尔属性,导致 .apk
包含 mono 解释器,而不是普通 JIT。
“实验”。
AndroidUseLegacyVersionCode
一个布尔属性,允许开发人员将 versionCode 计算还原到先前的 Xamarin.Android 8.2 旧行为。 这只能适用于在 Google Play 商店中已发布应用程序的开发人员。 强烈建议使用新 $(AndroidVersionCodePattern)
属性。
AndroidUseManagedDesignTimeResourceGenerator
一个布尔属性,将切换设计时生成以使用受管理资源分析程序,而不是 aapt
。
AndroidUseNegotiateAuthentication
一个布尔属性,用于在中 AndroidMessageHandler
启用对 NTLMv2/Negotiate 身份验证的支持。 默认值为 False。
在 .NET 7 中添加。
AndroidUseSharedRuntime
此属性已过时,不应使用。
AndroidVersionCode
MSBuild 属性,可用作 AndroidManifest.xml
文件中 /manifest/@android:versionCode
的替代方法。 若要选择加入此功能,还必须启用 <GenerateApplicationManifest>true</GenerateApplicationManifest>
。
这将是 .NET 6 中的默认设置。
如果使用 $(AndroidCreatePackagePerAbi)
和 $(AndroidVersionCodePattern)
,则忽略此属性。
@android:versionCode
是必须为每个 Google Play 版本递增的整数值。 有关 /manifest/@android:versionCode
要求的详细信息,请参阅 Android 文档。
AndroidVersionCodePattern
一个字符串属性,允许开发人员自定义清单中的 versionCode
。
有关决定 versionCode
的信息,请参阅为 APK 创建版本代码。
例如,如果 abi
是 armeabi
,清单中的 versionCode
为 123
,则当 $(AndroidCreatePackagePerAbi)
为 True 时,{abi}{versionCode}
将生成 1123
的 versionCode,否则将生成值 123。
如果 abi
是 x86_64
,则清单中的 versionCode
是 44
。 当 $(AndroidCreatePackagePerAbi)
为 True 时,这将生成 544
,否则会生成值 44
。
如果我们包含左填充格式字符串 {abi}{versionCode:0000}
,则会生成 50044
,因为我们用 0
在左边填充 versionCode
。 此外,也可以使用十进制填充(例如 ),{abi}{versionCode:D4}
,其作用与前面的示例相同。
由于值必须是整数,因此只支持 0 和 Dx 填充格式字符串。
预定义的键项
abi – 插入应用的目标 abi
- 2 –
armeabi-v7a
- 3 –
x86
- 4 –
arm64-v8a
- 5 –
x86_64
- 2 –
minSDK – 插入
AndroidManifest.xml
或11
中支持的最小 Sdk 值(如果未定义)。versionCode – 直接从
Properties\AndroidManifest.xml
使用版本代码。
你可以使用(下文中定义的)$(AndroidVersionCodeProperties)
属性定义自定义项。
默认情况下,值设置为 {abi}{versionCode:D6}
。 如果开发人员要保留旧行为,可将 $(AndroidUseLegacyVersionCode)
属性设置为 true
,从而替代默认值
AndroidVersionCodeProperties
一个字符串属性,允许开发人员定义要与 $(AndroidVersionCodePattern)
配合使用的自定义项。
它们采用 key=value
对的形式。 value
中的所有项都应是整数值。 例如:screen=23;target=$(_AndroidApiLevel)
。 正如你所看到的,你可以使用字符串中现有或自定义的 MSBuild 属性。
ApplicationId
一个 MSBuild 属性,可用作 AndroidManifest.xml
文件中 /manifest/@package
的替代方法。 若要选择加入此功能,还必须启用 <GenerateApplicationManifest>true</GenerateApplicationManifest>
。
这将是 .NET 6 中的默认设置。
有关 /manifest/@package
要求的详细信息,请参阅 Android 文档。
ApplicationTitle
一个 MSBuild 属性,可用作 AndroidManifest.xml
文件中 /manifest/application/@android:label
的替代方法。 若要选择加入此功能,还必须启用 <GenerateApplicationManifest>true</GenerateApplicationManifest>
。
这将是 .NET 6 中的默认设置。
有关 /manifest/application/@android:label
要求的详细信息,请参阅 Android 文档。
ApplicationVersion
一个 MSBuild 属性,可用作 AndroidManifest.xml
文件中 /manifest/@android:versionName
的替代方法。 若要选择加入此功能,还必须启用 <GenerateApplicationManifest>true</GenerateApplicationManifest>
。
这将是 .NET 6 中的默认设置。
有关 /manifest/@android:versionName
要求的详细信息,请参阅 Android 文档。
AotAssemblies
一个布尔属性,用于确定程序集是否将提前编译为本机代码并包含在应用程序中。
该属性默认为 False
。
.NET 7 中已弃用。 改为迁移到新的 $(RunAOTCompilation)
MSBuild 属性,因为将来的版本中将删除对 $(AotAssemblies)
它的支持。
AProfUtilExtraOptions
要传递给 aprofutil
的其他选项。
BeforeBuildAndroidAssetPacks
此属性中列出的 MSBuild 目标将在生成项之前 AssetPack
直接运行。
在 .NET 9 中添加
BeforeGenerateAndroidManifest
此属性中列出的 MSBuild 目标将在 _GenerateJavaStubs
之前直接运行。
配置
指定要使用的生成配置,例如“调试”或“发行”。 配置属性用于确定其他属性(确定目标行为)的默认值。 其他配置可能会在 IDE 中创建。
默认情况下,Debug
配置将导致 Install
和 SignAndroidPackage
目标创建更小的 Android 包,这需要提供其他文件和包进行操作。
默认 Release
配置将导致 Install
和 SignAndroidPackage
目标创建独立的 Android 包,无需安装其他任何包或文件即可使用此包。
DebugSymbols
一个布尔值,与 $(DebugType)
属性相结合,确定 Android 包是否可调试。
可调试包包含调试符号,将 //application/@android:debuggable
属性设置为 true
,并自动添加 INTERNET
权限,以便调试器可以附加到该过程。 如果 DebugSymbols
是 True
,并且 DebugType
是空字符串或 Full
,则应用程序是可调试的。
DebugType
指定要生成的调试符号的类型作为版本的一部分,它还会影响应用程序是否可调试。 可能的值包括:
Full:生成 Full 符号。 如果
DebugSymbols
MSBuild 属性也为True
,则应用程序包是可调试的。PdbOnly:生成 "PDB" 符号。 应用程序包将不可调试。
如果 DebugType
未设置或为空字符串,则 DebugSymbols
属性控制应用程序是否可调试。
EmbedAssembliesIntoApk
此布尔属性确定应用的程序集是否应嵌入到应用程序包中。
对于发行版本,该属性应为 True
,对于调试版本应为 False
。 如果“快速部署”不支持目标设备,则调试版本中可能必须为 True
。
此属性为 False
时,$(AndroidFastDeploymentType)
MSBuild 属性还会控制嵌入到 .apk
中的内容,这会影响部署和重新生成时间。
EnableLLVM
此布尔属性确定在将程序集预编译为本机代码时是否使用 LLVM。
必须安装 Android NDK 才能生成启用了此属性的项目。
该属性默认为 False
。
除非 $(AotAssemblies)
MSBuild 属性为 True
,否则该属性将被忽略。
EnableProguard
此布尔属性确定是否在打包过程中运行 proguard 以链接 Java 代码。
该属性默认为 False
。
如果为 True
,则 @(ProguardConfiguration) 文件将用于控制 proguard
的执行。
GenerateApplicationManifest
启用或禁用在最终 AndroidManifest.xml
文件中发出值的以下 MSBuild 属性:
默认值 $(GenerateApplicationManifest)
为 true
.
JavaMaximumHeapSize
指定在打包过程中构建 .dex
文件时使用的 java-Xmx
参数值的值。 如果未指定,则 -Xmx
选项向 java 提供值 1G
。 我们发现与其他平台相比,Windows 常常要求这样设置。
如果 _CompileDex
目标引发 java.lang.OutOfMemoryError
,则指定该属性是必需的。
通过如下更改自定义值:
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
JavaOptions
指定在生成 .dex
文件时传递给 java 的命令行选项。
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 属性已过时,不再受支持。
MonoAndroidResourcePrefix
通过 AndroidResource
生成操作指定从文件名开头删除的“路径前缀”。 这是为了允许更改资源所在的位置。
默认值为 Resources
。 将此项更改为 res
以获得 Java 项目结构。
MonoSymbolArchive
一个布尔属性,控制是否创建 .mSYM
项目供以后与 mono-symbolicate
一起使用,以从版本堆栈跟踪中提取“真实”文件名和行号信息。
对于已启用调试符号的“发布”应用,默认情况下为 True:$(EmbedAssembliesIntoApk)
为 True,$(DebugSymbols)
为 True,并且 $(Optimize)
为 True。
RunAOTCompilation
一个布尔属性,用于确定程序集是否将提前编译为本机代码并包含在应用程序中。
此属性 False
默认用于 Debug
生成, True
默认情况下为 Release
生成。
此 MSBuild 属性替换 Xamarin.Android 中的 $(AotAssemblies)
MSBuild 属性。 这与 Blazor WASM 使用的属性相同。