Propriétés de la construction

Les propriétés MSBuild contrôlent le comportement des cibles.

Ils sont spécifiés dans le fichier projet, par exemple MyApp.csproj, dans un groupe de propriétés MSBuild.

Remarque

Dans .NET pour Android, il n’existe techniquement aucune distinction entre une application et un projet de liaisons. Les propriétés fonctionnent donc dans les deux. Dans la pratique, il est vivement recommandé de créer des projets d’application et de liaisons distincts. Les propriétés qui sont principalement utilisées dans les projets de liaisons sont documentées dans le guide de référence des propriétés de projet des liaisons MSBuild.

Étendue du runtime

Les applications Android ordinaires ciblent CoreCLR dans .NET 11 et versions ultérieures. Les applications Android ciblant .NET 10 et versions antérieures utilisent Mono par défaut. Définir $(PublishAot) sur true sélectionne le runtime NativeAOT pour les publications prises en charge ou les builds optimisés, et a priorité sur $(UseMonoRuntime).

$(UseMonoRuntime)=truen’est pas une solution de contournement pour .NET 11. Le SDK .NET 11 le rejette avec NETSDK1242. Utilisez les instructions mono .NET 10 et versions antérieures uniquement lors du ciblage d’une infrastructure dans laquelle Mono est pris en charge.

Les applications Android .NET 11 requièrent le niveau d’API Android 24 ou supérieur. $(SupportedOSPlatformVersion) définit le minimum de déploiement de l’application et est mappé //uses-sdk/@android:minSdkVersion dans le manifeste Android. Il ne sélectionne pas le Kit de développement logiciel (SDK) cible ou ne représente pas la stratégie Google Play.

Les packs d’exécution .NET 11 CoreCLR prennent en charge les identificateurs d’exécution .NET suivants et les interfaces binaires d’application Android correspondantes :

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

Android NativeAOT est expérimental et prend en charge les trois mêmes RID. Les RID sont distincts des noms Android ABI et des architectures d’image système de l’émulateur.

AdbTarget

La $(AdbTarget) propriété spécifie l’appareil cible Android sur lequel le package Android peut être installé ou supprimé. La valeur de cette propriété est identique à l’option adbAppareil cible.

AfterGenerateAndroidManifest

Les cibles MSBuild répertoriées dans cette propriété s’exécutent directement après la cible interne _GenerateJavaStubs , qui est l’emplacement où le AndroidManifest.xml fichier est généré dans le $(IntermediateOutputPath). Si vous souhaitez apporter des modifications au fichier généré AndroidManifest.xml , vous pouvez le faire à l’aide de ce point d’extension.

AndroidAapt2CompileExtraArgs

Spécifie les options de ligne de commande à passer à la commande aapt2 compile lors du traitement des éléments et des ressources Android.

AndroidAapt2LinkExtraArgs

Spécifie les options de ligne de commande à passer à la commande aapt2 link lors du traitement des actifs et ressources Android.

AndroidAddKeepAlives

Propriété booléenne qui détermine si le linker insère des invocations GC.KeepAlive() dans les projets de liaison pour empêcher la collecte prématurée d’objets.

La valeur par défaut est True pour les builds de configuration Release.

Pour les builds non tronqués utilisant le mappage de types trimmable, les appels à GC.KeepAlive() ne sont insérés que lorsque $(AndroidEnableLegacyCompatibilityAssemblyFixups) est également True. Les compilations élaguées utilisant la table de types trimmable n’insèrent pas ces appels.

AndroidAotAdditionalArguments

Propriété de type chaîne qui permet aux projets .NET 10 ou antérieurs pris en charge et utilisant Mono de transmettre des options supplémentaires séparées par des virgules dans l’argument --aot=... du compilateur AOT de Mono. La propriété est utilisée uniquement lorsque la compilation Mono AOT est activée.

En règle générale, cette propriété doit être laissée vide, mais dans certains scénarios spéciaux, elle peut fournir une flexibilité utile.

La $(AndroidAotAdditionalArguments) propriété est différente de la propriété associée $(AndroidExtraAotOptions) ; $(AndroidAotAdditionalArguments) elle est incluse dans l’option --aot , tandis que $(AndroidExtraAotOptions) passe des arguments autonomes directement au processus du compilateur Mono AOT.

AndroidAotCustomProfilePath

Le fichier que aprofutil doit créer pour contenir les données du profileur AOT Mono. La valeur par défaut est custom.aprof.

Cette propriété s’applique aux cibles de profilage AOT héritées pour les projets .NET 10 et versions antérieures pris en charge qui utilisent Mono.

AndroidAotProfilerPort

Le port auquel aprofutil doit se connecter pour l’obtention des données de profilage Mono AOT. La valeur par défaut est 9999.

Cette propriété s’applique aux cibles de profilage AOT héritées pour les projets .NET 10 et versions antérieures pris en charge qui utilisent Mono.

AndroidAotEnableLazyLoad

Permet le chargement à la demande (différé) des assemblies compilés en AOT avec Mono au lieu de les précharger au démarrage.

Cette propriété s’applique aux projets .NET 10 et versions antérieures pris en charge qui utilisent Mono. La valeur par défaut est True lorsque Mono AOT est activé et que les symboles de débogage ne sont pas inclus. Il ne configure pas CoreCLR ou NativeAOT.

Introduit dans .NET 6.

AndroidApkDigestAlgorithm

Valeur de chaîne qui spécifie l’algorithme digest à utiliser avec jarsigner -digestalg.

La valeur par défaut est SHA-256.

AndroidApkSignerAdditionalArguments

Propriété de chaîne qui permet au développeur de fournir des arguments à l’outil apksigner .

AndroidApkSigningAlgorithm

Valeur de chaîne qui spécifie l’algorithme de signature à utiliser avec jarsigner -sigalg.

La valeur par défaut est SHA256withRSA.

AndroidApplication

Valeur booléenne qui indique si le projet est destiné à une application Android (True) ou pour un projet de bibliothèque Android (False ou non présent).

Un seul projet avec <AndroidApplication>True</AndroidApplication> peut être présent dans un package Android. (Malheureusement, cette exigence n’est pas vérifiée, ce qui peut entraîner des erreurs subtiles et bizarres concernant les ressources Android.)

AndroidApplicationJavaClass

Nom complet de la classe Java à utiliser à la place de android.app.Application lorsqu'une classe hérite de Android.App.Application.

La $(AndroidApplicationJavaClass) propriété est généralement définie par d’autres propriétés, telles que la $(AndroidEnableMultiDex) propriété MSBuild.

AndroidAvoidEmitForPerformance

Propriété booléenne qui détermine si elle est « évitée » ou non System.Reflection.Emit pour améliorer les performances de démarrage. Cette propriété est définie par défaut sur True.

L’utilisation de System.Reflection.Emit a un impact notable sur les performances de démarrage sur Android. Ce comportement est désactivé par défaut pour les commutateurs de fonctionnalités suivants :

  • Switch.System.Reflection.ForceInterpretedInvoke: après le deuxième appel vers MethodInfo.Invoke() ou ConstructorInfo.Invoke(), le code est émis pour améliorer les performances des appels répétés.

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: après le deuxième appel pour récupérer un service à partir d’un conteneur d’injection de dépendances, le code est émis pour améliorer les performances des appels répétés.

Il est souhaitable dans la plupart des applications Android de désactiver ce comportement.

Consultez la documentation des commutateurs de fonctionnalités des bibliothèques de classes de base pour plus d’informations sur les commutateurs de fonctionnalités disponibles.

Ajouté dans .NET 8.

AndroidBinUtilsPath

Chemin d’accès à un répertoire contenant les binutils Android, tels que le ld éditeur de liens natif et le as assembleur natif. Ces outils sont inclus dans la charge de travail .NET pour Android.

La valeur par défaut est $(MonoAndroidBinDirectory)\binutils\bin\.

AndroidBoundExceptionType

Une valeur de chaîne qui spécifie comment les exceptions doivent être propagées lorsqu'un type .NET pour Android implémente un type ou une interface .NET en termes de types Java, par exemple Android.Runtime.InputStreamInvoker et System.IO.Stream, ou Android.Runtime.JavaDictionary et System.Collections.IDictionary.

  • Java: le type d’exception Java d’origine est propagé tel qu’il est.

    Java signifie que, par exemple, InputStreamInvoker n’implémente pas correctement l’API System.IO.Stream, car Java.IO.IOException peut être levée à partir de Stream.Read() au lieu de System.IO.IOException.

  • System: le type d’exception Java d’origine est intercepté et encapsulé dans un type d’exception .NET approprié.

    System signifie que, par exemple, InputStreamInvoker implémente correctement System.IO.Stream, et Stream.Read() ne lancera pas d’instances . (Il peut à la place lever un System.IO.IOException contenant un Java.IO.IOException comme valeur de Exception.InnerException.)

    System est la valeur par défaut.

InterfacesReliéesÀAndroidContiennentDesConstantes

Propriété booléenne qui détermine si les constantes de liaison sur les interfaces seront prises en charge, ou la solution de contournement de la création d’une IMyInterfaceConsts classe sera utilisée.

