Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las propiedades de MSBuild controlan el comportamiento de los objetivos.
Se especifican en el archivo del proyecto, por ejemplo, MyApp.csproj, dentro de un elemento MSBuild PropertyGroup.
Nota:
En .NET para Android, técnicamente no hay distinción entre una aplicación y un proyecto de enlaces, por lo que las propiedades funcionarán en ambos. En la práctica, se recomienda crear proyectos de aplicación y enlaces independientes. Las propiedades que se usan principalmente en los proyectos de enlaces se documentan en la guía de referencia de propiedades de los proyectos de enlaces de MSBuild.
Ámbito del entorno de ejecución
Las aplicaciones android normales tienen como destino CoreCLR en .NET 11 y versiones posteriores. Las aplicaciones Android destinadas a .NET 10 y versiones anteriores usan Mono de forma predeterminada. Al establecer $(PublishAot) en true, se selecciona el entorno de ejecución NativeAOT para las compilaciones para publicación u optimizadas compatibles y tiene prioridad sobre $(UseMonoRuntime).
$(UseMonoRuntime)=true no es una vía de escape de .NET 11. El SDK de .NET 11 lo rechaza con NETSDK1242.
Use la guía mono de .NET 10 y versiones anteriores solo cuando se establezca como destino un marco en el que se admita Mono.
Las aplicaciones Android de .NET 11 requieren el nivel 24 de la API de Android o posterior.
$(SupportedOSPlatformVersion) establece la versión mínima de implementación de la aplicación y se corresponde con //uses-sdk/@android:minSdkVersion en el manifiesto de Android. No selecciona el SDK de destino ni representa la directiva de Google Play.
Los paquetes de tiempo de ejecución de CoreCLR de .NET 11 admiten los siguientes identificadores de tiempo de ejecución (RID) de .NET y las interfaces binarias de aplicaciones Android correspondientes (ABIs):
-
android-arm:armeabi-v7a -
android-arm64:arm64-v8a -
android-x64:x86_64
Android NativeAOT es experimental y admite los mismos tres RID. Los RID son distintos de los nombres ABI de Android y de las arquitecturas de las imágenes del sistema del emulador.
AdbTarget
La propiedad $(AdbTarget) especifica el dispositivo Android de destino en el que se puede instalar el paquete Android o desde el que se puede quitar.
El valor de esta propiedad es el mismo que el de la opción del dispositivo de destino adb.
Después de Generar el AndroidManifest
Destinos de MSBuild enumerados en esta propiedad se ejecutarán directamente después del destino de _GenerateJavaStubs interno, que es donde se generará el archivo AndroidManifest.xml en $(IntermediateOutputPath). Si quiere realizar modificaciones en el archivo AndroidManifest.xml generado, puede hacerlo mediante este punto de extensión.
AndroidAapt2CompileExtraArgs
Especifica las opciones de línea de comandos que se pasan al comando aapt2 compile al procesar activos y recursos de Android.
AndroidAapt2LinkExtraArgs
Especifica opciones de la línea de comandos que se pasan al comando aapt2 link al procesar recursos y activos de Android.
AndroidAddKeepAlives
Una propiedad booleana que controla si el enlazador insertará GC.KeepAlive() invocaciones dentro de proyectos de enlace para evitar la recolección prematura de objetos.
El valor predeterminado es True para las compilaciones de configuración de lanzamiento.
Para las compilaciones sin recortar que usan el mapa de tipos trimmable, las llamadas a GC.KeepAlive() solo se insertan cuando
$(AndroidEnableLegacyCompatibilityAssemblyFixups) también es True. Las compilaciones reducidas mediante el mapa de tipos trimmable no insertan estas llamadas.
AndroidAotAdditionalArguments
Propiedad de tipo cadena que permite a los proyectos compatibles de .NET 10 y versiones anteriores que usan Mono pasar opciones adicionales separadas por comas en el argumento --aot=... del compilador AOT de Mono. La propiedad solo se usa cuando la compilación mono AOT está habilitada.
En general, esta propiedad debe dejarse en blanco, pero en ciertos escenarios especiales podría proporcionar una flexibilidad útil.
La propiedad $(AndroidAotAdditionalArguments) es diferente de la propiedad relacionada $(AndroidExtraAotOptions); $(AndroidAotAdditionalArguments) se incluye dentro de la opción --aot, mientras que $(AndroidExtraAotOptions) pasa argumentos independientes directamente al proceso del compilador Mono AOT.
AndroidAotCustomProfilePath
El archivo que aprofutil debe crear para almacenar datos del generador de perfiles de Mono AOT.
El valor predeterminado es custom.aprof.
Esta propiedad se aplica a los destinos heredados de generación de perfiles AOT para proyectos compatibles de .NET 10 y versiones anteriores que usan Mono.
AndroidAotProfilerPort
El puerto al que aprofutil debe conectarse para obtener datos de creación de perfiles de Mono AOT. El valor predeterminado es 9999.
Esta propiedad se aplica a los destinos heredados de generación de perfiles AOT para proyectos compatibles de .NET 10 y versiones anteriores que usan Mono.
AndroidAotEnableLazyLoad
Habilita la carga diferida (retrasada) de ensamblados compilados mono AOT en lugar de cargarlos previamente al inicio.
Esta propiedad se aplica a los proyectos compatibles de .NET 10 y versiones anteriores que usan Mono. El valor predeterminado es True cuando Mono AOT está habilitado y no se incluyen símbolos de depuración. No configura CoreCLR ni NativeAOT.
Introducido en .NET 6
AndroidApkDigestAlgorithm
Valor de cadena que especifica el algoritmo de síntesis del mensaje que se usará con jarsigner -digestalg.
El valor predeterminado es SHA-256.
AndroidApkSignerAdditionalArguments
Propiedad de cadena que permite al desarrollador proporcionar argumentos a la herramienta apksigner.
AndroidApkSigningAlgorithm
Valor de cadena que especifica el algoritmo de firma que se usará con jarsigner -sigalg.
El valor predeterminado es SHA256withRSA.
AndroidApplication
Valor booleano que indica si el proyecto es para una aplicación Android (True) o para un proyecto de la biblioteca de Android (False o no existe).
Solo puede existir un proyecto con <AndroidApplication>True</AndroidApplication> en un paquete de Android. (Desafortunadamente, este requisito no se ha comprobado, lo que puede dar lugar a errores sutiles y extraños respecto a los recursos de Android).
AndroidApplicationJavaClass
Nombre completo de clase de Java que se va a usar en lugar de android.app.Application cuando una clase hereda de Android.App.Application.
La propiedad $(AndroidApplicationJavaClass) se establece generalmente mediante otras propiedades, como la propiedad $(AndroidEnableMultiDex) de MSBuild.
AndroidAvoidEmitForPerformance
Propiedad booleana que determina si se "evita" o no System.Reflection.Emit para mejorar el rendimiento de inicio. De forma predeterminada, esta propiedad es True.
El uso de System.Reflection.Emit tiene un impacto notable en el rendimiento de inicio en Android. Este comportamiento está deshabilitado de forma predeterminada para los siguientes modificadores de características:
Switch.System.Reflection.ForceInterpretedInvoke: después de la segunda llamada aMethodInfo.Invoke()oConstructorInfo.Invoke(), se emite código para mejorar el rendimiento de las llamadas repetidas.Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: después de la segunda llamada para recuperar un servicio de un contenedor de inserción de dependencias, se emite código para mejorar el rendimiento de las llamadas repetidas.
Es deseable en la mayoría de las aplicaciones Android deshabilitar este comportamiento.
Consulte la documentación sobre modificadores de características de bibliotecas de clases base para obtener más información sobre los modificadores de características disponibles.
Se ha agregado en .NET 8.
AndroidBinUtilsPath
Ruta de acceso a un directorio que contiene binutils de Android como ld, el enlazador nativo y as, el ensamblador nativo. Estas herramientas se incluyen en la carga de trabajo de .NET para Android.
El valor predeterminado es $(MonoAndroidBinDirectory)\binutils\bin\.
AndroidBoundExceptionType
Valor de cadena que especifica cómo se deben propagar las excepciones cuando un tipo proporcionado por .NET para Android implementa un tipo o interfaz de .NET en términos de tipos de Java, por ejemplo Android.Runtime.InputStreamInvoker , y System.IO.Stream, o Android.Runtime.JavaDictionary y System.Collections.IDictionary.
Java: El tipo de excepción de Java original se propaga tal cual.Javasignifica que, por ejemplo,InputStreamInvokerno implementa correctamente la API deSystem.IO.StreamporqueJava.IO.IOExceptionse puede iniciar desdeStream.Read()en lugar deSystem.IO.IOException.System: El tipo de excepción de Java original se detecta y se encapsula en un tipo de excepción de .NET adecuado.Systemsignifica que, por ejemplo,InputStreamInvokerimplementa correctamenteSystem.IO.StreamyStream.Read()no iniciará instancias deJava.IO.IOException. (En su lugar, puede lanzar unSystem.IO.IOExceptionque contenga unJava.IO.IOExceptioncomo valor deException.InnerException).El valor predeterminado es
System.
AndroidBoundInterfacesContainConstants
Propiedad booleana que determina si se admitirán constantes de enlace en interfaces o se usará la solución alternativa para crear una clase IMyInterfaceConsts.
El valor predeterminado es True.
AndroidBoundInterfacesContainStaticAndDefaultInterfaceMethods
Propiedad booleana que indica si se admitirán los miembros predeterminados y estáticos en las interfaces, o una solución alternativa antigua de crear una clase del mismo nivel que contenga miembros estáticos como abstract class MyInterface.
El valor predeterminado es True en .NET 6 y False para versiones heredadas.
AndroidBoundInterfacesContainTypes
Propiedad booleana que indica si se admitirán tipos anidados en interfaces o la solución alternativa de crear un tipo no anidado como IMyInterfaceMyNestedClass.
El valor predeterminado es True en .NET 6 y False para versiones heredadas.
AndroidBuildApplicationPackage
Valor booleano que indica si crear y firmar el paquete (.apk). Establecer este valor en True es equivalente a usar
SignAndroidPackage como destino de compilación.
De forma predeterminada, esta propiedad es False.
AndroidBundleConfigurationFile
Especifica un nombre de archivo que se va a usar como archivo de configuración para bundletool al compilar un lote de aplicaciones de Android. Este archivo controla algunos aspectos de cómo se generan APK desde el lote, por ejemplo, en qué dimensiones se divide el lote para generar APK.
.NET para Android configura algunas de estas opciones automáticamente, incluida la lista de extensiones de archivo para dejar sin comprimir.
Esta propiedad solo es pertinente si $(AndroidPackageFormat) está establecido en aab.
AndroidBundleToolExtraArgs
Especifica las opciones de línea de comandos que se van a pasar al comando bundletool al compilar agrupaciones de aplicaciones.
AndroidClassParser
Propiedad de cadena que controla cómo se analizan los archivos .jar. Los valores posibles son:
class-parse: Usa
class-parse.exepara interpretar bytecode de Java directamente, sin la asistencia de una JVM.jar2xml: este valor está obsoleto y ya no se admite.
AndroidCodegenTarget
Propiedad de cadena que controla la ABI de destino de generación de código. Los valores posibles son:
XamarinAndroid: este valor está obsoleto y ya no se admite.
XAJavaInterop1: Usa Java.Interop para las invocaciones de JNI. Los ensamblados de enlace que usan
XAJavaInterop1solo se pueden compilar y ejecutar con Xamarin.Android 6.1 o posterior. Xamarin.Android 6.1 y versiones posteriores enlazanMono.Android.dllcon este valor.JavaInterop1: valor experimental, actualmente el valor predeterminado para el entorno de ejecución nativeAOT.
El valor predeterminado es XAJavaInterop1.
AndroidCreatePackagePerAbi
Propiedad booleana que determina si se debe crear un .apk por cada ABI de Android seleccionada (como arm64-v8a) en lugar de un único .apk compatible con todas las ABI seleccionadas. Los RID de $(RuntimeIdentifiers) seleccionan esas ABI; los APK se generan por ABI, no por RID.
Vea también la guía Creación de APK específicos para ABI.
AndroidCreateProguardMappingFile
Propiedad booleana que controla si se genera un archivo de mapeo de proguard como parte del proceso de compilación.
Al agregar lo siguiente al csproj, se generará el archivo y se usará la propiedad AndroidProguardMappingFile para controlar la ubicación del archivo de asignación final.
<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>
Al generar archivos .aab, el archivo de asignación se incluye automáticamente en el paquete. No es necesario cargarlo manualmente en Google Play Store. Al usar .apk archivos, AndroidProguardMappingFile deberá cargarse manualmente.
El valor predeterminado es True cuando se usa $(AndroidLinkTool)=r8.
AndroidDebugKeyAlgorithm
Especifica el algoritmo predeterminado que se usará para debug.keystore. El valor predeterminado es RSA.
AndroidDebugKeyValidity
Especifica la validez predeterminada que se usará para debug.keystore. El valor predeterminado es 10950 o 30 * 365 o 30 years.
AndroidDebugStoreType
Especifica el formato de archivo de almacén de claves que se va a usar para debug.keystore. Se establece de forma predeterminada en pkcs12.
AndroidDeviceUserId
Permite implementar y depurar la aplicación en cuentas de usuario invitado o de trabajo. El valor es el valor uid que se obtiene del comando adb siguiente:
adb shell pm list users
El comando anterior devolverá los datos siguientes:
Users:
UserInfo{0:Owner:c13} running
UserInfo{10:Guest:404}
El uid es el primer valor entero. En la salida anterior, son 0 y 10.
AndroidDexTool
Una propiedad de tipo de enumeración con un valor válido de d8.
Anteriormente, se admitía un valor de dx en Xamarin.Android.
Indica qué compilador dex de Android se usa durante el proceso de compilación de .NET para Android.
El valor predeterminado es d8. Consulte nuestra documentación sobre D8 y R8.
AndroidEnableDesugar
Propiedad booleana que determina si desugar está habilitado. Android no admite actualmente todas las características de Java 8 y la cadena de herramientas predeterminada implementa las nuevas características de lenguaje ejecutando transformaciones de código de bytes, llamadas desugar, en la salida del compilador javac. El valor predeterminado es False si se usa $(AndroidDexTool)=dx y True si se usa$(AndroidDexTool)=d8.
AndroidEnableFastDeployment
Propiedad booleana que determina si la implementación rápida está habilitada. La implementación rápida instala ensamblados fuera del paquete de aplicación, lo que puede reducir los tiempos de implementación y recompilación.
El valor predeterminado es True para las compilaciones de depuración y False para las compilaciones de versión.
Establecer esta propiedad equivale a establecer el valor inverso de $(EmbedAssembliesIntoApk). Si se establecen ambas propiedades, $(EmbedAssembliesIntoApk) tiene prioridad.
AndroidEnableGooglePlayStoreChecks
Propiedad booleana que permite a los desarrolladores deshabilitar las siguientes comprobaciones de Google Play Store: XA1004, XA1005 and XA1006. Deshabilitar estas comprobaciones resulta útil para los desarrolladores que no tienen como destino Google Play Store y que no quieren ejecutar las comprobaciones mencionadas.
AndroidEnableLegacyCompatibilityAssemblyFixups
Propiedad booleana que controla si las compilaciones sin recorte modifican los ensamblados a los que se hace referencia para admitir la vinculación heredada y el comportamiento del diseñador de recursos. Estas modificaciones incluyen añadir los métodos abstractos que faltan en las interfaces, actualizar las referencias heredadas al diseñador de recursos e insertar llamadas a GC.KeepAlive() en ensamblados de enlace de Xamarin.Android más antiguos. Las compilaciones recortadas que usan el mapa de tipos trimmable no ejecutan estas correcciones de compatibilidad, y establecer esta propiedad en True no las habilita en las compilaciones recortadas.
El valor predeterminado es False cuando $(AndroidTypeMapImplementation) es trimmable y, en caso contrario, True.
AndroidEnableMarshalMethods
Una propiedad de tipo bool que determina si los métodos de serialización de LLVM están habilitados o no.
Los métodos de manejo de LLVM son una optimización para el inicio de la aplicación que emplea puntos de entrada nativos para el registro de métodos en Java native.
El valor predeterminado de esta propiedad es False.
Esta propiedad no se puede establecer en true cuando $(PublishReadyToRun) es true. Establecer ambas propiedades en true detiene la compilación con XA1049.
Se ha agregado en .NET 8.
AndroidEnableMultiDex
Propiedad booleana que determina si se usará la compatibilidad con Multi-Dex en el archivo .apk final.
De forma predeterminada, esta propiedad es False.
AndroidEnableProfiler
En el caso de las aplicaciones Mono, se trata de un sinónimo de la $(EnableDiagnostics) propiedad . Si es true, el componente de diagnóstico Mono, libmono-component-diagnostics_tracing.so, se incluye en la aplicación.
En el caso de las aplicaciones coreCLR en .NET 11 y versiones posteriores, esta propiedad habilita la configuración de puerto de diagnóstico de CoreCLR usada por herramientas como dotnet-trace y dotnet-gcdump; no agrega un componente de diagnóstico mono. NativeAOT es un entorno de ejecución independiente seleccionado por $(PublishAot) y esta propiedad documenta solo el comportamiento de configuración y empaquetado de Android admitido.
De forma predeterminada, esta propiedad es False.
AndroidEnableObsoleteOverrideInheritance
Propiedad booleana que determina si los métodos enlazados heredan [Obsolete] automáticamente los atributos de los métodos que invalidan.
Se ha agregado compatibilidad con esta propiedad en .NET 8.
De forma predeterminada, esta propiedad es True.
AndroidEnablePreloadAssemblies
Propiedad booleana que controla si todos los ensamblados administrados que se incluyen en el paquete de aplicación se cargan o no durante el inicio del proceso.
Cuando se establece en True, todos los ensamblados que se incluyen en el paquete de aplicación se cargan durante el inicio del proceso, antes de que se invoque cualquier código de aplicación.
Cuando se establece en False, los ensamblados solo se cargan cuando es necesario.
La carga de ensamblados según sea necesario permite que las aplicaciones se inicien más rápido y también es más coherente con la semántica de .NET de escritorio.
Para ver los ahorros de tiempo, establezca la propiedad del sistema debug.mono.log en timing y busque el mensaje Finished loading assemblies: preloaded en adb logcat.
Puede que las aplicaciones o bibliotecas que usan inserción de dependencias necesiten que esta propiedad se establezca en True si estas requieren a su vez que AppDomain.CurrentDomain.GetAssemblies() devuelva todos los ensamblados del conjunto de aplicación, incluso si el ensamblado no hubiera sido necesario.
De forma predeterminada, este valor es False.
AndroidEnableProfiledAot
Una propiedad booleana que determina si se usan o no perfiles AOT de Mono durante la compilación por adelantado. Se aplica a los proyectos compatibles de .NET 10 y versiones anteriores que usan Mono y no configura ReadyToRun, perfiles DE MIBC, PGO dinámico o NativeAOT.
Los perfiles se enumeran en.Grupo de elementos @(AndroidAotProfile). Cuando se habilita AOT con creación de perfiles, se incluye el perfil predeterminado, a menos que $(AndroidUseDefaultAotProfile) sea false. Los perfiles personalizados se pueden agregar con @(AndroidAotProfile).
Cuando $(RunAOTCompilation) es true y esta propiedad no se establece, el valor predeterminado es true. Por lo tanto, el valor predeterminado es true para las compilaciones de versión aplicables que usan Mono.
AndroidEnableRestrictToAttributes
Propiedad de estilo de enumeración con valores válidos de obsolete y disable.
Cuando se establece en obsolete, los tipos y los miembros que están marcados con la anotación de Java androidx.annotation.RestrictToo que están en paquetes de Java no exportados se marcarán con un atributo [Obsolete] en el enlace de C#.
Este [Obsolete] atributo tiene un mensaje descriptivo que explica que el propietario del paquete de Java considera que la API es "interna" y advierte sobre su uso.
Este atributo también tiene un código XAOBS001 de advertencia personalizado para que se pueda suprimir independientemente de la API obsoleta "normal".
Cuando se establece en disable, la API se generará de manera normal, sin atributos adicionales. (Este es el mismo comportamiento que antes de .NET 8).
La adición de atributos [Obsolete] en lugar de quitar automáticamente la API se ha realizado para conservar la compatibilidad de la API con los paquetes existentes. Si, por el contrario, prefieres eliminar los miembros que tengan la @RestrictToanotación o se encuentren en paquetes Java no exportados, puedes utilizar archivos de transformación además de esta propiedad para evitar que estos tipos se vinculen:
<remove-node path="//*[@annotated-visibility]" />
Se ha agregado compatibilidad con esta propiedad en .NET 8.
Esta propiedad se establece en obsolete de forma predeterminada.
AndroidEnableSGenConcurrent
Propiedad booleana que determina si se usará el recolector de GC simultáneo de Mono.
De forma predeterminada, esta propiedad es True. Se aplica a los proyectos compatibles con .NET 10 y versiones anteriores que usan Mono, y no configura los recolectores de basura de CoreCLR o NativeAOT.
AndroidErrorOnCustomJavaObject
Propiedad booleana que determina si los tipos pueden implementar Android.Runtime.IJavaObjectsin heredarlo también de Java.Lang.Object o Java.Lang.Throwable:
class BadType : IJavaObject {
public IntPtr Handle {
get {return IntPtr.Zero;}
}
public void Dispose()
{
}
}
Cuando es True, estos tipos generarán un error XA4212; en caso contrario, una advertencia XA4212.
De forma predeterminada, esta propiedad es True.
AndroidExplicitCrunch
Esta propiedad ya no se admite.
AndroidExtraAotOptions
Propiedad de tipo cadena que permite que los proyectos compatibles de .NET 10 y versiones anteriores que usan Mono pasen argumentos independientes separados por punto y coma directamente al proceso del compilador AOT de Mono. La propiedad solo se usa cuando la compilación mono AOT está habilitada.
En general, esta propiedad debe dejarse en blanco, pero en ciertos escenarios especiales podría proporcionar una flexibilidad útil.
La $(AndroidExtraAotOptions) propiedad es diferente de la propiedad relacionada $(AndroidAotAdditionalArguments) ; $(AndroidExtraAotOptions) pasa argumentos de proceso independientes, mientras $(AndroidAotAdditionalArguments) se incluye dentro de la opción separada por comas --aot=... .
AndroidFastDeploymentType
Esta propiedad se quitó en .NET 9 y no tiene ningún efecto.
AndroidFragmentType
Especifica el tipo completo predeterminado que se usará para todos los elementos de diseño de <fragment> al generar el código de los enlaces de diseño. El valor predeterminado es el tipo de Android Android.App.Fragment estándar.
AndroidGenerateJniMarshalMethods
Esta característica experimental se quitó en .NET 11. Establecer la propiedad no tiene ningún efecto.
AndroidGenerateJniMarshalMethodsAdditionalArguments
Esta característica experimental se quitó en .NET 11. Establecer la propiedad no tiene ningún efecto.
AndroidGenerateLayoutBindings
Permite la generación de código subyacente de diseño si se establece en true o lo deshabilita por completo si se establece en false.
El valor predeterminado es false.
AndroidGenerateResourceDesigner
El valor predeterminado es true. Cuando se establece en false, deshabilita la generación de Resource.designer.cs.
AndroidHttpClientHandlerType
Nota:
Esta propiedad no se admite en .NET 11. Quítelo del archivo del proyecto y úselo UseNativeHttpHandler en su lugar.
AndroidIgnoreAllJniPreload
Valor booleano que, si se establece en true, exime de que todas las bibliotecas JNI nativas se precarguen al inicio de la aplicación. De forma predeterminada, el tiempo de ejecución cargará todas estas bibliotecas antes durante el inicio de la aplicación para garantizar su inicialización adecuada. Sin embargo, en algunos casos podría no ser el comportamiento deseado y esta propiedad le permite deshabilitarla de forma eficaz.
Algunas bibliotecas de marcos que se deben cargar en el inicio de la aplicación no se verán afectadas por esta propiedad.
Consulte también @(AndroidNativeLibraryNoJniPreload) para obtener una manera más detallada de excluir las bibliotecas del mecanismo de precarga.
AndroidIncludeWrapSh
Un valor booleano que indica si el script del contenedor de Android (wrap.sh) se debe empaquetar en el APK. El valor predeterminado es false porque el script de contenedor puede influir significativamente en la forma en que la aplicación se inicia y funciona, y el script debe incluirse solo cuando sea necesario, por ejemplo, al depurar o cambiar el comportamiento de inicio o entorno de ejecución de la aplicación.
El script se agrega al proyecto usando elLa acción de construcción @(AndroidNativeLibrary), ya que se coloca en el mismo directorio que las bibliotecas nativas específicas de la arquitectura y debe tener el nombre wrap.sh.
La forma más fácil de especificar la ruta de acceso al script wrap.sh es colocarla en un directorio con el nombre de la arquitectura de destino. Este enfoque funcionará si se tiene tan solo un objeto wrap.sh por arquitectura:
<AndroidNativeLibrary Include="path/to/arm64-v8a/wrap.sh" />
Sin embargo, si el proyecto necesita más de un objeto wrap.sh por arquitectura para distintos propósitos, este enfoque no funcionará.
En su lugar, en estos casos el nombre se puede especificar con los metadatos Link de AndroidNativeLibrary:
<AndroidNativeLibrary Include="/path/to/my/arm64-wrap.sh">
<Link>lib\arm64-v8a\wrap.sh</Link>
</AndroidNativeLibrary>
Si se usan los metadatos Link, la ruta de acceso especificada en su valor debe ser una ruta de acceso de biblioteca específica de la arquitectura nativa válida, relativa al directorio raíz APK. El formato de la ruta de acceso es lib\ARCH\wrap.sh donde ARCH puede ser uno de los siguientes:
arm64-v8aarmeabi-v7ax86_64x86
AndroidIncludeAssetPacksInPackage
Esta propiedad controla si los Asset Packs se compilan automáticamente y se incluyen automáticamente en el archivo final .aab. El valor se establecerá de forma predeterminada en true.
En determinados casos, es posible que el usuario quiera liberar una versión provisional. En estos casos, el usuario no necesita actualizar el paquete de recursos. Especialmente si el contenido del paquete de recursos no ha cambiado. Esta propiedad permite al usuario omitir los paquetes de recursos si no son necesarios.
Agregado en .NET 9
InstalarDependenciasJavaEnAndroid
El valor predeterminado es true para las compilaciones de la línea de comandos. Cuando se establece en true, habilita la instalación del SDK de Java al ejecutar el objetivo <InstallAndroidDependencies/>.
Se ha agregado compatibilidad con esta propiedad en .NET 9.
AndroidInstrumentation
Propiedad de tipo cadena que especifica el nombre de la clase de ejecución de Android instrumentation que se va a usar al iniciar la aplicación a través de dotnet run.
Cuando no se establece esta propiedad, dotnet run resuelve lo que se va a iniciar desde el generado AndroidManifest.xml en la salida intermedia:
- Si
$(AndroidUseInstrumentation)estrue, se usa el primer<instrumentation/>elemento. - De lo contrario, se prefiere el
<activity/>iniciable, y se utiliza el primer elemento<instrumentation/>cuando la aplicación no declara ninguna actividad de inicio. Esto permitedotnet rununa aplicación cuyo único punto de entrada sea unaAndroid.App.Instrumentationsubclase, como un host BenchmarkDotNet.
Si la aplicación no declara ninguna, se produce un error en la compilación con XA1043. Si $(AndroidUseInstrumentation) es true pero la aplicación declara no <instrumentation/>, se produce un error en la compilación con XA1048.
Cuando se inicia una instrumentación, dotnet run se ejecuta adb shell am instrument -w -r y sale con un código de salida distinto de cero si la instrumentación falla o llama a Instrumentation.Finish() con Result.Canceled. Al establecer $(WaitForExit) en false, se omite el -w, por lo que dotnet run vuelve tan pronto como se inicia la instrumentación y no se informan resultados.
Cualquier argumento que siga a -- se reenvía a la instrumentación como extras de am instrument. Los argumentos del formulario KEY=VALUE se convierten en -e KEY VALUEy todos los argumentos restantes se combinan en un único -e args "..." extra:
dotnet run -- --filter *MyBenchmark*
se entrega a Instrumentation.OnCreate(Bundle?) como arguments.GetString("args").
Introducido en .NET 11.
AndroidJavadocVerbosity
Especifica qué tan "detallados" deben ser los comentarios de documentación XML de C# al importar la documentación de Javadoc en proyectos de enlace.
Requiere el uso de Acción de compilación @(JavaSourceJar).
La propiedad $(AndroidJavadocVerbosity) es de tipo enumerado, con valores posibles de full o intellisense:
-
intellisense: solo emite los comentarios XML:<exception/>,<param/>,<returns/>,<summary/>. -
full: emita elementosintellisense, así como<remarks/>,<seealso/>y cualquier otra cosa que sea compatible.
El valor predeterminado es intellisense.
AndroidKeyStore
Valor booleano que indica si se debe usar información de firma personalizada. El valor predeterminado es False, lo que significa que se usará la clave de firma de depuración predeterminada para firmar paquetes.
AndroidLaunchActivity
Actividad de Android que se va a iniciar.
AndroidLinkMode
Especifica qué tipo de vinculación debe realizarse en los ensamblados contenidos dentro del paquete de Android. Solo se usa en proyectos de aplicación de Android. El valor predeterminado es SdkOnly. Los valores válidos son:
None: no se intenta la vinculación.
SdkOnly: la vinculación se realizará solo en las bibliotecas de clase base, no en los ensamblados del usuario.
Completo: La vinculación se llevará a cabo en las bibliotecas de clases base y en los ensamblados de usuario.
Nota:
El uso de un valor para
AndroidLinkModede Full da lugar con frecuencia a aplicaciones interrumpidas, en especial cuando se usa la reflexión. Evitarlo a menos que realmente sepas lo que estás haciendo.
<AndroidLinkMode>SdkOnly</AndroidLinkMode>
AndroidLinkResources
Cuando true, el sistema de compilación vinculará los tipos anidados de la clase Resource de Resource.Designer.cs en todos los ensamblados. El código IL que usa esos tipos se actualizará para usar los valores directamente en lugar de acceder a los campos.
La vinculación de los tipos anidados puede tener un pequeño impacto en la reducción del tamaño del apk y también puede ayudar con el rendimiento de inicio. Solo las compilaciones de "lanzamiento" están vinculadas.
Experimental. Está diseñado solamente para trabajar con código como
var view = FindViewById(Resources.Ids.foo);
No se admitirán otros escenarios (como la reflexión).
AndroidLinkSkip
Especifica una lista delimitada por punto y coma (;) de nombres de ensamblado, sin extensiones de archivos, de ensamblados que no se deben vincular. Solo se usa dentro de proyectos de aplicaciones Android.
<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>
AndroidLinkTool
Propiedad de tipo enumeración con los valores válidos de proguard o r8. Indica el reductor de código que se usa con el código Java. El valor predeterminado es una cadena vacía o proguard si $(AndroidEnableProguard) es True. Consulte nuestra documentación sobre D8 y R8.
AndroidLintEnabled
Propiedad booleana que permite que el desarrollador ejecute la herramienta lint de Android como parte del proceso de empaquetado.
Cuando $(AndroidLintEnabled)=True, se usan las propiedades siguientes:
También se pueden usar las acciones de compilación siguientes:
Consulte la Ayuda de Lint para obtener más información sobre las herramientas lint de Android.
AndroidLintEnabledIssues
Propiedad de cadena que es una lista separada por comas de problemas de Lint que se van a habilitar.
Solo se usa cuando $(AndroidLintEnabled)=True.
AndroidLintDisabledIssues
Propiedad de cadena que es una lista separada por comas de problemas de Lint que se van a deshabilitar.
Solo se usa cuando $(AndroidLintEnabled)=True.
AndroidLintCheckIssues
Propiedad de cadena que es una lista separada por comas de problemas de Lint que se van a comprobar.
Solo se usa cuando $(AndroidLintEnabled)=True.
Nota: Solo se comprobarán estos problemas.
AndroidManagedSymbols
Propiedad booleana que controla si se generan puntos de secuencia para que la información de nombre de archivo y número de línea se pueda extraer de los seguimientos de la pila de Release.
AndroidManifest
Especifica un nombre de archivo para usar como plantilla para el archivo AndroidManifest.xml de la aplicación.
Durante la construcción, cualquier otro valor necesario se combina para producir el AndroidManifest.xml real.
$(AndroidManifest) debe contener el nombre de paquete en el atributo /manifest/@package.
AndroidManifestMerger
Especifica la implementación para combinar archivos de AndroidManifest.xml. Se trata de una propiedad de estilo de enumeración donde legacy selecciona la implementación original de C# y manifestmerger.jar selecciona la implementación de Java de Google.
El valor predeterminado es actualmente manifestmerger.jar. Si desea usar la versión anterior, agregue lo siguiente a csproj.
<AndroidManifestMerger>legacy</AndroidManifestMerger>
La fusión de Google permite la compatibilidad con xmlns:tools="http://schemas.android.com/tools" tal y como se describe en la documentación de Android.
AndroidManifestMergerExtraArgs
Una propiedad de cadena para proporcionar argumentos a la herramienta de documentación de Android.
Si quiere obtener una salida detallada de la herramienta, puede agregar lo siguiente a .csproj.
<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>
AndroidManifestType
Propiedad de tipo enumeración con los valores válidos de Xamarin o GoogleV2.
Controla qué repositorio usa el
InstallAndroidDependencies para determinar qué paquetes de Android y qué versiones de los mismos están disponibles y pueden instalarse.
Xamarin es el repositorio de la lista aprobada (recomendado) en el Administrador de SDK de Visual Studio.
GoogleV2 es el repositorio de la lista completa (no compatible) en el Administrador de SDK de Visual Studio.
Si $(AndroidManifestType) no se establece, Xamarin se usa.
AndroidManifestSource
Propiedad de tipo cadena que especifica un URI absoluto o una ruta de archivo local existente para el manifiesto del repositorio utilizado por el
InstallAndroidDependencies objetivo. Cuando no se establece esta propiedad, se usa el manifiesto de repositorio predeterminado seleccionado por $(AndroidManifestType) .
Por ejemplo:
<AndroidManifestSource>https://example.com/AndroidManifestFeed.xml</AndroidManifestSource>
AndroidManifestPlaceholders
Lista separada por punto y coma de pares de reemplazo clave-valor para AndroidManifest.xml, donde los pares tienen el formato key=value.
Por ejemplo, un valor de propiedad de assemblyName=$(AssemblyName) define un marcador de posición de ${assemblyName} que puede aparecer en AndroidManifest.xml:
<application android:label="${assemblyName}"
Esto proporciona un método para insertar variables del proceso de compilación en el archivo AndroidManifest.xml.
AndroidMultiDexClassListExtraArgs
Propiedad de cadena que permite a los desarrolladores pasar argumentos adicionales a com.android.multidex.MainDexListBuilder al generar el archivo multidex.keep.
Un caso específico es si se obtiene el siguiente error durante la compilación de dx.
com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded
Si recibe este error, puede agregar lo siguiente al elemento .csproj.
<DxExtraArguments>--force-jumbo </DxExtraArguments>
<AndroidMultiDexClassListExtraArgs>--disable-annotation-resolution-workaround</AndroidMultiDexClassListExtraArgs>
que permitirá que el paso dx se ejecute con éxito.
AndroidNdkDirectory
La $(AndroidNdkDirectory) propiedad especifica un directorio de instalación personalizado de NDK de Android. La ruta de acceso se puede establecer en el archivo del proyecto o en la línea de comandos:
dotnet build -p:AndroidNdkDirectory=/path/to/android-ndk
Si no se establece esta propiedad, .NET para Android busca el NDK desde el entorno de desarrollo de Android configurado.
Formato de Paquete Android
Propiedad de tipo enumeración con los valores válidos de apk o aab. Indica si quiere empaquetar la aplicación Android como un archivo APK o un paquete de aplicaciones Android. Los grupos de aplicaciones son un nuevo formato para las compilaciones de Release que se quieran enviar a Google Play. El valor predeterminado es apk.
Si $(AndroidPackageFormat) se establece en aab, se establecen otras propiedades de MSBuild necesarias para los lotes de aplicaciones de Android:
-
$(AndroidUseApkSigner)esFalse. -
$(AndroidCreatePackagePerAbi)esFalse.
Esta propiedad será declarada obsoleta para .NET 6. Los usuarios deben cambiar a la versión más reciente AndroidPackageFormats.
FormatosDePaquetesDeAndroid
Propiedad delimitada por punto y coma con valores válidos de apk y aab.
Indica si quiere empaquetar la aplicación Android como un archivo APK o un paquete de aplicaciones Android. Los grupos de aplicaciones son un nuevo formato para las compilaciones de Release que se quieran enviar a Google Play.
Al crear una compilación de lanzamiento, es posible que quiera generar aab y un apk para su distribución en varios almacenes.
Si se establece AndroidPackageFormats en aab;apk, ambos se generarán. Al establecer AndroidPackageFormats en aab o apk, solo se generará un archivo.
El valor predeterminado es aab;apk para compilaciones de Release solamente.
El uso de apk para la depuración es más rápido, pero aab también es compatible con una implementación rápida si es necesario (por ejemplo, al probar paquetes de activos).
AndroidPackageNamingPolicy
Propiedad de estilo enum para especificar los nombres de paquetes de Java del código fuente de Java generado.
El único valor admitido es LowercaseCrc64.
AndroidPrepareForBuildDependsOn
Propiedad delimitada por punto y coma que se puede usar para ampliar el proceso de compilación de Android. Los objetivos de MSBuild añadidos a esta propiedad se ejecutarán al principio de la compilación, tanto para los tipos de proyecto Aplicación como Biblioteca. Esta propiedad está vacía de forma predeterminada.
Ejemplo:
<PropertyGroup>
<AndroidPrepareForBuildDependsOn>MyCustomTarget</AndroidPrepareForBuildDependsOn>
</PropertyGroup>
<Target Name="MyCustomTarget" >
<Message Text="Running target: 'MyCustomTarget'" Importance="high" />
</Target>
AndroidProguardMappingFile
Especifica la regla de ProGuard -printmapping para r8. Esto significa que el archivo mapping.txt se generará en la carpeta $(OutputPath). Este archivo se puede usar para cargar paquetes en Google Play Store.
De forma predeterminada, este archivo se genera automáticamente al usar AndroidLinkTool=r8 y generará el siguiente archivo $(OutputPath)mapping.txt.
Si no quiere generar este archivo de asignación, puede usar la propiedad AndroidCreateProguardMappingFile para dejar de crearlo.
Agregue lo siguiente en el proyecto
<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>
o utilice -p:AndroidCreateProguardMappingFile=False en la línea de comandos.
AndroidD8IgnoreWarnings
Especifica --map-diagnostics warning info para ser pasado a d8. El valor predeterminado es True, pero se puede establecer en False para exigir un comportamiento más estricto. Consulte el código fuente D8 y R8 para obtener más información.
Se ha agregado en .NET 8.
AndroidR8IgnoreWarnings
Especifica la regla de ProGuard -ignorewarnings para r8. Esto permite a r8 continuar con la compilación dex aunque se encuentren ciertas advertencias. El valor predeterminado es True, pero se puede establecer en False para exigir un comportamiento más estricto. Para obtener más información, consulte elmanual de ProGuard.
A partir de .NET 8, especifica --map-diagnostics warning info. Consulte el código fuente D8 y R8 para obtener más información.
AndroidR8JarPath
Ruta de acceso a r8.jar para su uso con el compilador y reductor de dex de r8. El valor predeterminado es una ruta de acceso a la instalación de la carga de trabajo de .NET para Android. Para obtener más información, vea la documentación sobre D8 y R8.
AndroidR8ObfuscationMode
Una propiedad de tipo enumeración que especifica cómo r8 ofusca los nombres de Java cuando $(AndroidLinkTool) es r8. Los valores admitidos son:
-
private-membersconserva los nombres de clases e interfaces de Java y los nombres de miembros públicos o protegidos. Los miembros privados y privados de paquetes pueden ofuscarse y la optimización de R8 está habilitada. -
disableddeshabilita la ofuscación, conserva todos los nombres de Java y usa los valores predeterminados de Android R8 no optimizados.
Esta propiedad no deshabilita la reducción del código R8.
Esta propiedad se introdujo en una versión de mantenimiento de .NET 10. El valor predeterminado es disabled en .NET 10 y en private-members .NET 11 y versiones posteriores.
AndroidResgenExtraArgs
Especifica opciones de la línea de comandos que se van a pasar al comando aapt al procesar recursos de Android.
AndroidResgenFile
Especifica el nombre del archivo de recursos que se va a generar. La plantilla predeterminada establece esta propiedad en Resource.designer.cs.
AndroidResourceDesignerClassModifier
Especifica el modificador de clase para la clase intermedia Resource que se genera. Los valores válidos son public y internal.
De forma predeterminada, será public.
Se ha agregado en .NET 9.
Versión de herramientas de compilación de Android SDK
El paquete de herramientas de compilación de Android SDK proporciona, entre otras, las herramientas aapt y zipalign. Se pueden instalar varias versiones diferentes del paquete de herramientas de compilación al mismo tiempo. Para seleccionar el paquete de herramientas de compilación para el empaquetado, se verifica y utiliza una versión de herramientas de compilación "preferida" si está presente; si la versión "preferida" no está presente, se utiliza el paquete de herramientas de compilación instalado con la versión más alta.
La propiedad de MSBuild $(AndroidSdkBuildToolsVersion) contiene la versión de herramientas de compilación preferida. El sistema de compilación de .NET para Android proporciona un valor predeterminado en Xamarin.Android.Common.targets, y dicho valor predeterminado puede sobrescribirse en el archivo de proyecto para elegir una versión alternativa de las herramientas de compilación, si (por ejemplo) la última versión de aapt falla, mientras que se sabe que una versión anterior de aapt funciona.
AndroidSigningKeyAlias
Especifica el alias de la clave en el almacén de claves. Es el valor de keytool -alias usado al crear el almacén de claves.
AndroidSigningKeyPass
Especifica la contraseña de la clave en el archivo de almacén de claves. Este es el valor especificado cuando keytool pide que se escriba la contraseña de clave para $(AndroidSigningKeyAlias).
Esta propiedad también admite los prefijos env: y file: que se pueden usar para especificar una variable de entorno o un archivo que contiene la contraseña.
Estas opciones proporcionan una manera de evitar que la contraseña aparezca en los registros de compilación.
Por ejemplo, para usar una variable de entorno denominada AndroidSigningPassword:
<PropertyGroup>
<AndroidSigningKeyPass>env:AndroidSigningPassword</AndroidSigningKeyPass>
</PropertyGroup>
Para usar un archivo ubicado en C:\Users\user1\AndroidSigningPassword.txt:
<PropertyGroup>
<AndroidSigningKeyPass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningKeyPass>
</PropertyGroup>
Nota:
El prefijo env: no se admite cuando $(AndroidPackageFormat) está establecido en aab.
AndroidSigningKeyStore
Especifica el nombre del archivo del almacén de claves que crea keytool. Corresponde al valor proporcionado a la opción keytool - keystore.
AndroidSigningStorePass
Especifica la contraseña en $(AndroidSigningKeyStore).
Es el valor proporcionado a keytool al crear el archivo de almacén de claves y cuando se pide que se escriba la contraseña del almacén de claves.
Esta propiedad también admite los prefijos env: y file: que se pueden usar para especificar una variable de entorno o un archivo que contiene la contraseña. Estas opciones proporcionan una manera de evitar que la contraseña aparezca en los registros de compilación.
Por ejemplo, para usar una variable de entorno denominada AndroidSigningPassword:
<PropertyGroup>
<AndroidSigningStorePass>env:AndroidSigningPassword</AndroidSigningStorePass>
</PropertyGroup>
Para usar un archivo ubicado en C:\Users\user1\AndroidSigningPassword.txt:
<PropertyGroup>
<AndroidSigningStorePass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningStorePass>
</PropertyGroup>
Nota:
El prefijo env: no se admite cuando $(AndroidPackageFormat) está establecido en aab.
AndroidSigningPlatformKey
Especifica el archivo de clave que se va a usar para firmar el apk.
Esto solo se usa al construir aplicaciones system.
AndroidSigningPlatformCert
Especifica el archivo de certificado que se va a usar para firmar el apk.
Esto solo se usa al construir aplicaciones system.
AndroidStripILAfterAOT
Una propiedad de tipo bool que especifica si se eliminarán o no los cuerpos de los métodos compilados mediante AOT.
El valor predeterminado es false y los cuerpos de los métodos compilados de AOT no se quitarán.
Cuando se establece en true, $(AndroidEnableProfiledAot) se establece en false de forma predeterminada. Esto significa que, en las compilaciones Release de Mono compatibles de .NET 8 y .NET 9, en las que $(RunAOTCompilation) está true de forma predeterminada, Mono AOT está habilitado para todo.
Esto puede dar lugar a un aumento de los tamaños de la aplicación. Este comportamiento se puede invalidar estableciendo explícitamente $(AndroidEnableProfiledAot) a true dentro del archivo del proyecto.
Se ha agregado compatibilidad experimental con esta propiedad en .NET 8, quitada en .NET 10.
AndroidStripNativeLibraries
Una propiedad de tipo bool que indica al proceso de empaquetado que elimine los símbolos de depuración de las bibliotecas compartidas nativas (archivos .so).
El valor predeterminado es false y los símbolos de depuración, si los hay, se conservarán al empaquetar.
AndroidSupportedAbis
Esta propiedad ya no se admite en .NET 6 y versiones posteriores. Elimínelo y use $(RuntimeIdentifier) o $(RuntimeIdentifiers) con los RID de .NET en lugar de los nombres de ABI de Android.
Por ejemplo, la siguiente configuración de .NET 11 incluye todas las arquitecturas de CoreCLR admitidas:
<PropertyGroup>
<RuntimeIdentifiers>android-arm;android-arm64;android-x64</RuntimeIdentifiers>
</PropertyGroup>
AndroidTlsProvider
Esta propiedad está obsoleta y no debe usarse.
AndroidTypeMapImplementation
Propiedad de tipo enumerado que selecciona la implementación del mapa de tipos.
Los valores válidos son llvm-ir y trimmable.
El valor predeterminado es trimmable cuando $(PublishAot) es true y llvm-ir de lo contrario.
AndroidUseApkSigner
Propiedad booleana que permite al desarrollador usar la herramienta apksigner en lugar de jarsigner.
AndroidUseDefaultAotProfile
Propiedad de tipo bool que permite al desarrollador evitar el uso del perfil AOT predeterminado de Mono.
El perfil predeterminado se usa cuando $(AndroidEnableProfiledAot) es true, a menos que esta propiedad esté establecida en false.
Esta propiedad se aplica a los proyectos compatibles de .NET 10 y versiones anteriores que usan Mono. No selecciona perfiles MIBC ni PGO dinámico para CoreCLR.
AndroidUseDesignerAssembly
Una propiedad booleana que controla si el sistema de compilación generará un archivo _Microsoft.Android.Resource.Designer.dll en lugar de un archivo Resource.Designer.cs. Las ventajas de esto son aplicaciones más pequeñas y un tiempo de inicio más rápido.
El valor predeterminado está true en .NET 8.
Como autor de Nuget, se recomienda enviar tres versiones del ensamblado si desea mantener la compatibilidad con versiones anteriores.
Uno para MonoAndroid, uno para net6.0-android y otro para net8.0-android. Para ello, use Xamarin.Legacy.Sdk. Esto solo es necesario si tu proyecto de biblioteca de NuGet utiliza elementos AndroidResource en el proyecto o a través de dependencias.
<TargetFrameworks>monoandroid90;net6.0-android;net8.0-android</TargetFrameworks>
Como alternativa, desactive esta configuración hasta que haya quedado en desuso tanto clásico como net7.0-android.
Los proyectos de .NET 8 que elijan desactivar esta configuración no podrán consumir referencias que lo usen. Si intenta usar un ensamblado que tiene esta característica habilitada en un proyecto que no lo hace, recibirá un XA1034 error de compilación.
Se ha agregado en .NET 8.
AndroidUseInstrumentation
Una propiedad booleana que indica que la aplicación se inicia mediante su elemento <instrumentation/> en lugar de un <activity/>, como un anfitrión de prueba o BenchmarkDotNet.
Cuando true, dotnet run resuelve $(AndroidInstrumentation) a partir del AndroidManifest.xml generado y lo inicia con adb shell am instrument, incluso si la aplicación también declara una actividad ejecutable.
El valor predeterminado es true cuando $(EnableMSTestRunner) es true y, en caso contrario, false.
Tenga en cuenta que una aplicación sin ningún <activity/> iniciable se inicia a través de su <instrumentation/>, independientemente de esta propiedad.
Introducido en .NET 11.
AndroidUseInterpreter
Una propiedad booleana que hace que MonoVM .apk incluya el intérprete de Mono, y no el JIT normal. De forma predeterminada, se establece en True para las compilaciones de depuración que usan Mono y en False en caso contrario.
Esta propiedad se aplica a los proyectos compatibles de .NET 10 y versiones anteriores que usan Mono. No es una configuración de CoreCLR y Android no tiene ningún intérprete en .NET 11 y versiones posteriores.
Experimental.
AndroidUseLegacyVersionCode
Propiedad booleana que permite al desarrollador revertir el cálculo de versionCode al comportamiento anterior de Xamarin.Android 8.2. SOLO debe usarse para los desarrolladores con aplicaciones en Google Play Store. Se recomienda encarecidamente utilizar la nueva propiedad $(AndroidVersionCodePattern).
AndroidUseManagedDesignTimeResourceGenerator
Propiedad booleana que cambiará las compilaciones en tiempo de diseño para usar el analizador de recursos administrados en lugar de aapt.
AndroidUseNegotiateAuthentication
Propiedad booleana que habilita la compatibilidad con la autenticación NTLMv2/Negotiate en AndroidMessageHandler. El valor predeterminado es Falso.
Se ha agregado en .NET 7.
AndroidUseSharedRuntime
Esta propiedad está obsoleta y no debe usarse.
AndroidVersionCode
Propiedad de MSBuild que se puede usar como alternativa a /manifest/@android:versionCode en el archivo AndroidManifest.xml. Para activar esta funcionalidad, también debe habilitar <GenerateApplicationManifest>true</GenerateApplicationManifest>.
Este será el valor predeterminado en .NET 6.
Esta propiedad se omite si se usan $(AndroidCreatePackagePerAbi) y $(AndroidVersionCodePattern).
@android:versionCode es un valor entero que se debe incrementar para cada versión de Google Play. Consulte la documentación de Android para obtener más información sobre los requisitos de /manifest/@android:versionCode.
AndroidVersionCodePattern
Propiedad de cadena que permite al desarrollador personalizar versionCode en el manifiesto.
Consulte Creación del código de la versión para el APK para obtener más información sobre cómo establecer el valor de versionCode.
Algunos ejemplos: si abi es armeabi y versionCode en el manifiesto es 123, {abi}{versionCode} producirá un código de versión de 1123 cuando $(AndroidCreatePackagePerAbi) sea True; de lo contrario, producirá un valor de 123.
Si abi es x86_64 y versionCode en el manifiesto es 44, se generará 544 cuando $(AndroidCreatePackagePerAbi) sea True; de lo contrario, se producirá un valor de 44.
Si se incluye una cadena con formato de relleno a la izquierda, {abi}{versionCode:0000}, produciría 50044 porque estamos rellenando a la izquierda versionCode con 0. Como alternativa, puede usar el relleno decimal, como ,
{abi}{versionCode:D4} que hace lo mismo que el ejemplo anterior.
Solo se admiten cadenas con formato de relleno "0" y "Dx", dado que el valor DEBE ser un entero.
Elementos de clave predefinidos
ABI: inserta la ABI de destino para la aplicación.
- 2:
armeabi-v7a - 3:
x86 - 4:
arm64-v8a - 5:
x86_64
- 2:
minSDK: inserta el valor de SDK mínimo admitido del archivo
AndroidManifest.xmlo11si no se define ninguno.versionCode: usa el código de versión directamente de
Properties\AndroidManifest.xml.
Puede definir elementos personalizados con la propiedad $(AndroidVersionCodeProperties), que se define a continuación.
De forma predeterminada, el valor se establece en {abi}{versionCode:D6}. Si un programador quiere mantener el comportamiento anterior, se puede reemplazar el valor predeterminado mediante el establecimiento de la propiedad $(AndroidUseLegacyVersionCode) en true.
AndroidVersionCodeProperties
Propiedad de cadena que permite al desarrollador definir elementos personalizados para usar con $(AndroidVersionCodePattern).
Tienen el formato de un par key=value. Todos los elementos de value deben ser valores enteros. Por ejemplo: screen=23;target=$(_AndroidApiLevel). Como puede ver, pueden hacer uso de propiedades de MSBuild existentes o personalizadas en la cadena.
ApplicationId
Propiedad de MSBuild que se puede usar como alternativa a /manifest/@package en el archivo AndroidManifest.xml. Para activar esta funcionalidad, también debe habilitar <GenerateApplicationManifest>true</GenerateApplicationManifest>.
Este será el valor predeterminado en .NET 6.
Consulte la documentación de Android para obtener más información sobre los requisitos de /manifest/@package.
Título de la Aplicación
Propiedad de MSBuild que se puede usar como alternativa a /manifest/application/@android:label en el archivo AndroidManifest.xml. Para activar esta funcionalidad, también debe habilitar <GenerateApplicationManifest>true</GenerateApplicationManifest>.
Este será el valor predeterminado en .NET 6.
Consulte la documentación de Android para obtener más información sobre los requisitos de /manifest/application/@android:label.
Versión de la aplicación
Propiedad de MSBuild que se puede usar como alternativa a /manifest/@android:versionName en el archivo AndroidManifest.xml. Para activar esta funcionalidad, también debe habilitar <GenerateApplicationManifest>true</GenerateApplicationManifest>.
Este será el valor predeterminado en .NET 6.
Consulte la documentación de Android para obtener más información sobre los requisitos de /manifest/@android:versionName.
AotAssemblies
Una propiedad booleana que determina si los ensamblados se compilarán por adelantado en código nativo mediante Mono y se incluirán en las aplicaciones.
Cuando no se especifica, su valor efectivo sigue $(RunAOTCompilation): False para las compilaciones de depuración y True para las compilaciones de lanzamiento que usan Mono en frameworks de destino compatibles de .NET 10 y versiones anteriores.
En desuso en .NET 7. Para los proyectos compatibles con .NET 10 y versiones anteriores que utilicen Mono, migra a la propiedad $(RunAOTCompilation) de MSBuild en su lugar.
Especificar $(AotAssemblies), incluido establecerlo en false, emite la advertencia XA1029.
Establecerlo en true para CoreCLR o NativeAOT provoca el error XA1044, que detiene la compilación, cuando $(RunAOTCompilation) no está establecido (o se evalúa como true), porque la lógica de valor predeterminado reenvía $(AotAssemblies) a $(RunAOTCompilation).
Para los proyectos CoreCLR de .NET 11, elimine $(AotAssemblies) sin añadir $(RunAOTCompilation). CoreCLR no usa el proceso AOT de Mono.
AProfUtilExtraOptions
Opciones adicionales para pasar a aprofutil al usar los objetivos de generación de perfiles heredados de Mono AOT en proyectos compatibles con .NET 10 y versiones anteriores.
BeforeBuildAndroidAssetPacks
Los objetivos de MSBuild enumerados en esta propiedad se ejecutarán directamente antes de que se compilen los elementos AssetPack.
Agregado en .NET 9
BeforeGenerateAndroidManifest
Los destinos de MSBuild enumerados en esta propiedad se ejecutarán directamente antes de _GenerateJavaStubs.
Configuración
Especifica la configuración de compilación que se usará, como "Depuración" o "Versión". La propiedad Configuration se usa para determinar los valores predeterminados de otras propiedades que determinan el comportamiento de destino. Se pueden crear configuraciones adicionales dentro del IDE.
De forma predeterminada, la Debug configuración resultará en
Install y
SignAndroidPackage tiene como objetivo crear un paquete de Android más pequeño que requiere la presencia de otros archivos y paquetes para funcionar.
La configuración predeterminada Release resultará en
Install y
SignAndroidPackage tiene como objetivo crear un paquete de Android que sea independiente y se pueda usar sin necesidad de instalar ningún otro paquete o archivo.
DebugSymbols
Valor booleano que determina si el paquete de Android es depurable, en combinación con la propiedad $(DebugType).
Un paquete depurable contiene símbolos de depuración, establece el atributo //application/@android:debuggable en true y añade automáticamente el permiso INTERNET para que un depurador pueda conectarse al proceso. Una aplicación es depurable si DebugSymbols es TrueyDebugType es una cadena vacía o Full.
DebugType
Especifica el tipo de símbolos de depuración que se van a generar como parte de la compilación, que también afecta a si la aplicación es depurable. Los valores posibles son:
Full: se generan símbolos completos. Si la propiedad de MSBuild Si la propiedad
DebugSymbolsde MSBuild también esTrue, el paquete de la aplicación es depurable.PdbOnly: se generan símbolos "PDB". El paquete de aplicación no es depurable.
Si DebugType no está establecido o es la cadena vacía, la propiedad DebugSymbols controla si la aplicación es o no depurable.
Dispositivo
Especifica el dispositivo Android o emulador al que se dirige cuando se usan dotnet run --device <Device> o destinos de MSBuild que interactúan con dispositivos (como Run, Installo Uninstall).
El valor debe ser el número de serie o identificador de dispositivo completo tal como devuelve adb devices. Por ejemplo, si el dispositivo serie es emulator-5554, debe usar -p:Device=emulator-5554.
Cuando se establece, esta propiedad se usa para inicializar la AdbTarget propiedad con el valor -s "<Device>".
Para obtener más información sobre la selección de dispositivos, consulte la especificación de selección de dispositivos del SDK de .NET.
DiagnosticAddress
Valor proporcionado por dotnet-dsrouter, como 127.0.0.1, el componente de dirección IP de $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.
Cuando esta propiedad no está vacía y $(AndroidEnableProfiler) no se establece explícitamente en false, habilita implícitamente los diagnósticos de Android.
Para CoreCLR, el punto de conexión TCP resultante se mantiene normalmente en bucle invertido y lo usa dotnet-dsrouter. Para un emulador de Android, use 10.0.2.2 para llegar a la máquina de desarrollo; para un dispositivo físico, use 127.0.0.1 con el reenvío de puertos Android habilitado por dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Android.
Tiene como valor predeterminado 127.0.0.1.
DiagnosticConfiguration
Valor proporcionado por dotnet-dsrouter para DOTNET_DiagnosticPorts , por ejemplo:
127.0.0.1:9000,connect,suspend127.0.0.1:9000,connect,nosuspend
Cuando los diagnósticos están habilitados sin una configuración explícita, los valores predeterminados derivados son dirección 127.0.0.1, puerto 9000, DiagnosticSuspend=falsey DiagnosticListenMode=connect.
Ten en cuenta que el carácter , deberá escaparse con %2c si se pasa en la línea de comandos a dotnet build:
dotnet build -c Release -p:DiagnosticConfiguration=127.0.0.1:9000%2cconnect%2csuspend
Esto establece automáticamente la DOTNET_DiagnosticPorts variable de entorno empaquetada dentro de la aplicación. En el modo connect, el entorno de ejecución de Android se conecta al extremo TCP configurado y dotnet-dsrouter redirige esa conexión a la herramienta de diagnóstico local. El punto de conexión no está autenticado y sin cifrar, así que manténgalo en una interfaz de desarrollo local.
Al establecer esta propiedad, o cualquiera de las propiedades de componente siguientes, se habilita implícitamente el diagnóstico de Android cuando $(AndroidEnableProfiler) no se establece explícitamente en false.
DiagnosticListenMode
Un valor proporcionado por dotnet-dsrouter, como connect, el componente de modo de escucha de $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.
Cuando esta propiedad no está vacía y $(AndroidEnableProfiler) no se establece explícitamente en false, habilita implícitamente los diagnósticos de Android.
Tiene como valor predeterminado connect.
DiagnosticPort
Valor proporcionado por dotnet-dsrouter, como 9000, el componente de puerto de $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.
Cuando esta propiedad no está vacía y $(AndroidEnableProfiler) no se establece explícitamente en false, habilita implícitamente los diagnósticos de Android.
Tiene como valor predeterminado 9000.
DiagnosticSuspend
Valor booleano proporcionado por dotnet-dsrouter como true/suspend o false/nosuspend, un componente de $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.
Cuando esta propiedad no está vacía y $(AndroidEnableProfiler) no se establece explícitamente en false, habilita implícitamente los diagnósticos de Android.
Tiene como valor predeterminado false.
EmbedAssembliesIntoApk
Propiedad booleana que determina si los ensamblados de la aplicación se deben insertar o no en el paquete de aplicación.
Esta propiedad es la inversa de $(AndroidEnableFastDeployment). Los nuevos proyectos deben usar $(AndroidEnableFastDeployment) para controlar la implementación rápida. Si se establecen ambas propiedades, $(EmbedAssembliesIntoApk) tiene prioridad.
Esta propiedad debe ser True para builds de Release y False para builds de Debug.
Puede que deba ser True en las compilaciones de depuración si la implementación rápida no admite el dispositivo de destino.
Habilitar informe de errores
Propiedad booleana que establece la DOTNET_EnableCrashReport variable de entorno en 1 cuando se usa el entorno de ejecución CoreCLR o NativeAOT. Esto permite generar informes de fallo al iniciar la aplicación.
Esta propiedad es False de forma predeterminada y se omite cuando $(UseMonoRuntime) es True.
HabilitarDiagnósticos
Propiedad de Android SDK/MSBuild que habilita los diagnósticos para el entorno de ejecución seleccionado. Es un sinónimo de $(AndroidEnableProfiler) para aplicaciones Mono.
Para CoreCLR, habilita la configuración de puerto de diagnóstico usada por dotnet-trace y dotnet-gcdump.
$(EnableDiagnostics) no es lo mismo que la variable DOTNET_EnableDiagnosticsde entorno en tiempo de ejecución de CoreCLR . El primero lo evalúan los objetivos de Android SDK/MSBuild; el segundo lo lee el entorno de ejecución cuando se proporciona como variable de entorno.
De forma predeterminada, esta propiedad es False.
EnableLLVM
Propiedad booleana que determina si el compilador AOT de Mono usará o no LLVM al compilar de forma anticipada (Ahead-of-Time) los ensamblados en código nativo.
El NDK de Android debe estar instalado para compilar un proyecto que tenga esta propiedad habilitada.
De forma predeterminada, esta propiedad es False.
Esta propiedad se aplica a los proyectos admitidos .NET 10 y versiones anteriores que usan Mono y solo afecta a la compilación cuando $(RunAOTCompilation) es True.
Establecer esta propiedad en true para CoreCLR o NativeAOT la restablece a false y detiene la compilación con XA1044.
EnableMSTestRunner
Propiedad booleana que habilita el ejecutor de MSTest para proyectos de prueba de Android. Cuando se establece en true, dotnet run iniciará la aplicación a través de am instrument en lugar de am start, lo que permite que los resultados de las pruebas se notifiquen a través del protocolo de instrumentación de Android.
De forma predeterminada, esta propiedad es False.
Introducido en .NET 11.
EnableProguard
Propiedad booleana que determina si se ejecuta o no ProGuard como parte del proceso de empaquetado para vincular código Java.
De forma predeterminada, esta propiedad es False.
Si es True, los archivos de @(ProguardConfiguration) se usarán para controlar la ejecución de proguard.
EventSourceSupport
Cuando se establece en false, deshabilita la compatibilidad de EventSource de .NET con aplicaciones Android recortadas. Deshabilitar esta característica impediría que herramientas de diagnóstico de .NET como dotnet-counters funcionaran, pero con la ventaja de reducir el tamaño de la aplicación.
Establecido en false de forma predeterminada en el modo Release, a menos que $(EnableDiagnostics) o $(AndroidEnableProfiler) estén habilitados.
GenerateApplicationManifest
Habilita o deshabilita las siguientes propiedades de MSBuild que emiten valores en el archivo final AndroidManifest.xml:
El valor $(GenerateApplicationManifest) predeterminado es true.
JavaMaximumHeapSize
Especifica el valor del parámetro de java-Xmx que se usará al compilar el archivo .dex como parte del proceso de empaquetado. Si no se especifica, la opción -Xmx suministra java con un valor de 1G. Se ha detectado que esto suele ser necesario en Windows en comparación con otras plataformas.
Es necesario especificar esta propiedad si el destino _CompileDex lanza un java.lang.OutOfMemoryError.
Personalice el valor cambiando lo siguiente:
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
JavaOptions
Especifica opciones de la línea de comandos que se pasarán a Java al compilar el archivo .dex.
JarsignerTimestampAuthorityCertificateAlias
Esta propiedad permite especificar un alias en el almacén de claves para una autoridad de marca de tiempo. Para obtener más información, consulte la documentación de compatibilidad con la marca de tiempo de la firma de Java.
<PropertyGroup>
<JarsignerTimestampAuthorityCertificateAlias>Alias</JarsignerTimestampAuthorityCertificateAlias>
</PropertyGroup>
JarsignerTimestampAuthorityUrl
Esta propiedad permite especificar una dirección URL para un servicio de autoridad de marca de tiempo. Se puede usar para asegurarse de que la firma de .apk incluye una marca de tiempo.
Para obtener más información, consulte la documentación de compatibilidad con la marca de tiempo de la firma de Java.
<PropertyGroup>
<JarsignerTimestampAuthorityUrl>http://example.tsa.url</JarsignerTimestampAuthorityUrl>
</PropertyGroup>
LinkerDumpDependencies
Propiedad booleana que permite la generación del archivo de dependencias del enlazador. Este archivo se puede usar como entrada para la herramienta illinkanalyzer.
El archivo de dependencias denominado linker-dependencies.xml.gz se escribe en el directorio del proyecto. En. NET5/6 se escribe junto a los ensamblados vinculados en el directorio obj/<Configuration>/android<ABI>/linked.
El valor predeterminado es Falso.
MandroidI18n
Esta propiedad de MSBuild está obsoleta y ya no se admite.
MauiEnableFullReadyToRun
Una propiedad booleana para aplicaciones Android de .NET MAUI que usan CoreCLR y se compilan en la configuración Release con ReadyToRun habilitado.
Cuando esta propiedad no está definida o es false, MAUI utiliza ReadyToRun parcial con sus perfiles MIBC predeterminados. Establezca esta propiedad en true para habilitar readyToRun completo. Esta propiedad no tiene ningún efecto cuando $(PublishReadyToRun) es false.
Full ReadyToRun aumenta el tamaño de la aplicación y la descarga, pero puede mejorar el rendimiento en tiempo de ejecución porque se precompilan más métodos.
Para obtener más información sobre CoreCLR y ReadyToRun en .NET MAUI, consulte Runtimes and compilation in .NET MAUI .
MetricsSupport
Cuando se establece en false, deshabilita el soporte de métricas de .NET en aplicaciones Android reducidas. Deshabilitar esta característica impediría que API como System.Diagnostics.Metrics funcionaran, pero con la ventaja de reducir el tamaño de la aplicación.
Establecido en false de forma predeterminada en el modo Release, a menos que $(EnableDiagnostics) o $(AndroidEnableProfiler) estén habilitados.
MonoAndroidAssetPrefix
Especifica un prefijo de ruta de acceso que se quita del principio de los nombres de archivo con una acción de compilación de AndroidAsset. Esto permite cambiar la ubicación de los recursos.
El valor predeterminado es Assets. Cambie este valor a assets para la estructura del proyecto de Java.
MonoAndroidResourcePrefix
Especifica un prefijo de ruta de acceso que se quita del principio de los nombres de archivo con una acción de compilación de AndroidResource. Esto permite cambiar la ubicación de los recursos.
El valor predeterminado es Resources. Cambie este valor a res para la estructura del proyecto de Java.
MonoSymbolArchive
Nota:
Se trata de una propiedad heredada de MSBuild procedente de Xamarin.Android. No está disponible en .NET 6 y versiones posteriores.
Propiedad booleana que controla si los artefactos de .mSYM se crean para usarlos más adelante con mono-symbolicate, a fin de extraer información “real” de nombre de archivo y número de línea de los seguimientos de la pila de versión.
Este valor es True de forma predeterminada para aplicaciones de “Release” que tienen habilitados los símbolos de depuración: $(EmbedAssembliesIntoApk) es True,
$(DebugSymbols) es True y
$(Optimize) es Verdadero.
PublishReadyToRun
Propiedad booleana que controla si los ensamblados se compilan en formato ReadyToRun cuando se usa CoreCLR. Los ensamblados ReadyToRun contienen código nativo y MSIL. Esto puede mejorar el tiempo de inicio de la aplicación al conservar la compatibilidad con JIT, pero aumenta el tamaño de la aplicación y la descarga.
En las aplicaciones Android que usan CoreCLR, esta propiedad tiene el valor predeterminado true en la configuración Release y no está habilitada de forma predeterminada en la configuración Debug. ReadyToRun no se aplica al usar Mono o NativeAOT.
ReadyToRun requiere recorte. Si $(PublishTrimmed) no es true, .NET para Android deshabilita PublishReadyToRun y $(PublishReadyToRunComposite) y emite la advertencia XA0119.
La compilación de ReadyToRun es compuesta de forma predeterminada. Consulte $(PublishReadyToRunComposite).
.NET MAUI también utiliza ReadyToRun parcial con perfiles MIBC predeterminados. Consulte $(MauiEnableFullReadyToRun) para participar en ReadyToRun completo.
Para obtener más información, consulte Entornos de ejecución y compilación en .NET MAUI.
PublishReadyToRunComposite
Propiedad booleana que controla si la compilación ReadyToRun combina ensamblados de aplicación en una imagen compuesta. Composite ReadyToRun permite optimizaciones entre ensamblados, pero puede aumentar el tiempo de compilación.
En el caso de las aplicaciones Android que usan CoreCLR, esta propiedad tiene true como valor predeterminado cuando $(PublishReadyToRun) es true.
ReadyToRun, incluido el ReadyToRun compuesto, requiere que $(PublishTrimmed) esté true.
RunAOTCompilation
Una propiedad booleana que determina si los ensamblados se compilarán o no de forma anticipada con el compilador AOT de Mono y se incluirán en las aplicaciones que usan el entorno de ejecución Mono. Esta propiedad es False de forma predeterminada para las compilaciones de Debug y True de forma predeterminada para las compilaciones de Release que usan Mono en las plataformas de destino .NET 10 o anteriores compatibles.
Esta propiedad de MSBuild reemplaza la $(AotAssemblies) propiedad de MSBuild de Xamarin.Android. Es la misma propiedad que se usa para Blazor WASM.
Esta propiedad no habilita ReadyToRun ni NativeAOT. Configurarlo en true para CoreCLR o NativeAOT lo restablece a false y detiene la compilación con XA1044.
Establecerlo en false para CoreCLR también detiene la compilación con XA1044 en lugar de omitir silenciosamente la propiedad. A partir de .NET 11, quite $(RunAOTCompilation) y establezca $(PublishReadyToRun) en false para deshabilitar la compilación AOT ReadyToRun (R2R).
Se permite establecer $(RunAOTCompilation) en false para NativeAOT.
UseMonoRuntime
Una propiedad booleana que controla si las aplicaciones Android usan el entorno de ejecución mono en lugar de CoreCLR para destinos compatibles .NET 10 y versiones anteriores.
Establezca esta propiedad en true para usar Mono o false para usar CoreCLR en esos destinos.
$(PublishAot) tiene prioridad y selecciona NativeAOT para las compilaciones optimizadas o de publicación admitidas cuando se establece en true.
Esta propiedad tiene true como valor predeterminado en .NET 10 y versiones anteriores, por lo que las aplicaciones Android usan Mono. En .NET 11 y versiones posteriores, el valor predeterminado es false, por lo que las aplicaciones Android usan CoreCLR y se rechaza un valor explícito true con NETSDK1242.
Para obtener más información, consulte Entornos de ejecución y compilación en .NET MAUI.
WaitForExit
Propiedad booleana que controla el comportamiento de dotnet run al iniciar aplicaciones Android.
Cuando $(WaitForExit) no false es (el valor predeterminado), dotnet run hará lo siguiente:
- Inicio de la aplicación Android
- Flujo de salida de
logcatfiltrado al proceso de la aplicación - Espere a que la aplicación salga o para que el usuario presione Ctrl+C.
- Forzar la detención de la aplicación cuando se presiona Ctrl+C
Cuando $(WaitForExit) está establecido en false, dotnet run simplemente iniciará la aplicación y volverá de inmediato sin esperar a que la aplicación se cierre ni transmitir ninguna salida.
Esta propiedad también controla si adb shell am instrument se pasa -w cuando la aplicación se inicia a través de su $(AndroidInstrumentation):
$(WaitForExit) |
Iniciando un <activity/> |
Iniciando un <instrumentation/> |
|---|---|---|
true (valor predeterminado) |
adb shell am start -S -W |
adb shell am instrument -w -r |
false |
adb shell am start -S |
adb shell am instrument -r |
Dado que adb shell am instrument solo informa de los resultados una vez que se completa la instrumentación, $(WaitForExit) no debe ser false si se necesita la salida generada por la instrumentación o un código de salida significativo. Esto es importante en escenarios como la ejecución de pruebas o un host de BenchmarkDotNet, por lo que dotnet test usa siempre el valor predeterminado.
Introducido en .NET 11.