La valeur par défaut est True.

InterfacesAndroidLiéesContiennentDesMéthodesD'InterfaceStatiqueEtParDéfaut

Propriété booléenne indiquant si les membres par défaut et statiques sur les interfaces seront pris en charge, ou s'il sera nécessaire d'utiliser l'ancienne solution de contournement consistant à créer une classe associée contenant des membres statiques comme abstract class MyInterface.

La valeur par défaut est True dans .NET 6 et False pour l’héritage.

InterfacesLiéesAndroidContiennentTypes

Propriété booléenne qui indique si les types imbriqués dans les interfaces sont pris en charge ou la solution de contournement de la création d’un type non imbriqué comme IMyInterfaceMyNestedClass.

La valeur par défaut est True dans .NET 6 et False pour l’héritage.

AndroidBuildApplicationPackage

Valeur booléenne qui indique s’il faut créer et signer le package (.apk). La configuration de cette valeur sur True équivaut à l'utilisation de la SignAndroidPackage cible de compilation.

Cette propriété est définie par défaut sur False.

AndroidBundleConfigurationFile

Spécifie un nom de fichier à utiliser comme fichier de configuration pour bundletool la création d’un bundle d’applications Android. Ce fichier contrôle certains aspects de la façon dont les APKs sont générés à partir du bundle, telles que les dimensions selon lesquelles le bundle est fractionné pour produire des APKs. .NET pour Android configure automatiquement certains de ces paramètres, y compris la liste des extensions de fichier à laisser non compressées.

Cette propriété n’est pertinente que si $(AndroidPackageFormat) est définie sur aab.

AndroidBundleToolExtraArgs

Spécifie les options de ligne de commande à passer à la commande bundletool lors de la construction de paquets d'applications.

AndroidClassParser

Propriété de chaîne qui contrôle la façon dont .jar les fichiers sont analysés. Valeurs possibles :

  • class-parse : utilise class-parse.exe pour analyser le bytecode Java directement, sans l’aide d’une machine virtuelle Java.

  • jar2xml : cette valeur est obsolète et n’est plus prise en charge.

AndroidCodegenTarget

Propriété de chaîne qui contrôle l’ABI cible de génération de code. Valeurs possibles :

  • XamarinAndroid : cette valeur est obsolète et n’est plus prise en charge.

  • XAJavaInterop1 : utilise Java.Interop pour les appels JNI. La liaison des assemblys avec XAJavaInterop1 peut être construite et s’exécuter uniquement avec Xamarin.Android 6.1 ou ultérieur. Xamarin.Android 6.1 et ultérieur effectue la liaison de Mono.Android.dll avec cette valeur.

  • JavaInterop1 : valeur expérimentale, actuellement la valeur par défaut pour le runtime NativeAOT.

La valeur par défaut est XAJavaInterop1.

AndroidCreatePackagePerAbi

Propriété booléenne qui détermine s’il faut en créer une .apk par ABI Android sélectionné (par exemple arm64-v8a) au lieu d’une seule .apk prise en charge de toutes les API sélectionnées. Les RID dans $(RuntimeIdentifiers) sélectionnent ces ABI ; les APK sont produits pour chaque ABI, et non pour chaque RID.

Consultez également le guide de création d'APKs spécifiques à l'ABI.

AndroidCreateProguardMappingFile

Propriété booléenne qui contrôle si un fichier de mappage proguard est généré dans le cadre du processus de génération.

L’ajout des éléments suivants à votre csproj entraîne la génération du fichier et utilise la AndroidProguardMappingFile propriété pour contrôler l’emplacement du fichier de mappage final.

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

Lors de la production .aab de fichiers, le fichier de mappage est automatiquement inclus dans votre package. Il n’est pas nécessaire de le charger manuellement dans le Google Play Store. Lorsque vous utilisez les fichiers .apk, vous devrez les charger manuellement.

La valeur par défaut est True lors de l’utilisation $(AndroidLinkTool)de =r8.

AndroidDebugKeyAlgorithm

Spécifie l’algorithme par défaut à utiliser pour le debug.keystore. La valeur par défaut est RSA.

AndroidDebugKeyValidity

Spécifie la validité par défaut à utiliser pour le debug.keystore. La valeur par défaut est 10950 ou 30 * 36530 years .

AndroidDebugStoreType

Spécifie le format du fichier de magasin de clés à utiliser pour le debug.keystore. Sa valeur par défaut est pkcs12.

AndroidDeviceUserId

Permet de déployer et de déboguer l’application sous des comptes invités ou professionnels. La valeur est la uid valeur que vous obtenez à partir de la commande adb suivante :

adb shell pm list users

La commande ci-dessus retourne les données suivantes :

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

uid est la première valeur entière. Dans la sortie ci-dessus, ils sont 0 et 10.

AndroidDexTool

Propriété enum-style avec une valeur valide de d8. Auparavant, une valeur dx était prise en charge dans Xamarin.Android.

Indique le compilateur dex Android utilisé pendant le processus de génération .NET pour Android. La valeur par défaut est d8. Consultez notre documentation sur D8 et R8.

AndroidEnableDesugar

Propriété booléenne qui détermine si desugar est activé. Android ne prend actuellement pas en charge toutes les fonctionnalités Java 8, et la chaîne d’outils par défaut implémente les nouvelles fonctionnalités de langage en effectuant des transformations bytecode appelées desugar, sur la sortie du javac compilateur. La valeur par défaut est False si vous utilisez $(AndroidDexTool)=dx et True si vous utilisez $(AndroidDexTool)=d8.

AndroidEnableFastDeployment

Propriété booléenne qui détermine si le déploiement rapide est activé. Le déploiement rapide installe des assemblys en dehors du package d’application, ce qui peut réduire les temps de déploiement et de reconstruction.

La valeur par défaut est True pour les builds Debug et False pour les builds Release. La définition de cette propriété équivaut à définir la valeur inverse de $(EmbedAssembliesIntoApk). Si les deux propriétés sont définies, $(EmbedAssembliesIntoApk) est prioritaire.

AndroidEnableGooglePlayStoreChecks (Activer les vérifications du Google Play Store)

Propriété bool qui permet aux développeurs de désactiver les vérifications de Google Play Store suivantes : XA1004, XA1005 et XA1006. La désactivation de ces vérifications est utile pour les développeurs qui ne ciblent pas google Play Store et ne souhaitent pas exécuter ces vérifications.

AndroidEnableLegacyCompatibilityAssemblyFixups

Propriété booléenne qui détermine si les compilations non élaguées modifient les assemblies référencés pour prendre en charge la liaison héritée et le comportement du concepteur de ressources. Ces modifications incluent l’ajout de méthodes d’interface abstraite manquantes, la mise à jour des références héritées au concepteur de ressources et l’insertion d’appels à GC.KeepAlive() dans d’anciens assemblys de liaison Xamarin.Android. Les versions tronquées utilisant le mappage de types trimmable n’exécutent pas ces correctifs de compatibilité, et définir cette propriété sur True ne les active pas pour les versions tronquées.

La valeur par défaut est False lorsque trimmable est $(AndroidTypeMapImplementation), et True sinon.

« AndroidEnableMarshalMethods »

Propriété bool qui détermine si les méthodes de marshaling LLVM sont activées ou non. Les méthodes de sérialisation LLVM sont une optimisation de démarrage d’application qui utilise des points d’entrée natifs pour l’enregistrement des méthodes Java native.

Cette propriété a la valeur par défaut False.

Cette propriété ne peut pas être définie sur true lorsque $(PublishReadyToRun) est true. Définir les deux propriétés sur true interrompt la génération avec XA1049.

Ajouté dans .NET 8.

AndroidEnableMultiDex

Propriété booléenne qui détermine si la prise en charge multi-dex sera utilisée dans la version finale .apk.

Cette propriété est définie par défaut sur False.

AndroidEnableProfiler

Pour les applications Mono, il s’agit d’un synonyme de la $(EnableDiagnostics) propriété. Si c’est true, le composant diagnostique Mono, libmono-component-diagnostics_tracing.so, est inclus dans l’application.

Pour les applications CoreCLR dans .NET 11 et versions ultérieures, cette propriété active la configuration de port de diagnostic CoreCLR utilisée par des outils tels que dotnet-trace et dotnet-gcdump; il n’ajoute pas de composant de diagnostic Mono. NativeAOT est un runtime distinct sélectionné par $(PublishAot) et cette propriété documente uniquement le comportement de configuration et d’empaquetage Android pris en charge.

Cette propriété est définie par défaut sur False.

ActiverAndroidHéritageRemplacementObsolète

Propriété booléenne qui détermine si les méthodes liées héritent [Obsolete] automatiquement des attributs des méthodes qu’elles remplacent.

La prise en charge de cette propriété a été ajoutée dans .NET 8.

Cette propriété est définie par défaut sur True.

AndroidEnablePreloadAssemblies

Propriété booléenne qui contrôle si tous les assemblys managés regroupés dans le package d’application sont chargés pendant le démarrage du processus ou non.

Avec la valeur True, tous les assemblys fournis dans le package d’application seront chargés lors du démarrage du processus, avant l’appel de tout code d’application.

Avec la valeur False, les assemblages seront uniquement chargés lorsque cela est nécessaire. Le chargement d’assemblys en fonction des besoins permet aux applications de lancer plus rapidement et est également plus cohérent avec la sémantique .NET de bureau. Pour visualiser le gain de temps obtenu, définissez la propriété système debug.mono.log pour inclure timing, puis recherchez le message Finished loading assemblies: preloaded dans adb logcat.

Les applications ou bibliothèques, utilisant l'injection de dépendances pourraient avoir besoin que cette propriété soit si elle à son tour nécessite que True retourne tous les assemblages au sein du paquet d'applications, même si l'assemblage n'aurait pas été nécessaire.

Par défaut, cette valeur est False.

AndroidEnableProfiledAot

Propriété booléenne qui détermine si les profils Mono AOT sont utilisés ou non pendant la compilation à l’avance. Il s’applique aux projets .NET 10 et versions antérieures pris en charge qui utilisent Mono et ne configure pas ReadyToRun, les profils MIBC, les PGO dynamiques ou NativeAOT.

Les profils sont répertoriés dans @(AndroidAotProfile) groupe d’éléments. Lorsque l’AOT profilé est activé, le profil par défaut est inclus, sauf si $(AndroidUseDefaultAotProfile) est false. Les profils personnalisés peuvent être ajoutés avec @(AndroidAotProfile).

Quand $(RunAOTCompilation) est true et cette propriété n’est pas définie, elle a la valeur par défaut true. Par conséquent, la valeur par défaut est true pour les builds de version Release applicables utilisant Mono.

AndroidEnableRestrictToAttributes

Propriété de type énumération avec des valeurs valides de obsolete et disable.

Lorsqu’il est défini sur obsolete, les types et les membres marqués avec l’annotation Java androidx.annotation.RestrictToou qui se trouvent dans des packages Java non exportés seront marqués avec un attribut [Obsolete] dans la liaison C#.

Cet [Obsolete] attribut a un message descriptif expliquant que le propriétaire du package Java considère que l’API est « interne » et avertit de son utilisation.

Cet attribut a également un code XAOBS001 d’avertissement personnalisé afin qu’il puisse être supprimé indépendamment de l’API obsolète « normale ».

Lorsque la valeur est définie disable, l’API est générée normalement sans attributs supplémentaires. (Il s’agit du même comportement que avant .NET 8.)

L’ajout d’attributs [Obsolete] au lieu de supprimer automatiquement l’API a été effectué pour préserver la compatibilité des API avec les packages existants. Si vous préférez plutôt supprimer des membres qui ont l’annotation @RestrictTo ou qui se trouvent dans des packages Java non exportés, vous pouvez utiliser les fichiers Transform en plus de cette propriété pour empêcher ces types d’être liés :

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

La prise en charge de cette propriété a été ajoutée dans .NET 8.

Cette propriété est définie obsolete par défaut.

AndroidEnableSGenConcurrent

Propriété booléenne qui détermine si le collecteur de GC simultané de Mono sera utilisé ou non.

Cette propriété est définie par défaut sur True. Il s’applique aux projets .NET 10 et versions antérieures pris en charge qui utilisent Mono et ne configure pas les garbage collectors CoreCLR ou NativeAOT.

AndroidErrorOnCustomJavaObject

Propriété booléenne qui détermine si les types peuvent implémenter sans hériter également de ou :

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

    public void Dispose()
    {
    }
}

Lorsque la valeur est True, ces types génèrent une erreur XA4212, sinon un avertissement XA4212 est généré.

Cette propriété est définie par défaut sur True.

AndroidExplicitCrunch

Cette propriété n’est plus prise en charge.

AndroidExtraAotOptions

Propriété de chaîne qui autorise les projets .NET 10 et versions antérieures pris en charge qui utilisent Mono pour passer des arguments autonomes séparés par des points-virgules directement au processus du compilateur Mono AOT. La propriété est utilisée uniquement lorsque la compilation Mono AOT est activée.

En règle générale, cette propriété doit être laissée vide, mais dans certains scénarios spéciaux, elle peut fournir une flexibilité utile.

La $(AndroidExtraAotOptions) propriété est différente de la propriété associée $(AndroidAotAdditionalArguments) ; $(AndroidExtraAotOptions) transmet les arguments de processus autonomes, tandis qu’elle $(AndroidAotAdditionalArguments) est incluse dans l’option séparée par des virgules --aot=... .

AndroidFastDeploymentType

Cette propriété a été supprimée dans .NET 9 et n’a aucun effet.

AndroidFragmentType

Spécifie le type entièrement qualifié par défaut à utiliser pour les éléments de mise en page <fragment> lors de la génération du code des liaisons de mise en page. La valeur par défaut est le type Android Android.App.Fragment standard.

AndroidGenerateJniMarshalMethods

Cette fonctionnalité expérimentale a été supprimée dans .NET 11. La définition de la propriété n’a aucun effet.

AndroidGenerateJniMarshalMethodsAdditionalArguments

Cette fonctionnalité expérimentale a été supprimée dans .NET 11. La définition de la propriété n’a aucun effet.

AndroidGenerateLayoutBindings

Active la génération de code-behind de mise en page si elle est définie sur ou désactive la génération de code-behind de mise en page si elle est définie sur true.

La valeur par défaut est false.

AndroidGenerateResourceDesigner

La valeur par défaut est true. Lorsqu'il est défini sur false, cela désactive la génération de Resource.designer.cs.

AndroidHttpClientHandlerType

Remarque

Cette propriété n’est pas prise en charge dans .NET 11. Supprimez-le de votre fichier projet et utilisez-le UseNativeHttpHandler à la place.

AndroidIgnoreAllJniPreload

Valeur booléenne qui, si elle est définie sur true, exempte toutes les bibliothèques JNI natives d'être préchargées au démarrage de l'application. Par défaut, toutes ces bibliothèques seront chargées par le runtime au début du démarrage de l’application afin de garantir leur initialisation appropriée. Toutefois, dans certains cas, il peut ne pas s’agir du comportement souhaité et cette propriété vous permet de le désactiver efficacement.

Certaines bibliothèques d’infrastructure qui doivent être chargées au démarrage de l’application ne seront pas affectées par cette propriété.

Voir aussi @(AndroidNativeLibraryNoJniPreload) pour obtenir un moyen plus précis d’exempter les bibliothèques du mécanisme de préchargement.

AndroidIncludeWrapSh

Valeur booléenne qui indique si le script wrapper Android (wrap.sh) doit être empaqueté dans l’APK. La valeur par défaut est false que le script wrapper peut influencer considérablement la façon dont l’application démarre et fonctionne et que le script doit être inclus uniquement si nécessaire, par exemple lors du débogage ou de la modification du comportement de démarrage/exécution de l’application.

Le script est ajouté au projet à l’aide du @(AndroidNativeLibrary) commande de construction, parce qu'elle est placée dans le même répertoire que les bibliothèques natives spécifiques à l'architecture et doit être nommée wrap.sh.

Le moyen le plus simple de spécifier le chemin d’accès au wrap.sh script consiste à le placer dans un répertoire nommé après l’architecture cible. Cette approche fonctionne si vous n’avez qu’une wrap.sh seule architecture :

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

Toutefois, si votre projet a besoin de plus d’un wrap.sh par architecture, à des fins différentes, cette approche ne fonctionnera pas. Au lieu de cela, dans ce cas, le nom peut être spécifié à l’aide des Link métadonnées du AndroidNativeLibrary:

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

Si les Link métadonnées sont utilisées, le chemin spécifié dans sa valeur doit être un chemin de bibliothèque spécifique à l’architecture native valide, par rapport au répertoire racine APK. Le format du chemin d’accès est lib\ARCH\wrap.sh, où ARCH peut être l’un des suivants :

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

AndroidIncludeAssetPacksInPackage

Cette propriété contrôle si la construction des packs de ressources est automatiquement incluse dans le fichier final .aab. La valeur par défaut sera true.

Dans certains cas, l’utilisateur peut vouloir libérer une version intermédiaire. Dans ces cas, l’utilisateur n’a pas besoin de mettre à jour le pack d’éléments multimédias. En particulier si le contenu du pack d’assets n’a pas changé. Cette propriété permet à l’utilisateur d’ignorer les packs d’éléments multimédias s’ils ne sont pas requis.

Ajouté dans .NET 9

AndroidInstallJavaDependencies

La valeur par défaut est true pour les builds de ligne de commande. Quand la valeur est définie true, active l’installation du Kit de développement logiciel (SDK) Java lors de l’exécution de la <InstallAndroidDependencies/> cible.

La prise en charge de cette propriété a été ajoutée dans .NET 9.

AndroidInstrumentation

Propriété de type chaîne qui spécifie le nom de la classe d’exécution de l’instrumentation Android à utiliser lors du lancement de l’application via dotnet run.

Lorsque cette propriété n’est pas définie, dotnet run résout ce qu’il faut lancer à partir de la sortie générée AndroidManifest.xml dans la sortie intermédiaire :

  • Si $(AndroidUseInstrumentation) est true, le premier élément <instrumentation/> est utilisé.
  • Sinon, l’élément <activity/> pouvant être lancé est privilégié, et le premier élément <instrumentation/> est utilisé lorsque l’application ne déclare aucune activité de lancement. Cela permet de dotnet run une application dont le seul point d’entrée est une sous-classe de Android.App.Instrumentation, comme un hôte BenchmarkDotNet.

Si l’application ne déclare ni l’un ni l’autre, la build échoue avec XA1043. Si $(AndroidUseInstrumentation) est true mais que l’application ne déclare aucun <instrumentation/>, la compilation échoue avec XA1048.

Lorsqu’une instrumentation est lancée, dotnet run s’exécute adb shell am instrument -w -r et quitte avec un code de sortie non nul si l’instrumentation se bloque ou appelle Instrumentation.Finish() avec Result.Canceled. Définir $(WaitForExit) sur false supprime -w, de sorte que dotnet run se termine dès que l’instrumentation démarre et qu’aucun résultat n’est signalé.

Tous les arguments situés après -- sont transmis à l’instrumentation en tant qu’extras am instrument. Les arguments du formulaire KEY=VALUE deviennent -e KEY VALUE, et tous les arguments restants sont joints en un seul -e args "..." extra :

dotnet run -- --filter *MyBenchmark*

est livré à Instrumentation.OnCreate(Bundle?) en tant que arguments.GetString("args").

Introduit dans .NET 11.

AndroidJavadocVerbosity

Spécifie à quel point les commentaires de documentation XML C# doivent être verbeux lors de l'importation de la documentation Javadoc dans des projets de liaison.

Nécessite l’utilisation du @(JavaSourceJar) action de compilation.

La $(AndroidJavadocVerbosity) propriété est enum-like, avec des valeurs possibles de full ou intellisense:

La valeur par défaut est intellisense.

AndroidKeyStore

Valeur booléenne qui indique si les informations de signature personnalisées doivent être utilisées. La valeur par défaut est False, qui signifie que la clé de signature de débogage par défaut est utilisée pour signer les packages.

AndroidLaunchActivity

Activité Android à lancer.

AndroidLinkMode

Spécifie le type de liaison à effectuer sur les assemblys contenus dans le package Android. Utilisé seulement dans les projets d’application Android. La valeur par défaut est SdkOnly. Les valeurs valides sont :

  • None : aucune liaison n’est tentée.

  • SdkOnly : la liaison est effectuée seulement sur les bibliothèques de classes de base, pas sur les assemblys de l’utilisateur.

  • Full : la liaison est effectuée sur les bibliothèques de classes de base et les assemblages de l’utilisateur.

    Remarque

    L'utilisation d'une valeur AndroidLinkMode pour Complet aboutit souvent à des dysfonctionnements d'applications, notamment lorsque la réflexion est utilisée. À éviter, sauf si vous savez vraiment ce que vous faites.

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

Quand true, le système de build relie les types imbriqués de la classe Resource.Designer.cs Resource dans toutes les assemblies. Le code IL qui utilise ces types sera mis à jour pour utiliser les valeurs directement plutôt que d’accéder aux champs.

Liaisonner les types imbriqués peut réduire légèrement la taille de l'apk et améliorer les performances de démarrage. Seules les builds « Release » sont liées.

Experimental. Conçu uniquement pour fonctionner avec du code tel que

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

Tous les autres scénarios (tels que la réflexion) ne seront pas pris en charge.

AndroidLinkSkip

Spécifie une liste délimitée par des points-virgules (;) de noms d’assemblys, sans extensions de fichier, d’assemblys qui ne doivent pas être liés. Utilisé seulement dans les projets d’application Android.

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

Propriété de type énumération avec des valeurs valides de proguard ou r8. Indique le réducteur de code utilisé pour le code Java. La valeur par défaut est une chaîne vide, ou proguard si c’est le cas $(AndroidEnableProguard)True. Consultez notre documentation sur D8 et R8.

AndroidLintEnabled

Propriété bool qui permet au développeur d’exécuter l’outil Android lint dans le cadre du processus d’empaquetage.

Quand $(AndroidLintEnabled)=True, les propriétés suivantes sont utilisées :

Les actions de génération suivantes peuvent également être utilisées :

Consultez l’aide de Lint pour plus d’informations sur l’outil lint android.

Problèmes activés d'AndroidLint

Propriété de chaîne qui est une liste séparée par des virgules de problèmes de lint à activer.

Utilisé uniquement lorsque $(AndroidLintEnabled)=True.

ProblèmesDésactivésAndroidLint

Propriété de type chaîne qui est une liste de problèmes de lint séparée par des virgules à désactiver.

Utilisé uniquement lorsque $(AndroidLintEnabled)=True.

AndroidLintCheckIssues

Propriété de chaîne qui est une liste séparée par des virgules de problèmes de lint à vérifier.

Utilisé uniquement lorsque $(AndroidLintEnabled)=True.

Remarque : Seuls ces problèmes sont vérifiés.

AndroidManagedSymbols

Propriété booléenne qui contrôle si les points de séquence sont générés afin que les informations de nom de fichier et de numéro de ligne puissent être extraites des traces de pile Release.

AndroidManifest

Spécifie un nom de fichier à utiliser comme modèle pour l’application AndroidManifest.xml. Lors de la génération, toutes les autres valeurs nécessaires y sont fusionnées pour produire le fichier AndroidManifest.xml effectif. $(AndroidManifest) doit contenir le nom du package dans l’attribut /manifest/@package.

AndroidManifestMerger

Spécifie l’implémentation de la fusion de fichiers AndroidManifest.xml . Il s’agit d’une propriété enum-style où legacy sélectionne l’implémentation C# d’origine et manifestmerger.jar sélectionne l’implémentation Java de Google.

La valeur par défaut est actuellement manifestmerger.jar. Si vous souhaitez utiliser l’ancienne version, ajoutez ce qui suit à votre csproj

<AndroidManifestMerger>legacy</AndroidManifestMerger>

La fusion de Google permet la prise en charge de xmlns:tools="http://schemas.android.com/tools", comme décrit dans la documentation Android.

AndroidManifestMergerExtraArgs

Propriété de chaîne pour fournir des arguments à l’outil de documentation Android.

Si vous souhaitez obtenir une sortie détaillée de l’outil, vous pouvez ajouter ce qui suit au .csprojfichier .

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

Propriété de type énumération avec des valeurs valides de Xamarin ou GoogleV2. Cela détermine quel référentiel est utilisé par le InstallAndroidDependencies objectif pour déterminer quels paquets et versions de paquets Android sont disponibles et peuvent être installés.

Xamarin est la liste approuvée (recommandée) dans le Gestionnaire de kits de développement logiciel Visual Studio (SDK).

GoogleV2 est le référentiel Liste complète (non pris en charge) dans le Gestionnaire du Kit de développement logiciel (SDK) Visual Studio.

Si $(AndroidManifestType) n'est pas défini, alors Xamarin est utilisé.

AndroidManifestSource

Propriété de chaîne qui spécifie un URI absolu ou un chemin d’accès de fichier local existant pour le manifeste du référentiel utilisé par le InstallAndroidDependencies cible. Lorsque cette propriété n’est pas définie, le manifeste de référentiel par défaut sélectionné par $(AndroidManifestType) est utilisé.

Par exemple :

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

AndroidManifestPlaceholders

Liste séparée par des points-virgules de paires de remplacement clé-valeur pour AndroidManifest.xml, où chaque paire a le format key=value.

Par exemple, une valeur de propriété de assemblyName=$(AssemblyName) définit un ${assemblyName} espace réservé qui peut ensuite apparaître dans AndroidManifest.xml :

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

Cela permet d’insérer des variables à partir du processus de génération dans le fichier AndroidManifest.xml .

AndroidMultiDexClassListExtraArgs

Propriété de chaîne qui permet aux développeurs de passer des arguments à com.android.multidex.MainDexListBuilder lors de la génération du fichier multidex.keep.

Un cas spécifique est si vous obtenez l’erreur suivante durant la compilation dx.

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

Si vous obtenez cette erreur, vous pouvez ajouter les éléments suivants au .csprojfichier .

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

qui permettra à l’étape dx de réussir.

AndroidNdkDirectory

La $(AndroidNdkDirectory) propriété spécifie un répertoire d’installation Android NDK personnalisé. Le chemin d’accès peut être défini dans le fichier projet ou sur la ligne de commande :

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

Si cette propriété n’est pas définie, .NET pour Android localise le NDK à partir de l’environnement de développement Android configuré.

Format de package Android

Propriété de type énumération avec des valeurs valides de apk ou aab. Indique si vous souhaitez empaqueter l’application Android en tant que fichier APK ou Android App Bundle. Les bundles d’applications sont un nouveau format pour les builds Release destinées à être envoyées à Google Play. La valeur par défaut est apk.

Lorsque $(AndroidPackageFormat) est défini sur aab, d’autres propriétés MSBuild sont définies. Celles-ci sont nécessaires pour les bundles d’applications Android :

Cette propriété sera déconseillée pour .net 6. Les utilisateurs doivent passer au plus récent AndroidPackageFormats.

AndroidPackageFormats

Propriété délimitée par des points-virgules avec des valeurs valides de apk et aab. Indique si vous souhaitez empaqueter l’application Android en tant que fichier APK ou Android App Bundle. Les bundles d’applications sont un nouveau format pour les builds Release destinées à être envoyées à Google Play.

Lors de la génération d’une version Release, vous pouvez générer à la fois un aab et un apk pour distribution dans divers magasins.

Définir AndroidPackageFormats à aab;apk entraînera la génération des deux. Définir AndroidPackageFormats sur aab ou apk générera un seul fichier.

La valeur par défaut est aab;apk pour les builds Release uniquement. L’utilisation apk pour le débogage est plus rapide, mais aab est également prise en charge avec un déploiement rapide si nécessaire (par exemple, lors du test des packs de ressources).

PolitiqueDeNommageDePaquetAndroid

Propriété enum-style permettant de spécifier les noms de package Java du code source Java généré.

La seule valeur possible est LowercaseCrc64.

AndroidPrepareForBuildDependsOn

Propriété délimitée par des points-virgules qui peut être utilisée pour étendre le processus de génération Android. Les cibles MSBuild ajoutées à cette propriété s’exécutent tôt dans la build pour les types de projet Application et Bibliothèque. Cette propriété est vide par défaut.

Exemple :

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

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

AndroidProguardMappingFile

Spécifie la règle proguard -printmapping pour r8. Cela signifie que le mapping.txt fichier sera généré dans le $(OutputPath) dossier. Ce fichier peut ensuite être utilisé lors du chargement de packages dans le Google Play Store.

Par défaut, ce fichier est généré automatiquement lors de l’utilisation AndroidLinkTool=r8 et génère le fichier $(OutputPath)mapping.txtsuivant.

Si vous ne souhaitez pas générer ce fichier de mappage, vous pouvez utiliser la propriété AndroidCreateProguardMappingFile pour arrêter sa création. Ajoutez ce qui suit dans votre projet

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

ou utiliser -p:AndroidCreateProguardMappingFile=False sur la ligne de commande.

AndroidD8IgnorerLesAvertissements

Spécifie --map-diagnostics warning info à passer à d8. La valeur par défaut est True, mais peut être définie en False pour un comportement plus strict. Pour plus d’informations, consultez le code source D8 et R8.

Ajouté dans .NET 8.

AndroidR8IgnoreWarnings

Spécifie la règle proguard -ignorewarnings pour r8. Cela permet r8 de poursuivre la compilation de dex même si certains avertissements sont rencontrés. La valeur par défaut est True, mais peut être définie en False pour un comportement plus strict. Pour plus d’informations, consultez le manuel ProGuard.

À compter de .NET 8, spécifie --map-diagnostics warning info. Pour plus d’informations, consultez le code source D8 et R8.

AndroidR8JarPath

Chemin vers r8.jar pour une utilisation avec le compilateur et réducteur r8. La valeur par défaut est un chemin d’accès à l’installation de la charge de travail .NET pour Android. Pour plus d’informations, consultez notre documentation sur D8 et R8.

AndroidR8ObfuscationMode

Propriété de type énumération qui spécifie comment r8 obfusque les noms Java lorsque $(AndroidLinkTool) est r8. Les valeurs prises en charge sont les suivantes :

  • private-members préserve les noms de classes et d’interfaces Java ainsi que les noms des membres publics ou protégés. Les membres privés et privés de package peuvent être obfusqués et l’optimisation R8 est activée.
  • disableddésactive l’obfuscation, conserve tous les noms Java et utilise les valeurs par défaut Android R8 non optimisées.

Cette propriété ne désactive pas la réduction du code R8.

Cette propriété a été introduite dans une version de maintenance .NET 10. Il est disabled par défaut dans .NET 10 et private-members dans .NET 11 et versions ultérieures.

AndroidResgenExtraArgs

Spécifie les options de ligne de commande à passer à la commande aapt lors du traitement des ressources et actifs Android.

AndroidResgenFile

Spécifie le nom du fichier de ressources à générer. Le modèle par défaut définit cette valeur sur Resource.designer.cs.

AndroidResourceDesignerClassModifier

Spécifie le modificateur de classe pour la classe intermédiaire Resource générée. Les valeurs valides sont public et internal.

Par défaut, ce sera public.

Ajouté dans .NET 9.

AndroidSdkBuildToolsVersion

Le package d’outils de construction Android SDK fournit les outils aapt et zipalign , entre autres. Plusieurs versions différentes du package d’outils de génération peuvent être installées en parallèle. Le package d’outils de génération choisi pour l’empaquetage est réalisé en recherchant et en utilisant, le cas échéant, une version « favorite » des outils de génération ; s’il n’en existe pas, le package d’outils de génération associé à la version la plus récente sera utilisé.

La propriété MSBuild $(AndroidSdkBuildToolsVersion) contient la version préférée des outils de génération. Le système de génération .NET pour Android fournit une valeur par défaut dans Xamarin.Android.Common.targets, et la valeur par défaut peut être remplacée dans votre fichier projet pour choisir une autre version des outils de compilation, si (par exemple) la dernière version de aapt se bloque tandis qu'une version précédente d’aapt est connue pour fonctionner.

AndroidSigningKeyAlias

Spécifie l’alias de la clé dans le magasin de clés. Il s’agit de la valeur keytool -alias utilisée lors de la création du magasin de clés.

AndroidSigningKeyPass

Spécifie le mot de passe de la clé contenu dans le fichier keystore. C’est la valeur entrée quand keytool demande Entrez le mot clé pour $(AndroidSigningKeyAlias).

Cette propriété prend également en charge les préfixes env: et file: qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. Ces options permettent d’empêcher l’affichage du mot de passe dans les journaux de génération.

Par exemple, pour utiliser une variable d’environnement nommée AndroidSigningPassword :

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

Pour utiliser un fichier situé à l’adresse C:\Users\user1\AndroidSigningPassword.txtsuivante :

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

Remarque

Le préfixe env: n’est pas pris en charge lorsque $(AndroidPackageFormat) est défini sur aab.

AndroidSigningKeyStore

Spécifie le nom de fichier du magasin de clés créé par keytool. Ceci correspond à la valeur fournie pour l’option keytool -keystore.

AndroidSigningStorePass

Spécifie le mot de passe à $(AndroidSigningKeyStore). C’est la valeur fournie à keytool lors de la création du fichier de magasin de clés et demandée avec Entrez le mot de passe du magasin de clés :.

Cette propriété prend également en charge les préfixes env: et file: qui peuvent être utilisés pour spécifier une variable d’environnement ou un fichier qui contient le mot de passe. Ces options permettent d’empêcher l’affichage du mot de passe dans les journaux de génération.

Par exemple, pour utiliser une variable d’environnement nommée AndroidSigningPassword :

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

Pour utiliser un fichier situé à l’adresse C:\Users\user1\AndroidSigningPassword.txtsuivante :

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

Remarque

Le préfixe env: n’est pas pris en charge lorsque $(AndroidPackageFormat) est défini sur aab.

AndroidSigningPlatformKey

Spécifie le fichier de clé à utiliser pour signer l’apk. Cela est utilisé uniquement lors de la création system d’applications.

AndroidSigningPlatformCert

Spécifie le fichier de certificat à utiliser pour signer l’apk. Cela est utilisé uniquement lors de la création system d’applications.

AndroidStripILAfterAOT

Propriété booléenne qui spécifie si les corps de méthode des méthodes compilées en AOT seront supprimés.

La valeur par défaut est false, et les corps de méthode des méthodes compilées AOT ne seront pas supprimés.

Lorsqu’il est défini à true, $(AndroidEnableProfiledAot) est défini à false par défaut. Cela signifie que, dans les builds .NET 8 et .NET 9 Mono Release pris en charge, dans lesquelles $(RunAOTCompilation) est true par défaut, Mono AOT est activé pour tout. Cela peut entraîner une augmentation des tailles d’application. Ce comportement peut être substitué en définissant $(AndroidEnableProfiledAot) à true explicitement dans votre fichier projet.

La prise en charge expérimentale de cette propriété a été ajoutée dans .NET 8, supprimée dans .NET 10.

AndroidStripNativeLibraries

Propriété bool qui indique au processus d’empaquetage de supprimer les symboles de débogage des bibliothèques partagées natives (.so fichiers).

La valeur par défaut est false et les symboles de débogage, le cas échéant, sont conservés lors de l’empaquetage.

AndroidSupportedAbis

Cette propriété n’est plus prise en charge dans .NET 6 et versions ultérieures. Supprimez-le et utilisez $(RuntimeIdentifier) ou $(RuntimeIdentifiers) avec des RID .NET plutôt que des noms ABI Android.

Par exemple, le paramètre .NET 11 suivant inclut toutes les architectures CoreCLR prises en charge :

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

AndroidTlsProvider

Cette propriété est obsolète et ne doit pas être utilisée.

AndroidTypeMapImplementation

Propriété enum-style qui sélectionne l’implémentation de la carte de type. Les valeurs valides sont llvm-ir et trimmable.

La valeur par défaut est trimmable quand true est $(PublishAot) et llvm-ir sinon.

AndroidUseApkSigner

Propriété bool qui permet au développeur d’utiliser l’outil apksigner plutôt que jarsigner.

AndroidUseDefaultAotProfile

Propriété bool qui permet au développeur de supprimer l’utilisation du profil Mono AOT par défaut.

Le profil par défaut est utilisé lorsque $(AndroidEnableProfiledAot) est true, sauf si cette propriété est définie sur la valeur false.

Cette propriété s’applique aux projets .NET 10 et versions antérieures pris en charge qui utilisent Mono. Il ne sélectionne pas les profils MIBC ou les PGO dynamiques pour CoreCLR.

AndroidUseDesignerAssembly

Propriété booléenne qui contrôle si le système de génération génère un _Microsoft.Android.Resource.Designer.dll par opposition à un Resource.Designer.cs fichier. Les avantages de cette opération sont des applications plus petites et une durée de démarrage plus rapide.

La valeur par défaut est true dans .NET 8.

En tant qu’auteur Nuget, il est recommandé d’expédier trois versions de l’assembly si vous souhaitez maintenir la compatibilité descendante. Un pour MonoAndroid, un pour net6.0-android et un pour net8.0-android. Pour ce faire, utilisez Xamarin.Legacy.Sdk. Cela n’est nécessaire que si votre projet de bibliothèque Nuget utilise des AndroidResource éléments dans le projet ou via une dépendance.

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

Vous pouvez également désactiver ce paramètre jusqu'à ce que Classic et net7.0-android aient été abandonnés.

Les projets .NET 8 qui choisissent de désactiver ce paramètre ne pourront pas consommer de références qui l’utilisent. Si vous essayez d’utiliser un assembly sur lequel cette fonctionnalité est activée dans un projet qui ne le fait pas, vous obtiendrez une XA1034 erreur de génération.

Ajouté dans .NET 8.

AndroidUseInstrumentation

Propriété booléenne qui indique que l’application est lancée à partir de son élément <instrumentation/> plutôt que par un <activity/>, tel qu’un hôte de test ou BenchmarkDotNet.

Lorsque true, dotnet run résout $(AndroidInstrumentation) depuis le AndroidManifest.xml généré et le lance avec adb shell am instrument, même si l’application déclare également une activité lançable.

La valeur par défaut est true lorsque true est $(EnableMSTestRunner), et false sinon. Notez qu’une application sans <activity/> lançable est lancée via sa propriété <instrumentation/>, indépendamment de cette propriété.

Introduit dans .NET 11.

AndroidUseInterpreter

Propriété booléenne qui provoque l’utilisation d’une machine virtuelle .apk Mono contenant l’interpréteur Mono, et non le JIT normal. La valeur par défaut est True pour les compilations Debug qui utilisent Mono, et False sinon.

Cette propriété s’applique aux projets .NET 10 et versions antérieures pris en charge qui utilisent Mono. Il ne s’agit pas d’un paramètre CoreCLR et Android n’a pas d’interpréteur dans .NET 11 et versions ultérieures.

Experimental.

AndroidUseLegacyVersionCode

Propriété booléenne qui permet au développeur de rétablir le calcul versionCode à son ancien comportement pré Xamarin.Android 8.2. Elle est RÉSERVÉE aux développeurs possédant des applications dans Google Play Store. Il est fortement recommandé d’utiliser la nouvelle propriété $(AndroidVersionCodePattern).

AndroidUseManagedDesignTimeResourceGenerator

Propriété booléenne qui basculera au fil du temps de conception pour utiliser l’analyseur de ressources managée plutôt que aapt.

AuthentificationNégociéePourAndroid

Propriété booléenne qui permet la prise en charge de l’authentification NTLMv2/Negotiate dans AndroidMessageHandler. La valeur par défaut est Faux.

Ajouté dans .NET 7.

AndroidUseSharedRuntime

Cette propriété est obsolète et ne doit pas être utilisée.

AndroidVersionCode

Propriété MSBuild qui peut être utilisée comme alternative dans le fichier /manifest/@android:versionCodeAndroidManifest.xml. Pour choisir cette fonctionnalité, vous devez également activer <GenerateApplicationManifest>true</GenerateApplicationManifest>. Il s’agit de la valeur par défaut de .NET 6.

Cette propriété est ignorée si $(AndroidCreatePackagePerAbi) et $(AndroidVersionCodePattern) sont utilisées.

@android:versionCode est une valeur entière qui doit être incrémentée pour chaque version de Google Play. Consultez la documentation Android pour plus d’informations sur la configuration requise pour /manifest/@android:versionCode.

AndroidVersionCodePattern

Propriété de chaîne qui permet au développeur de personnaliser le versionCode dans le manifeste. Consultez Création de code de version pour APK pour plus d’informations sur le choix d’un versionCode.

Voici des exemples : si abi est armeabi et si versionCode dans le manifeste est 123, {abi}{versionCode} produit un code de version 1123 quand $(AndroidCreatePackagePerAbi) a la valeur True ; sinon il produit la valeur 123. Si abi est x86_64 et versionCode dans le manifeste est 44. Ceci produit 544 quand $(AndroidCreatePackagePerAbi) est True ; sinon, il produit la valeur 44.

Si nous incluons une chaîne avec remplissage à gauche {abi}{versionCode:0000}, ceci produit 50044, car nous remplissons le versionCode à gauche avec 0. Vous pouvez également utiliser le remplissage décimal tel que {abi}{versionCode:D4} qui fait la même chose que l’exemple précédent.

Seules les chaînes avec le format de remplissage « 0 » et « Dx » sont prises en charge, car la valeur DOIT être un entier.

Éléments clés prédéfinis

  • abi : insère l’abi ciblé pour l’application

    • 2 – armeabi-v7a
    • 3 – x86
    • 4 – arm64-v8a
    • 5 – x86_64
  • minSDK : insère la valeur minimale prise en charge du kit de développement logiciel (SDK) à partir du AndroidManifest.xml ou du 11 si aucune valeur n’est définie.

  • versionCode : utilise le code de version directement à partir de Properties\AndroidManifest.xml.

Vous pouvez définir des éléments personnalisés en utilisant la propriété $(AndroidVersionCodeProperties) (définie ensuite).

La valeur par défaut est {abi}{versionCode:D6}. Si un développeur souhaite conserver l’ancien comportement, vous pouvez la remplacer en définissant la propriété $(AndroidUseLegacyVersionCode) sur true.

AndroidVersionCodeProperties

Propriété de chaîne qui permet au développeur de définir des éléments personnalisés à utiliser avec le $(AndroidVersionCodePattern). Ils se présentent sous la forme d'une paire key=value. Tous les éléments dans value doivent être des valeurs entières. Par exemple : screen=23;target=$(_AndroidApiLevel). Comme vous pouvez le voir, vous pouvez utiliser des propriétés MSBuild existantes ou personnalisées dans la chaîne.

ApplicationId

Propriété MSBuild qui peut être utilisée comme alternative dans le fichier /manifest/@packageAndroidManifest.xml. Pour choisir cette fonctionnalité, vous devez également activer <GenerateApplicationManifest>true</GenerateApplicationManifest>. Il s’agit de la valeur par défaut de .NET 6.

Consultez la documentation Android pour plus d’informations sur la configuration requise pour /manifest/@package.

TitreDeL'Application

Propriété MSBuild qui peut être utilisée comme alternative dans le fichier /manifest/application/@android:labelAndroidManifest.xml. Pour choisir cette fonctionnalité, vous devez également activer <GenerateApplicationManifest>true</GenerateApplicationManifest>. Il s’agit de la valeur par défaut de .NET 6.

Consultez la documentation Android pour plus d’informations sur la configuration requise pour /manifest/application/@android:label.

VersionDeL'Application

Propriété MSBuild qui peut être utilisée comme alternative dans le fichier /manifest/@android:versionNameAndroidManifest.xml. Pour choisir cette fonctionnalité, vous devez également activer <GenerateApplicationManifest>true</GenerateApplicationManifest>. Il s’agit de la valeur par défaut de .NET 6.

Consultez la documentation Android pour plus d’informations sur la configuration requise pour /manifest/@android:versionName.

AotAssemblies

Propriété booléenne qui détermine si oui ou non les assemblages seront compilés à l’avance en code natif par Mono et inclus dans les applications. Lorsqu’elle n’est pas spécifiée, sa valeur effective suit $(RunAOTCompilation): False pour les builds de débogage et True pour les builds Release qui utilisent Mono sur les frameworks cibles pris en charge .NET 10 et versions antérieures.

Déconseillé dans .NET 7. Pour les projets .NET 10 et versions antérieures pris en charge qui utilisent Mono, migrez plutôt vers la propriété MSBuild $(RunAOTCompilation). La spécification $(AotAssemblies), y compris sa définition false, émet l’avertissement XA1029 . Le fait de le définir sur true pour CoreCLR ou NativeAOT provoque l’erreur XA1044, qui bloque la génération, lorsque $(RunAOTCompilation) n’est pas défini (ou s’évalue autrement à true), car la logique de valeur par défaut transmet $(AotAssemblies) à $(RunAOTCompilation).

Pour .NET 11 projets CoreCLR, supprimez $(AotAssemblies) sans ajouter $(RunAOTCompilation). CoreCLR n’utilise pas le pipeline Mono AOT.

AProfUtilExtraOptions

Options supplémentaires à passer à aprofutil lors de l’utilisation des anciennes cibles de profilage Mono AOT dans les projets .NET 10 et versions antérieures pris en charge.

BeforeBuildAndroidAssetPacks

Les cibles MSBuild répertoriées dans cette propriété s’exécutent directement avant la génération des AssetPack éléments.

Ajouté dans .NET 9

AvantGenerateAndroidManifest

Les cibles MSBuild répertoriées dans cette propriété s’exécutent directement avant _GenerateJavaStubs.

Configuration

Spécifie la configuration de build à utiliser, telle que « Déboguer » ou « Release ». La propriété Configuration est utilisée pour déterminer les valeurs par défaut pour d’autres propriétés qui déterminent le comportement de la cible. Vous pouvez créer des configurations supplémentaires dans votre IDE.

Par défaut, la Debug configuration entraîne la Install et SignAndroidPackage cible la création d’un package Android plus petit qui nécessite la présence d’autres fichiers et packages pour fonctionner.

La configuration par défaut Release entraîne la Install et SignAndroidPackagecible la création d’un package Android autonome et peut être utilisée sans installer d’autres packages ou fichiers.

DebugSymbols

Valeur booléenne qui détermine si le package Android est débogueur, en combinaison avec la $(DebugType) propriété. Un package débogable contient des symboles de débogage, définit l’attribut //application/@android:debuggable à true, et ajoute automatiquement le INTERNET autorisation pour qu’un débogueur puisse s’attacher au processus. Une application est débogable si DebugSymbols elle est TrueetDebugType est la chaîne vide ou Full.

DebugType

Spécifie le type de symboles de débogage à générer dans le cadre de la build, ce qui affecte également si l’application est débogueable. Valeurs possibles :

  • Full : des symboles complets sont générés. Si le DebugSymbols La propriété MSBuild est également True, alors le package d’application est débogable.

  • PdbOnly: les symboles « PDB » sont générés. Le paquet d'application n'est pas déboguable.

Si DebugType n’est pas défini ou est une chaîne vide, la propriété DebugSymbols contrôle si l’application est ou non débogable.

Appareil

Spécifie l’appareil ou l’émulateur Android à cibler lors de l’utilisation de dotnet run --device <Device> ou des cibles MSBuild qui interagissent avec les appareils (comme Run, Install ou Uninstall).

La valeur doit être le numéro de série ou l’identificateur complet de l’appareil tel qu’il est retourné par adb devices. Par exemple, si la série de l’appareil est emulator-5554, vous devez utiliser -p:Device=emulator-5554.

Quand elle est définie, cette propriété est utilisée pour initialiser la AdbTarget propriété avec la valeur -s "<Device>".

Pour plus d’informations sur la sélection de l’appareil, consultez la spécification de sélection d’appareil du SDK .NET.

DiagnosticAddress

Valeur fournie par dotnet-dsrouter tel que 127.0.0.1, le composant d’adresse IP de $(DiagnosticConfiguration) ou DOTNET_DiagnosticPorts.

Lorsque cette propriété n’est pas vide et que $(AndroidEnableProfiler) n’est pas explicitement définie sur false, elle active implicitement les diagnostics Android. Pour CoreCLR, le point de terminaison TCP obtenu est généralement conservé sur l’interface de bouclage et est utilisé par dotnet-dsrouter. Pour un émulateur Android, utilisez 10.0.2.2 pour accéder à la machine de développement ; pour un appareil physique, utilisez 127.0.0.1 avec la redirection de port Android activée via dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Android.

La valeur par défaut est 127.0.0.1.

DiagnosticConfiguration

Une valeur fournie par dotnet-dsrouter pour DOTNET_DiagnosticPorts telle que :

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

Lorsque les diagnostics sont activés sans configuration explicite, les valeurs par défaut dérivées sont l’adresse127.0.0.1, le port 9000et DiagnosticSuspend=falseDiagnosticListenMode=connect.

Notez que le caractère , doit être échappé avec %2c s’il est passé en ligne de commande à dotnet build:

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

Cela définit automatiquement la variable d’environnement DOTNET_DiagnosticPorts empaquetée à l’intérieur de l’application. En mode connect, l’environnement d’exécution Android se connecte au point de terminaison TCP configuré et dotnet-dsrouter redirige cette connexion vers l’outil de diagnostic local. Le point de terminaison n’est pas authentifié et non chiffré, donc conservez-le sur une interface de développement locale.

Le fait de définir cette propriété, ou l’une des propriétés du composant ci-dessous, active implicitement les diagnostics Android lorsque $(AndroidEnableProfiler) n’est pas explicitement défini sur false.

Mode d'écoute diagnostique

Valeur fournie par dotnet-dsrouter tel que connect, le composant du mode d’écoute de $(DiagnosticConfiguration) ou DOTNET_DiagnosticPorts.

Lorsque cette propriété n’est pas vide et que $(AndroidEnableProfiler) n’est pas explicitement définie sur false, elle active implicitement les diagnostics Android.

La valeur par défaut est connect.

DiagnosticPort

Valeur fournie par dotnet-dsrouter tel que 9000, le composant de port de $(DiagnosticConfiguration) ou DOTNET_DiagnosticPorts.

Lorsque cette propriété n’est pas vide et que $(AndroidEnableProfiler) n’est pas explicitement définie sur false, elle active implicitement les diagnostics Android.

La valeur par défaut est 9000.

DiagnosticSuspend

Valeur booléenne fournie par dotnet-dsrouter tel que true/suspend ou false/nosuspend, un composant de $(DiagnosticConfiguration) ou DOTNET_DiagnosticPorts.

Lorsque cette propriété n’est pas vide et que $(AndroidEnableProfiler) n’est pas explicitement définie sur false, elle active implicitement les diagnostics Android.

La valeur par défaut est false.

EmbedAssembliesIntoApk

Propriété booléenne qui détermine si les assemblys de l’application doivent être incorporés ou non dans le package d’application.

Cette propriété est l’inverse de $(AndroidEnableFastDeployment). Les nouveaux projets doivent utiliser $(AndroidEnableFastDeployment) pour contrôler le déploiement rapide. Si les deux propriétés sont définies, $(EmbedAssembliesIntoApk) est prioritaire.

Cette propriété doit être définie sur True pour les versions Release, et sur False pour les projets Debug. Sa valeur doit être True dans les versions Debug si le déploiement rapide ne prend pas en charge l’appareil cible.

Activer le rapport d’incident

Propriété booléenne qui définit la variable d’environnement 1 sur DOTNET_EnableCrashReport lors de l’utilisation du runtime CoreCLR ou NativeAOT. Cela permet de générer un rapport d’incident au démarrage de l’application.

Cette propriété est False par défaut et est ignorée quand $(UseMonoRuntime) est True.

Activer Diagnostics

Propriété Android SDK/MSBuild qui active les diagnostics pour le runtime sélectionné. C’est un synonyme de $(AndroidEnableProfiler) pour les applications Mono. Pour CoreCLR, il active la configuration de port de diagnostic utilisée par dotnet-trace et dotnet-gcdump.

$(EnableDiagnostics) n’est pas identique à la variable DOTNET_EnableDiagnosticsd’environnement d’exécution CoreCLR. Le premier est évalué par les cibles Android SDK/MSBuild ; le second est lu par l’environnement d’exécution lorsqu’il est fourni sous forme de variable d’environnement.

Cette propriété est définie par défaut sur False.

EnableLLVM

Propriété booléenne qui détermine si LLVM sera utilisée ou non par le compilateur Mono AOT lors de la compilation anticipée des assemblys en code natif.

Le kit de développement logiciel (NDK) Android doit être installé pour générer un projet sur lequel cette propriété est activée.

Cette propriété est définie par défaut sur False.

Cette propriété s’applique aux projets .NET 10 ou antérieurs pris en charge qui utilisent Mono et affecte la compilation uniquement lorsque True est $(RunAOTCompilation).

Le fait de définir cette propriété sur true pour CoreCLR ou NativeAOT la réinitialise à false et interrompt la génération avec XA1044.

EnableMSTestRunner

Propriété booléenne qui active l’exécuteur MSTest pour les projets de test Android. Lorsqu’elle est définie sur true, dotnet run lance l’application via am instrument au lieu de am start, ce qui permet de transmettre les résultats des tests via le protocole d’instrumentation d’Android.

Cette propriété est définie par défaut sur False.

Introduit dans .NET 11.

EnableProguard

Propriété booléenne qui détermine si proguard est exécuté dans le cadre du processus d’empaquetage pour lier du code Java.

Cette propriété est définie par défaut sur False.

Lorsque True, les fichiers @(ProguardConfiguration) sont utilisés pour contrôler proguard l’exécution.

EventSourceSupport

Quand false est défini, cela désactive la prise en charge d’EventSource de .NET pour les applications Android réduites. La désactivation de cette fonctionnalité empêcherait le fonctionnement des outils de diagnostic .NET tels que dotnet-counters, mais permettrait de réduire la taille de l'application.

Défini par défaut en le mode false, sauf si Release ou $(EnableDiagnostics) sont activés.

GénérerLeManifesteD'Application

Active ou désactive les propriétés MSBuild suivantes qui émettent des valeurs dans le fichier final AndroidManifest.xml :

La valeur $(GenerateApplicationManifest) par défaut est true.

JavaMaximumHeapSize

Spécifie la valeur du paramètre java-Xmx à utiliser lors de la création du fichier .dex dans le cadre du processus d’empaquetage. Si non spécifié, l’option -Xmx fournit java avec la valeur 1G. Ceci est couramment requis sur Windows par rapport à d’autres plateformes.

La spécification de cette propriété est nécessaire si la cible _CompileDex génère une exception java.lang.OutOfMemoryError.

Personnalisez la valeur en changeant :

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

Spécifie les options de ligne de commande à passer à java lors de la construction du fichier .dex.

JarsignerTimestampAuthorityCertificateAlias

Cette propriété vous permet de spécifier un alias dans le keystore pour une autorité d’horodatage. Pour plus d'informations, consultez la documentation Java sur la prise en charge de l'horodatage de signature.

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

JarsignerTimestampAuthorityUrl

Cette propriété vous permet de spécifier une URL vers un service d’autorité d’horodatage. Cela peut être utilisé pour vous assurer que votre .apk signature inclut un horodatage. Pour plus d'informations, consultez la documentation Java sur la prise en charge de l'horodatage de signature.

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

LinkerDumpDependencies

Propriété booléenne qui permet de générer un fichier de dépendances du linker. Ce fichier peut être utilisé en tant qu’entrée pour l’outil illinkanalyzer.

Le fichier de dépendances nommé linker-dependencies.xml.gz est écrit dans le répertoire du projet. Sur .NET5/6, c'est écrit à côté des assemblies liés dans le répertoire obj/<Configuration>/android<ABI>/linked.

La valeur par défaut est Faux.

MandroidI18n

Cette propriété MSBuild est obsolète et n’est plus prise en charge.

MauiEnableFullReadyToRun

Propriété booléenne pour les applications Android .NET MAUI qui utilisent CoreCLR et qui sont compilées dans la configuration Release avec ReadyToRun activé. Lorsque cette propriété n’est pas définie ou vaut false, MAUI utilise ReadyToRun partiel avec ses profils MIBC par défaut. Définissez cette propriété sur true pour activer entièrement ReadyToRun. Cette propriété n’a aucun effet quand $(PublishReadyToRun) est false.

ReadyToRun complète augmente la taille de l’application et du téléchargement, mais peut potentiellement améliorer les performances du runtime, car d’autres méthodes sont précompilées.

Pour plus d’informations sur CoreCLR et ReadyToRun dans .NET MAUI, consultez Runtimes et compilation dans .NET MAUI.

MetricsSupport

Quand la valeur est définie sur false, désactive la prise en charge des métriques de .NET pour les applications Android réduites. La désactivation de cette fonctionnalité empêcherait les API telles que System.Diagnostics.Metrics de fonctionner, mais permettrait une réduction de la taille de l’application.

Défini par défaut en le mode false, sauf si Release ou $(EnableDiagnostics) sont activés.

MonoAndroidAssetPrefix

Spécifie un préfixe de chemin d’accès supprimé du début des noms de fichiers avec une action build de AndroidAsset. Ceci permet de changer l’emplacement où se trouvent les ressources.

La valeur par défaut est Assets. Changez ceci en assets pour la structure de projet Java.

MonoAndroidResourcePrefix

Spécifie un préfixe de chemin d’accès supprimé du début des noms de fichiers avec une action build de AndroidResource. Ceci permet de changer l’emplacement où se trouvent les ressources.

La valeur par défaut est Resources. Changez ceci en res pour la structure de projet Java.

MonoSymbolArchive

Remarque

Il s’agissait d’une propriété MSBuild héritée de Xamarin.Android. Non disponible dans .NET 6+.

Propriété booléenne qui contrôle si des artefacts de .mSYM sont créés pour une utilisation ultérieure avec mono-symbolicate, afin d’extraire les informations « réelles » de nom de fichier et de numéro de ligne à partir des traces de la pile Release.

Cette valeur est True par défaut pour les applications « Release » qui ont activé les symboles de débogage : $(EmbedAssembliesIntoApk) a la valeur True, $(DebugSymbols) a la valeur True, et $(Optimize) est Vrai.

PublishReadyToRun

Propriété booléenne qui contrôle si les assemblys sont compilés au format ReadyToRun lors de l’utilisation de CoreCLR. Les assemblys ReadyToRun contiennent à la fois du code MSIL et natif. Cela peut améliorer le temps de démarrage de l’application tout en conservant la compatibilité JIT, mais augmente la taille de l’application et du téléchargement.

Pour les applications Android qui utilisent CoreCLR, cette propriété a pour valeur par défaut true dans la configuration Release et n’est pas activée par défaut dans la configuration Debug. ReadyToRun ne s’applique pas lors de l’utilisation de Mono ou NativeAOT.

ReadyToRun nécessite l’élagage. Si $(PublishTrimmed) n’est pas true, .NET pour Android désactive PublishReadyToRun et $(PublishReadyToRunComposite) et émet l’avertissement XA0119.

La compilation ReadyToRun est composite par défaut. Voir $(PublishReadyToRunComposite). .NET MAUI utilise également ReadyToRun partiel avec des profils MIBC par défaut. Voir $(MauiEnableFullReadyToRun) pour choisir l’intégralité de ReadyToRun.

Pour plus d’informations, consultez Runtimes et compilation dans .NET MAUI.

PublishReadyToRunComposite

Propriété booléenne qui contrôle si la compilation ReadyToRun combine les assemblys d’application dans une image composite. Composite ReadyToRun permet des optimisations entre assemblies, mais peut augmenter le temps de compilation.

Pour les applications Android qui utilisent CoreCLR, cette propriété a pour valeur par défaut true lorsque $(PublishReadyToRun) est true. ReadyToRun, y compris ReadyToRun composite, nécessite que $(PublishTrimmed) soit true.

RunAOTCompilation

Propriété booléenne qui détermine si les assemblys seront compilés à l’avance avec le compilateur Mono AOT et inclus dans les applications qui utilisent le runtime Mono. Cette propriété est False par défaut pour les compilations Debug et True par défaut pour les compilations Release qui utilisent Mono sur les versions cibles de .NET 10 et antérieures prises en charge.

Cette propriété MSBuild remplace la $(AotAssemblies) propriété MSBuild de Xamarin.Android. Il s’agit de la même propriété utilisée pour Blazor WASM.

Cette propriété n’active pas ReadyToRun ou NativeAOT. Le définir sur true pour CoreCLR ou NativeAOT le réinitialise à false et interrompt la génération avec XA1044.

UseMonoRuntime

Propriété booléenne qui contrôle si les applications Android utilisent le runtime Mono au lieu de CoreCLR pour les cibles prises en charge .NET 10 et versions antérieures. Définissez cette propriété pour true utiliser Mono ou false utiliser CoreCLR sur ces cibles. $(PublishAot) a priorité et sélectionne NativeAOT pour les publications prises en charge ou les compilations optimisées lorsqu’il est défini sur true.

Cette propriété est par défaut dans .NET 10 et versions antérieurestrue, de sorte que les applications Android utilisent Mono. Dans .NET 11 et versions ultérieuresfalse, il est défini par défaut pour que les applications Android utilisent CoreCLR et qu’une valeur explicite true soit rejetée avec NETSDK1242.

Pour plus d’informations, consultez Runtimes et compilation dans .NET MAUI.

WaitForExit

Propriété booléenne qui contrôle le comportement de lors du lancement d’applications dotnet run Android.

Quand $(WaitForExit) n'est pas false (par défaut), dotnet run :

  • Lancer l’application Android
  • Flux logcat de sortie filtré dans le processus de l’application
  • Attendez que l’application se ferme ou que l’utilisateur appuie sur Ctrl+C
  • Forcer l’arrêt de l’application lorsque Ctrl+C est enfoncée

Lorsque $(WaitForExit) est false, dotnet run lance simplement l’application et revient immédiatement sans attendre que l’application se ferme ni transmettre de sortie en continu.

Cette propriété contrôle également si -w est transmis à adb shell am instrument lorsque l’application est lancée via son $(AndroidInstrumentation) :

$(WaitForExit) Lancement d’une <activity/> Lancement d’une <instrumentation/>
true (valeur par défaut) adb shell am start -S -W adb shell am instrument -w -r
false adb shell am start -S adb shell am instrument -r

Comme adb shell am instrument ne renvoie les résultats qu’une fois l’instrumentation terminée, $(WaitForExit) ne doit pas être false si vous avez besoin de la sortie de l’instrumentation ou d’un code de sortie significatif. Cela concerne les scénarios tels que l’exécution de tests ou un hôte BenchmarkDotNet , c’est pourquoi dotnet test utilise toujours la valeur par défaut.

Introduit dans .NET 11.