Buildeigenschaften

MSBuild-Eigenschaften steuern das Verhalten der Ziele.

Sie werden in der Projektdatei angegeben, z . B. "MyApp.csproj", innerhalb einer MSBuild PropertyGroup.

Hinweis

In .NET für Android gibt es technisch keinen Unterschied zwischen einer Anwendung und einem Bindungsprojekt, sodass Eigenschaften in beiden funktionieren. In der Praxis wird dringend empfohlen, separate Anwendungs- und Bindungsprojekte zu erstellen. Eigenschaften, die in erster Linie in Bindings-Projekten verwendet werden, werden im Referenzhandbuch zu MSBuild-Bindings-Projekteigenschaften dokumentiert.

Laufzeitbereich

Normale Android-Anwendungen zielen auf CoreCLR in .NET 11 und höher ab. Android-Anwendungen mit Zielversion .NET 10 und früher verwenden standardmäßig Mono. Das Festlegen von $(PublishAot) auf true wählt die NativeAOT-Laufzeit für unterstützte Veröffentlichungs- oder optimierte Builds aus und hat Vorrang vor $(UseMonoRuntime).

$(UseMonoRuntime)=true ist keine Hintertür für .NET-11. Das .NET 11 SDK lehnt es mit NETSDK1242 ab. Verwenden Sie die .NET 10-und-älteren Mono-Anleitungen nur, wenn sie auf ein Framework abzielen, in dem Mono unterstützt wird.

.NET 11 Android-Anwendungen erfordern Android-API-Ebene 24 oder höher. $(SupportedOSPlatformVersion) legt das Mindestmaß für die Bereitstellung der Anwendung fest und ist im Android-Manifest zugeordnet //uses-sdk/@android:minSdkVersion . Es wählt nicht das Ziel-SDK aus oder stellt die Google Play-Richtlinie dar.

Die .NET 11 CoreCLR-Runtimepakete unterstützen die folgenden .NET-Laufzeitbezeichner (RIDs) sowie die entsprechenden binären Anwendungsschnittstellen (ABIs) für Android:

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

Android NativeAOT ist experimentell und unterstützt dieselben drei RIDs. RIDs unterscheiden sich von Android-ABI-Namen und Emulatorsystemimagearchitekturen.

AdbTarget

Die $(AdbTarget)-Eigenschaft gibt das Android-Zielgerät an, auf dem das Android-Paket installiert oder entfernt werden soll. Der Wert dieser Eigenschaft ist identisch mit der Zielgerätoption adb.

AfterGenerateAndroidManifest

Die in dieser Eigenschaft aufgelisteten MSBuild-Ziele werden direkt nach dem internen _GenerateJavaStubs-Ziel ausgeführt. Dabei wird die Datei AndroidManifest.xml im $(IntermediateOutputPath) generiert. Wenn Sie Änderungen an der generierten Datei AndroidManifest.xml vornehmen möchten, können Sie dies über diesen Erweiterungspunkt tun.

AndroidAapt2CompileExtraArgs

Gibt Befehlszeilenoptionen an, die beim Verarbeiten von Android-Bestandteilen und -Ressourcen an den aapt2 compile-Befehl übergeben werden sollen.

AndroidAapt2LinkExtraArgs

Gibt Befehlszeilenoptionen an, die beim Verarbeiten von Android-Assets und -Ressourcen an den aapt2 Link-Befehl übergeben werden sollen.

AndroidAddKeepAlives

Hierbei handelt es sich um eine boolesche Eigenschaft, die steuert, ob der Linker GC.KeepAlive()-Aufrufe in Bindungsprojekten einfügt, um eine vorzeitige Objektsammlung zu verhindern.

Der Standardwert ist True für Release-Konfigurations-Builds.

Für nicht getrimmte Builds mit der trimmable-Typzuordnung werden GC.KeepAlive()-Aufrufe nur eingefügt, wenn $(AndroidEnableLegacyCompatibilityAssemblyFixups) ist auch True. Gekürzte Builds mit der trimmable Typzuordnung fügen diese Aufrufe nicht ein.

AndroidAotAdditionalArguments

Eine Stringeigenschaft, mit der unterstützte .NET 10- und frühere Projekte, die Mono verwenden, zusätzliche durch Kommas getrennte Optionen im Argument --aot=... des Mono-AOT-Compilers übergeben können. Die Eigenschaft wird nur verwendet, wenn die Mono AOT-Kompilierung aktiviert ist.

Diese Eigenschaft sollte im Allgemeinen leer bleiben, bietet aber in bestimmten speziellen Szenarios möglicherweise eine nützliche Flexibilität.

Die $(AndroidAotAdditionalArguments) Eigenschaft unterscheidet sich von der zugehörigen $(AndroidExtraAotOptions) Eigenschaft; $(AndroidAotAdditionalArguments) ist in der --aot Option enthalten, während $(AndroidExtraAotOptions) eigenständige Argumente direkt an den Mono AOT-Compilerprozess übergeben werden.

AndroidAotCustomProfilePath

Die Datei, die aprofutil zum Speichern von Mono-AOT-Profilerdaten erstellen soll. Der Standardwert ist custom.aprof.

Diese Eigenschaft gilt für die veralteten AOT-Profilingziele für unterstützte .NET 10- und frühere Projekte, die Mono verwenden.

AndroidAotProfilerPort

Der Port, zu dem aprofutil beim Abrufen von Mono-AOT-Profilingdaten eine Verbindung herstellen soll. Der Standardwert ist 9999.

Diese Eigenschaft gilt für die veralteten AOT-Profilingziele für unterstützte .NET 10- und frühere Projekte, die Mono verwenden.

AndroidAotEnableLazyLoad

Ermöglicht Lazy Loading (verzögertes Laden) von mit Mono AOT kompilierten Assemblys, anstatt sie beim Start vorzuladen.

Diese Eigenschaft gilt für unterstützte .NET 10-und-frühere Projekte, die Mono verwenden. Standardmäßig wird True verwendet, wenn Mono AOT aktiviert ist und keine Debugsymbole enthalten sind. Es konfiguriert nicht CoreCLR oder NativeAOT.

In .NET 6 eingeführt.

AndroidApkDigestAlgorithm

Ein Zeichenfolgenwert, der den für jarsigner -digestalg zu verwendenden Digestalgorithmus angibt.

Der Standardwert ist SHA-256.

AndroidApkSignerZusätzlicheArgumente

Eine Eigenschaftenzeichenfolge, die dem Entwickler ermöglicht, Argumente für das apksigner-Tool bereitzustellen.

AndroidApkSigningAlgorithm

Ein Zeichenfolgenwert, der den zu verwendenden jarsigner -sigalg Signierungsalgorithmus angibt.

Der Standardwert ist SHA256withRSA.

AndroidApplication

Ein boolescher Wert, der angibt, ob das Projekt für eine Android-Anwendung (True) oder für ein Android-Bibliotheksprojekt (False oder nicht vorhanden) vorgesehen ist.

Es darf nur ein Projekt mit <AndroidApplication>True</AndroidApplication> in einem Android-Paket vorhanden sein. (Leider wird diese Anforderung nicht überprüft, was zu subtilen und bizarren Fehlern in Bezug auf Android-Ressourcen führen kann.)

AndroidApplicationJavaClass

Der vollständige Java-Klassenname, der anstelle von android.app.Application verwendet werden soll, wenn eine Klasse von Android.App.Application erbt.

Die $(AndroidApplicationJavaClass) Eigenschaft wird in der Regel durch andere Eigenschaften festgelegt, z. B. die $(AndroidEnableMultiDex) MSBuild-Eigenschaft.

AndroidAvoidEmitForPerformance

Eine boolesche Eigenschaft, die bestimmt, ob System.Reflection.Emit "vermieden" wird, um die Startleistung zu verbessern. Standardmäßig ist diese Eigenschaft True.

Die Nutzung von System.Reflection.Emit hat eine spürbare Auswirkung auf die Startleistung auf Android. Dieses Verhalten ist für die folgenden Featureoptionen standardmäßig deaktiviert:

  • Switch.System.Reflection.ForceInterpretedInvoke: nach dem zweiten Aufruf von MethodInfo.Invoke() oder ConstructorInfo.Invoke() wird Code generiert, um die Leistung wiederholter Aufrufe zu verbessern.

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: Nach dem zweiten Aufruf zum Abrufen eines Diensts aus einem Abhängigkeitseinfügungscontainer wird Code ausgegeben, um die Leistung wiederholter Aufrufe zu verbessern.

Es ist in den meisten Android-Anwendungen wünschenswert, dieses Verhalten zu deaktivieren.

Ausführliche Informationen zu verfügbaren Feature-Schaltern finden Sie in der Dokumentation zu den Feature-Schaltern der Basis-Klassenbibliotheken.

In .NET 8 hinzugefügt.

AndroidBinUtilsPath

Ein Pfad zu einem Verzeichnis, das die binutils von Android enthält, z. B. den nativen Linker ld und den nativen Assembler as. Diese Tools sind in .NET für Android-Workload enthalten.

Der Standardwert ist $(MonoAndroidBinDirectory)\binutils\bin\.

AndroidBoundExceptionType

Ein Zeichenfolgenwert, der angibt, wie Ausnahmen weitergegeben werden sollen, wenn ein .NET für Android bereitgestellter Typ einen .NET-Typ oder eine Schnittstelle im Kontext von Java-Typen implementiert, zum Beispiel Android.Runtime.InputStreamInvoker und System.IO.Stream, oder Android.Runtime.JavaDictionary und System.Collections.IDictionary.

  • Java: Der ursprüngliche Java-Ausnahmetyp wird wie folgt verteilt.

    Java bedeutet, dass InputStreamInvoker beispielsweise die System.IO.Stream-API nicht ordnungsgemäß implementiert, da Java.IO.IOException aus Stream.Read() anstelle von System.IO.IOException ausgelöst werden kann.

  • System: Der ursprüngliche Java-Ausnahmetyp wird abgefangen und in einen entsprechenden .NET-Ausnahmetyp eingeschlossen.

    System bedeutet beispielsweise, dass InputStreamInvoker ordnungsgemäß System.IO.Stream implementiert und Stream.Read()nichtJava.IO.IOException-Instanzen auslöst. (Es kann stattdessen ein System.IO.IOException, das ein Java.IO.IOException enthält, als Exception.InnerException-Wert werfen.)

    Der Standardwert lautet System.

Android-gebundene Schnittstellen enthalten Konstanten

Eine boolesche Eigenschaft, die festlegt, ob Bindungskonstanten für Schnittstellen unterstützt werden oder ob alternativ die Problemumgehung des Erstellens einer IMyInterfaceConsts Klasse verwendet wird.

Der Standardwert ist True.

Android-gebundene Schnittstellen enthalten statische und Standard-Schnittstellenmethoden

Eine boolesche Eigenschaft, die angibt, ob Standard- und statische Member auf Schnittstellen unterstützt werden, oder eine alte Problemumgehung zum Erstellen einer gleichgeordneten Klasse mit statischen Elementen wie abstract class MyInterface.

Der Standardwert ist True in .NET 6 und False für legacy.

AndroidBoundInterfacesContainTypes

Eine boolesche Eigenschaft, die bestimmt, ob Typen, die in Schnittstellen geschachtelt sind, unterstützt werden oder die Problemumgehung zum Erstellen eines nicht geschachtelten Typs wie IMyInterfaceMyNestedClass.

Der Standardwert ist True in .NET 6 und False für legacy.

Android-Build-Anwendungspaket

Ein boolescher Wert, der angibt, ob das Paket erstellt und signiert werden soll (APK-Datei). Das Einstellen dieses Werts auf True ist gleichbedeutend mit der Verwendung von SignAndroidPackage Buildziel.

Standardmäßig ist diese Eigenschaft False.

Android-Bundle-Konfigurationsdatei

Gibt einen Dateinamen an, der als Konfigurationsdatei für bundletool verwendet werden soll, wenn ein Android App Bundle erstellt wird. Diese Datei steuert einige Aspekte für die Generierung von APKs aus dem Bundle, z. B. in welche Dimensionen das Bundle aufgeteilt wird, um APKs zu erzeugen. .NET für Android konfiguriert einige dieser Einstellungen automatisch, einschließlich der Liste der Dateierweiterungen, die nicht komprimiert werden sollen.

Diese Eigenschaft ist nur relevant, wenn $(AndroidPackageFormat) auf aab festgelegt ist.

AndroidBundleToolExtraArgs

Gibt Befehlszeilenoptionen an, die beim Erstellen von App-Bündeln an den Bundletool-Befehl übergeben werden sollen.

AndroidClassParser

Eine Zeichenfolgeneigenschaft, die steuert, wie .jar Dateien analysiert werden. Mögliche Werte sind:

  • class-parse: Verwendet class-parse.exe, um Java-Bytecode direkt (ohne Unterstützung durch eine JVM) zu analysieren.

  • jar2xml: Dieser Wert ist veraltet und wird nicht mehr unterstützt.

AndroidCodegenTarget

Eine Zeichenfolgeneigenschaft, die das ABI-Ziel der Codegenerierung steuert. Mögliche Werte sind:

  • XamarinAndroid: Dieser Wert ist veraltet und wird nicht mehr unterstützt.

  • XAJavaInterop1: Verwendet Java.Interop für JNI-Aufrufe. Bindungsassemblys, die XAJavaInterop1 verwenden, können nur mit Xamarin.Android 6.1 oder höher erstellt und ausgeführt werden. Xamarin.Android 6.1 oder höher bindet Mono.Android.dll mit diesem Wert.

  • JavaInterop1: experimenteller Wert, derzeit der Standardwert für die NativeAOT-Laufzeit.

Der Standardwert ist XAJavaInterop1.

AndroidCreatePackagePerAbi

Eine boolesche Eigenschaft, die bestimmt, ob für jede ausgewählte Android-ABI (z. B. arm64-v8a) eine .apk erstellt werden soll, anstatt nur eine einzelne .apk, die alle ausgewählten ABIs unterstützt. Die RIDs in $(RuntimeIdentifiers) wählen diese ABIs aus; APKs werden pro ABI erstellt, nicht pro RID.

Weitere Informationen finden Sie auch im Leitfaden zum Erstellen von ABI-spezifischen APKs.

AndroidCreateProguardMappingFile

Eine boolesche Eigenschaft, die steuert, ob eine Proguard-Zuordnungsdatei als Teil des Buildprozesses generiert wird.

Wenn Sie Folgendes zu Ihrem csproj hinzufügen, wird die Datei generiert, und die AndroidProguardMappingFile Eigenschaft wird verwendet, um den Speicherort der endgültigen Zuordnungsdatei zu steuern.

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

Beim Erstellen von .aab-Dateien wird die Zuordnungsdatei automatisch in Ihr Paket mit eingeschlossen. Es ist nicht erforderlich, es manuell in den Google Play Store hochzuladen. Bei der Verwendung von .apk Dateien muss die AndroidProguardMappingFile Datei manuell hochgeladen werden.

Der Standardwert ist True bei Verwendung von $(AndroidLinkTool)=r8.

AndroidDebugKeyAlgorithm

Gibt den Standardalgorithmus an, der für das debug.keystore verwendet werden soll. Der Standardwert ist RSA.

Gültigkeit des Android-Debug-Schlüssels

Gibt den Standardwert für die Gültigkeit für das debug.keystore an. Der Standardwert ist 10950 oder 30 * 365 oder 30 years.

AndroidDebugStoreType

Gibt das Dateiformat für den Schlüsselspeicher an, das für debug.keystore verwendet werden soll. Der Standardwert ist pkcs12.

AndroidDeviceUserId

Diese Eigenschaft ermöglicht das Bereitstellen und Debuggen der Anwendung mit Gast- oder Geschäftskonten. Der Wert ist der uid-Wert, den Sie über den folgenden adb-Befehl erhalten:

adb shell pm list users

Der obige Befehl gibt die folgenden Daten zurück:

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

Der uid-Wert ist der erste ganzzahlige Wert. In der obigen Ausgabe sind 0 und 10.

AndroidDexTool

Eine Enum-artige Eigenschaft mit einem gültigen Wert von d8. Zuvor wurde ein Wert von dx in Xamarin.Android unterstützt.

Gibt an, welcher Android dex Compiler während des .NET für Android-Buildprozesses verwendet wird. Der Standardwert ist d8. Lesen Sie unsere Dokumentation zu D8 und R8.

AndroidEnableDesugar

Eine boolesche Eigenschaft, die bestimmt, ob desugar aktiviert ist. Android unterstützt derzeit nicht alle Funktionen von Java 8, und die Standardtoolkette implementiert die neuen Sprachfeatures durch Durchführung von Bytecode-Transformationen, die "desugar" genannt werden, auf den Ausgaben des "javac" Compilers. Der Standardwert ist False bei Verwendung $(AndroidDexTool)=dx und True bei Verwendung von $(AndroidDexTool)=d8.

AndroidEnableFastDeployment

Eine boolesche Eigenschaft, die bestimmt, ob die schnelle Bereitstellung aktiviert ist. Bei der schnellen Bereitstellung werden Assemblys außerhalb des Anwendungspakets installiert, wodurch bereitstellungs- und neuerstellungszeiten reduziert werden können.

Der Standardwert ist True für Debugbuilds und False für Releasebuilds. Das Festlegen dieser Eigenschaft entspricht dem Festlegen des umgekehrten Werts von $(EmbedAssembliesIntoApk). Wenn beide Eigenschaften festgelegt sind, $(EmbedAssembliesIntoApk) hat dies Vorrang.

AndroidAktiviereGooglePlayStoreÜberprüfungen

Eine bool-Eigenschaft, mit der Entwickler die folgenden Google Play Store-Prüfungen deaktivieren können: XA1004, XA1005 und XA1006. Das Deaktivieren dieser Prüfungen ist für Entwickler nützlich, die nicht auf den Google Play Store abzielen und diese Prüfungen nicht ausführen möchten.

AndroidEnableLegacyCompatibilityAssemblyFixups

Eine boolesche Eigenschaft, die steuert, ob unbetrimmte Builds referenzierte Assemblys ändern, um das Verhalten von Legacybindung und Ressourcen-Designer zu unterstützen. Diese Änderungen umfassen das Hinzufügen fehlender abstrakter Schnittstellenmethoden, die Aktualisierung von Verweisen auf Legacy-Ressourcendesigner und das Einfügen von GC.KeepAlive()-Aufrufen in ältere Xamarin.Android-Bindungsassemblys. Getrimmte Builds mit der Typszuordnung trimmable führen diese Kompatibilitätskorrekturen nicht aus, und das Festlegen dieser Eigenschaft auf True aktiviert sie für getrimmte Builds nicht.

Der Standardwert ist False, wenn trimmable$(AndroidTypeMapImplementation) ist, andernfalls True.

AndroidEnableMarshalMethods

Eine bool-Eigenschaft, die bestimmt, ob LLVM-Marshallmethoden aktiviert sind. LLVM Marshal-Methoden sind eine App-Startoptimierung, die systemeigene Einstiegspunkte für die Registrierung von Java-Methoden native verwendet.

Der Standardwert dieser Eigenschaft ist False.

Diese Eigenschaft kann nicht auf true festgelegt werden, wenn $(PublishReadyToRun)true ist. Wenn beide Eigenschaften auf true festgelegt werden, wird der Buildvorgang mit XA1049 beendet.

In .NET 8 hinzugefügt.

AndroidEnableMultiDex

Eine boolesche Eigenschaft, die bestimmt, ob Multi-Dex-Unterstützung in der endgültigen .apk-Datei verwendet wird.

Standardmäßig ist diese Eigenschaft False.

AndroidEnableProfiler

Bei Mono-Anwendungen ist dies ein Synonym für die $(EnableDiagnostics) Eigenschaft. Wenn es true ist, wird die Mono-Diagnosekomponente, libmono-component-diagnostics_tracing.so, in der Anwendung mit eingeschlossen.

Für CoreCLR-Anwendungen in .NET 11 und höher aktiviert diese Eigenschaft die CoreCLR-Diagnoseport-Konfiguration, die von Tools wie dotnet-trace und dotnet-gcdump verwendet wird; sie fügt keine Mono-Diagnosekomponente hinzu. NativeAOT ist eine separate Laufzeit, die durch $(PublishAot) ausgewählt wird, und diese Eigenschaft dokumentiert nur das unterstützte Verhalten bei der Android-Paketierung und -Konfiguration.

Standardmäßig ist diese Eigenschaft False.

AndroidEnableObsoleteOverrideInheritance

Eine boolesche Eigenschaft, die bestimmt, ob gebundene Methoden [Obsolete] Attribute automatisch von Methoden erben, die sie überschreiben.

Unterstützung für diese Eigenschaft wurde in .NET 8 hinzugefügt.

Standardmäßig ist diese Eigenschaft True.

AndroidEnablePreloadAssemblies

Eine boolesche Eigenschaft, die steuert, ob alle verwalteten Assemblys, die im Anwendungspaket gebündelt sind, während des Prozessstarts geladen werden oder nicht.

Bei Festlegung auf True werden alle im Anwendungspaket gebündelten Assemblys während des Prozessstarts geladen, bevor Anwendungscode aufgerufen wird.

Bei Festlegung auf False werden Assemblys nur bei Bedarf geladen. Das Laden von Assemblys nach Bedarf ermöglicht es Anwendungen, schneller zu starten und ist auch mit der Desktop-.NET-Semantik konsistent. Um die Zeitersparnis anzuzeigen, legen Sie die Systemeigenschaft debug.mono.log so fest, dass sie timing einschließt, und suchen Sie nach der Meldung Finished loading assemblies: preloaded in adb logcat.

Anwendungen oder Bibliotheken, die Abhängigkeitseinfügung verwenden, erfordern möglicherweise, dass diese Eigenschaft sein True muss, wenn sie wiederum erfordern, dass AppDomain.CurrentDomain.GetAssemblies() alle Assemblys innerhalb des Anwendungsbundles zurückgegeben werden, auch wenn die Assembly sonst nicht erforderlich wäre.

Dieser Wert ist standardmäßig "False".

AndroidEnableProfiledAot

Eine boolesche Eigenschaft, die bestimmt, ob Mono-AOT-Profile während der Ahead-of-Time-Kompilierung verwendet werden. Dies gilt für unterstützte .NET-10- und frühere Projekte, die Mono verwenden und weder ReadyToRun, MIBC-Profile, dynamische PGO noch NativeAOT konfigurieren.

Die Profile sind in der Elementgruppe @(AndroidAotProfile) Elementgruppe. Wenn profilgesteuertes AOT aktiviert ist, wird das Standardprofil einbezogen, sofern $(AndroidUseDefaultAotProfile)false ist. Benutzerdefinierte Profile können mit @(AndroidAotProfile)hinzugefügt werden.

Wenn $(RunAOTCompilation) auf true festgelegt ist und diese Eigenschaft nicht festgelegt ist, wird standardmäßig true verwendet. Daher ist für entsprechende Release-Builds, die Mono verwenden, standardmäßig true festgelegt.

AndroidEnableRestrictToAttributes

Eine Enum-Eigenschaft mit gültigen Werten von obsolete und disable.

Bei Festlegung auf obsolete, werden Typen und Member, die mit der Java-Anmerkung androidx.annotation.RestrictTogekennzeichnet sind oder sich in nicht exportierten Java-Paketen befinden, mit einem [Obsolete] Attribut in der C#-Bindung gekennzeichnet.

Dieses [Obsolete] Attribut enthält eine beschreibende Meldung, in der erläutert wird, dass der Java-Paketbesitzer die API als "intern" betrachtet und warnt gegen die Verwendung.

Dieses Attribut verfügt auch über einen benutzerdefinierten Warnungscode XAOBS001 , sodass es unabhängig von der "normalen" veralteten API unterdrückt werden kann.

Bei Festlegung auf disable" wird die API ohne zusätzliche Attribute als normal generiert. (Dies ist das gleiche Verhalten wie vor .NET 8.)

Das Hinzufügen von [Obsolete] Attributen anstelle der automatischen Entfernung der API wurde durchgeführt, um die API-Kompatibilität mit vorhandenen Paketen beizubehalten. Wenn Sie stattdessen Elemente entfernen möchten, die über die @RestrictTo Anmerkung verfügen oder sich in nicht exportierten Java-Paketen befinden, können Sie zusätzlich zu dieser Eigenschaft Transform-Dateien verwenden, um zu verhindern, dass diese Typen gebunden werden:

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

Unterstützung für diese Eigenschaft wurde in .NET 8 hinzugefügt.

Diese Eigenschaft ist auf obsolete standardmäßig festgelegt.

AndroidEnableSGenConcurrent

Eine boolesche Eigenschaft, die bestimmt, ob der gleichzeitige Garbage Collector von Mono verwendet wird.

Standardmäßig ist diese Eigenschaft True. Dies gilt für unterstützte .NET-10- und frühere Projekte, die Mono verwenden, und konfiguriert nicht die Garbage Collector von CoreCLR oder NativeAOT.

AndroidErrorOnCustomJavaObject

Eine boolesche Eigenschaft, die bestimmt, ob Typen implementieren können, Android.Runtime.IJavaObjectohne auch von Java.Lang.Object oder Java.Lang.Throwable zu erben:

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

    public void Dispose()
    {
    }
}

Wenn diese Eigenschaft TRUE ist, generieren solche Typen einen XA4212-Fehler. Andernfalls wird eine XA4212-Warnung generiert.

Standardmäßig ist diese Eigenschaft True.

AndroidExplicitCrunch

Diese Eigenschaft wird nicht mehr unterstützt.

AndroidExtraAotOptions

Eine Zeichenfolgeneigenschaft, die es unterstützten Projekten mit .NET 10 und früher, die Mono verwenden, ermöglicht, eigenständige, durch Semikolons getrennte Argumente direkt an den Prozess des Mono-AOT-Compilers zu übergeben. Die Eigenschaft wird nur verwendet, wenn die Mono AOT-Kompilierung aktiviert ist.

Diese Eigenschaft sollte im Allgemeinen leer bleiben, bietet aber in bestimmten speziellen Szenarios möglicherweise eine nützliche Flexibilität.

Die $(AndroidExtraAotOptions) Eigenschaft unterscheidet sich von der verknüpften $(AndroidAotAdditionalArguments) Eigenschaft; $(AndroidExtraAotOptions) übergibt eigenständige Prozessargumente, während $(AndroidAotAdditionalArguments) sie in der durch Trennzeichen getrennten --aot=... Option enthalten sind.

Android-Schnellbereitstellungstyp

Diese Eigenschaft wurde in .NET 9 entfernt und hat keine Auswirkung.

AndroidFragmentType

Gibt den standardmäßig vollqualifizierten Typ an, der für alle <fragment>-Layoutelemente bei der Generierung des Layoutbindungscodes verwendet wird. Der Standardwert ist der Standardmäßige Android-Typ Android.App.Fragment .

AndroidGenerateJniMarshalMethods

Dieses experimentelle Feature wurde in .NET 11 entfernt. Das Festlegen dieser Eigenschaft hat keine Auswirkung.

AndroidGenerateJniMarshalMethodsAdditionalArguments

Dieses experimentelle Feature wurde in .NET 11 entfernt. Das Festlegen dieser Eigenschaft hat keine Auswirkung.

AndroidGenerateLayoutBindings

Ermöglicht bei der Festlegung auf true die Generierung von Layout-CodeBehind oder deaktiviert dies bei Festlegung auf false vollständig.

Der Standardwert ist false.

AndroidGenerateResourceDesigner

Der Standardwert ist true. Bei Festlegung auf false, deaktiviert die Generierung von Resource.designer.cs.

AndroidHttpClientHandlerType

Hinweis

Diese Eigenschaft wird in .NET 11 nicht unterstützt. Entfernen Sie sie aus Ihrer Projektdatei und verwenden Sie stattdessen UseNativeHttpHandler.

AndroidIgnoreAllJniPreload

Ein boolescher Wert, der, wenn auf true gesetzt, alle nativen JNI-Bibliotheken vom Vorabladen beim Anwendungsstart ausnimmt. Standardmäßig werden alle derartigen Bibliotheken frühzeitig während des Anwendungsstarts von der Laufzeit geladen, um ihre ordnungsgemäße Initialisierung sicherzustellen. In einigen Fällen ist dies jedoch möglicherweise nicht das gewünschte Verhalten, und diese Eigenschaft ermöglicht es Ihnen, es effektiv zu deaktivieren.

Einige Frameworkbibliotheken, die beim Starten der Anwendung geladen werden müssen, sind von dieser Eigenschaft nicht betroffen.

Siehe auch @(AndroidNativeLibraryNoJniPreload) für eine differenziertere Methode, Bibliotheken vom Preload-Mechanismus auszunehmen.

AndroidIncludeWrapSh

Ein boolescher Wert, der angibt, ob das Android-Wrapper-Skript (wrap.sh) in das APK verpackt werden soll. Der Standardwert ist false, da das Wrapperskript die Art und Weise beeinflussen kann, wie die Anwendung startet und arbeitet. Das Skript sollte nur bei Bedarf eingebunden werden, beispielsweise beim Debuggen oder bei einer Änderung des Anwendungsstart- oder Laufzeitverhaltens.

Das Hinzufügen des Skripts zum Projekt erfolgt mit der @(AndroidNativeLibrary)-Buildvorgang, da es sich im selben Verzeichnis befindet wie die architekturspezifischen nativen Bibliotheken, und muss wrap.sh heißen.

Die einfachste Möglichkeit, den Pfad zum wrap.sh-Skript anzugeben, besteht darin, es in einem Verzeichnis zu platzieren, das nach der Zielarchitektur benannt ist. Dieser Ansatz funktioniert, wenn Sie pro Architektur über nur eine Datei wrap.sh verfügen:

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

Wenn Ihr Projekt jedoch mehr als ein wrap.sh pro Architektur für verschiedene Zwecke benötigt, funktioniert dieser Ansatz nicht. In solchen Fällen kann stattdessen der Name mit den Link-Metadaten für AndroidNativeLibrary angegeben werden:

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

Wenn die Link-Metadaten verwendet werden, muss es sich bei dem im zugehörigen Wert angegebenen Pfad um einen gültigen nativen architekturspezifischen Bibliothekspfad relativ zum APK-Stammverzeichnis handeln. Das Format des Pfads ist lib\ARCH\wrap.sh, wobei ARCH einer der folgenden Werte sein kann:

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

AndroidIncludeAssetPacksInPackage

Diese Eigenschaft steuert, ob ein Asset Packs-Build automatisch in der endgültigen .aab-Datei enthalten ist. Es wird standardmäßig auf true zurückgesetzt.

In bestimmten Fällen möchte der Benutzer möglicherweise eine Zwischenversion freigeben. In diesen Fällen muss der Benutzer das Asset Pack nicht aktualisieren. Insbesondere, wenn sich der Inhalt des Bestandspakets nicht geändert hat. Mit dieser Eigenschaft kann der Benutzer die Ressourcenpakete überspringen, wenn sie nicht erforderlich sind.

Hinzugefügt in .NET 9

AndroidInstallJavaDependencies

Der Standardwert ist true für Befehlszeilenbuilds. Bei Festlegung auf true aktiviert dies die Installation des Java-Entwicklungskits beim Ausführen des <InstallAndroidDependencies/>-Ziels.

Unterstützung für diese Eigenschaft wurde in .NET 9 hinzugefügt.

AndroidInstrumentation

Eine Zeichenfolgen-Eigenschaft, die den Klassennamen des Android-Instrumentation-Runners angibt, der beim Starten der Anwendung über dotnet run verwendet werden soll.

Wenn diese Eigenschaft nicht festgelegt ist, ermittelt dotnet run anhand der in der Zwischenausgabe generierten AndroidManifest.xml, was gestartet werden soll:

  • Wenn $(AndroidUseInstrumentation)true ist, wird das erste <instrumentation/>-Element verwendet.
  • Andernfalls wird das startbare <activity/> Element bevorzugt, und das erste <instrumentation/> Element wird verwendet, wenn die App keine startfähige Aktivität deklariert. Dies ermöglicht, eine App zu dotnet run, deren einziger Einstiegspunkt eine Android.App.Instrumentation-Unterklasse ist, z. B. ein BenchmarkDotNet-Host.

Wenn die App keines deklariert, schlägt der Build mit XA1043 fehl. Wenn $(AndroidUseInstrumentation)<instrumentation/> ist, die App aber kein deklariert, schlägt der Build mit true fehl.

Wenn eine Instrumentierung gestartet wird, führt dotnet runadb shell am instrument -w -r aus und wird mit einem Exit-Code ungleich null beendet, wenn die Instrumentierung abstürzt oder Instrumentation.Finish() mit Result.Canceled aufruft. Wenn $(WaitForExit) auf false gesetzt wird, wird -w verworfen, sodass dotnet run zurückgegeben wird, sobald die Instrumentierung gestartet wird und es werden keine Ergebnisse gemeldet.

Alle Argumente nach -- werden als am instrument-Extras an die Instrumentierung weitergeleitet. Argumente des Formulars KEY=VALUE werden -e KEY VALUE, und alle verbleibenden Argumente werden zu einem einzigen -e args "..." zusätzlichen Argument verknüpft:

dotnet run -- --filter *MyBenchmark*

wird als arguments.GetString("args") an Instrumentation.OnCreate(Bundle?) übermittelt.

In .NET 11 eingeführt.

AndroidJavadocVerbosity

Gibt an, wie ausführlich die C# XML-Dokumentationskommentare beim Importieren der Javadoc-Dokumentation in Bindungsprojekten sein sollen.

Erfordert die Verwendung der @(JavaSourceJar)-Buildvorgang

Die $(AndroidJavadocVerbosity) Eigenschaft ist enumerationsähnlich, mit möglichen Werten von full oder intellisense:

Der Standardwert ist intellisense.

AndroidKeyStore

Ein boolescher Wert, der angibt, ob benutzerdefinierte Signaturinformationen verwendet werden sollen. Der Standardwert ist False. Dies bedeutet, dass der Debugsignatur-Standardschlüssel verwendet wird, um Pakete zu signieren.

AndroidLaunchActivity

Die Android-Aktivität zum Starten.

AndroidLinkMode

Gibt an, welcher Typ von Verknüpfung für Assemblys ausgeführt werden soll, die im Android-Paket enthalten sind. Wird nur in Android-Anwendungsprojekten verwendet. Der Standardwert ist SdkOnly. Gültige Werte sind:

  • Keiner: Es wird keine Verknüpfung versucht.

  • SdkOnly: Verknüpfung wird nur für die Basisklassenbibliotheken ausgeführt, nicht für die Assemblys des Benutzers.

  • Full: Verknüpfung wird für die Basisklassenbibliotheken und die Assemblys des Benutzers ausgeführt.

    Hinweis

    Die Verwendung des AndroidLinkMode-Werts Full führt häufig zu fehlerhaften Apps, insbesondere beim Einsatz von Reflektion. Vermeiden Sie es, es sei denn, Sie wissen wirklich, was Sie tun.

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

Wenn true, verknüpft das Buildsystem die geschachtelten Typen der Resource.Designer.cs-Resource-Klasse in allen Assemblys. Der IL-Code, der diese Typen verwendet, wird aktualisiert, um die Werte direkt zu verwenden, anstatt auf Felder zuzugreifen.

Das Ausgliedern der geschachtelten Typen kann die APK-Größe in einem geringen Maß verringern und zur Verbesserung der Startleistung beitragen. Nur "Release"-Builds sind verlinkt.

Experimentell. Nur für das Arbeiten mit Code konzipiert, wie beispielsweise

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

Alle anderen Szenarien (z. B. Spiegelung) werden nicht unterstützt.

AndroidLinkSkip

Gibt eine durch Semikolons (;) getrennte Liste von Assemblynamen (ohne Dateierweiterungen) von Assemblys an, die nicht verknüpft werden sollen. Wird nur in Android-Anwendungsprojekten verwendet.

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

Eine Eigenschaft im Enumerationsstil mit gültigen Werten von proguard oder r8. Gibt an, welcher Code-Shrinker für Java-Code verwendet wird. Der Standardwert ist eine leere Zeichenfolge oder proguard, wenn $(AndroidEnableProguard) gleich True ist. Lesen Sie unsere Dokumentation zu D8 und R8.

AndroidLintEnabled

Eine bool-Eigenschaft, mit der der Entwickler das Android-Tool lint als Teil des Paketprozesses ausführen kann.

Wenn $(AndroidLintEnabled) den Wert TRUE hat, werden die folgenden Eigenschaften verwendet:

Die folgenden Buildaktionen können ebenfalls verwendet werden:

Weitere Details zu den Android--Werkzeugen finden Sie in der lint.

AndroidLintEnabledIssues

Eine Zeichenfolgeneigenschaft, die eine durch Kommas getrennte Liste der zu aktivierenden Lintprobleme ist.

Wird nur verwendet, wenn $(AndroidLintEnabled)=True.

AndroidLintDisabledIssues

Eine Zeichenfolge, die eine kommagetrennte Liste von Lintproblemen darstellt, die deaktiviert werden sollen.

Wird nur verwendet, wenn $(AndroidLintEnabled)=True.

AndroidLintCheckIssues

Eine Zeichenfolgeneigenschaft, die eine durch Kommas getrennte Liste der zu überprüfenden Lintprobleme ist.

Wird nur verwendet, wenn $(AndroidLintEnabled)=True.

Hinweis: Es werden nur diese Probleme überprüft.

AndroidManagedSymbols

Eine boolesche Eigenschaft, die steuert, ob Sequenzpunkte generiert werden, sodass Informationen zu Dateinamen und Zeilennummern aus Release-Stack-Traces extrahiert werden können.

AndroidManifest

Gibt einen Dateinamen an, der als Vorlage für die Datei AndroidManifest.xml der App verwendet werden soll. Während des Buildprozesses werden alle anderen notwendigen Werte zusammengeführt, um die eigentliche Datei AndroidManifest.xml zu generieren. $(AndroidManifest) muss den Paketnamen im /manifest/@package-Attribut enthalten.

AndroidManifestMerger

Gibt die Implementierung für die Zusammenführung von AndroidManifest.xml-Dateien an. Hierbei handelt es sich um eine Enumerationseigenschaft, bei der legacy die ursprüngliche C#-Implementierung und manifestmerger.jar die Java-Implementierung von Google auswählt.

Der derzeitige Standardwert ist manifestmerger.jar. Wenn Sie die alte Version verwenden möchten, fügen Sie Ihrem csproj Folgendes hinzu:

<AndroidManifestMerger>legacy</AndroidManifestMerger>

Der Merger von Google ermöglicht die Unterstützung für xmlns:tools="http://schemas.android.com/tools" (siehe Beschreibung in der Android-Dokumentation).

AndroidManifestMergerExtraArgs

Eine Zeichenfolgeneigenschaft, um Argumente für das Android-Dokumentationstool bereitzustellen.

Wenn Sie eine detaillierte Ausgabe des Tools benötigen, können Sie Folgendes zu der .csprojDatei hinzufügen.

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

Eine Eigenschaft im Enumerationsstil mit gültigen Werten von Xamarin oder GoogleV2. Dies steuert, welches Repository verwendet wird von InstallAndroidDependencies Ziel ist es, festzustellen, welche Android-Pakete und Paketversionen verfügbar sind und installiert werden können.

Xamarin ist das Repository für Genehmigte Liste (empfohlen) im Visual Studio SDK Manager.

GoogleV2 ist das Repository für Vollständige Liste (nicht unterstützt) im Visual Studio SDK Manager.

Wenn $(AndroidManifestType) nicht festgelegt ist, wird Xamarin verwendet.

AndroidManifestSource

Eine Zeichenfolgeneigenschaft, die einen absoluten URI oder den Pfad zu einer vorhandenen lokalen Datei für das Repositorymanifest angibt, verwendet vom InstallAndroidDependencies Ziel. Wenn diese Eigenschaft nicht festgelegt ist, wird das standardmäßig ausgewählte $(AndroidManifestType) Repositorymanifest verwendet.

Zum Beispiel:

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

AndroidManifestPlaceholders

Eine durch Semikolons getrennte Liste der Schlüssel-Wert-Ersatzpaare für AndroidManifest.xml, wobei jedes Paar das Format key=value aufweist.

Ein Eigenschaftswert von assemblyName=$(AssemblyName) definiert beispielsweise einen ${assemblyName}-Platzhalter, der dann in AndroidManifest.xml angezeigt werden kann.

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

Dies bietet eine Möglichkeit, Variablen aus dem Buildprozess in die Datei AndroidManifest.xml einzufügen.

AndroidMultiDexClassListExtraArgs

Eine Zeichenfolgeneigenschaft, mit der die Entwickler Argumente an com.android.multidex.MainDexListBuilder beim Generieren der multidex.keep Datei übergeben können.

Ein spezieller Fall ist, wenn bei der dx-Kompilierung der folgende Fehler angezeigt wird.

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

Wenn Sie diesen Fehler erhalten, können Sie in der .csproj-Datei Folgendes hinzufügen.

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

wodurch der dx Schritt erfolgreich ausgeführt werden kann.

AndroidNdkDirectory

Die $(AndroidNdkDirectory) Eigenschaft gibt ein benutzerdefiniertes Android NDK-Installationsverzeichnis an. Der Pfad kann in der Projektdatei oder in der Befehlszeile festgelegt werden:

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

Wenn diese Eigenschaft nicht festgelegt ist, sucht .NET für Android den NDK aus der konfigurierten Android-Entwicklungsumgebung.

AndroidPackageFormat

Eine Eigenschaft im Enumerationsstil mit gültigen Werten von apk oder aab. Gibt an, ob Sie die Android-Anwendung als APK-Datei oder Android App Bundle verpacken möchten. App-Bundles sind ein neues Format für Release-Builds, die für die Übermittlung auf Google Play vorgesehen sind. Der Standardwert ist apk.

Wenn $(AndroidPackageFormat) auf aabfestgelegt ist, werden andere MSBuild-Eigenschaften festgelegt, die für Android-App-Bundles erforderlich sind:

Diese Eigenschaft wird für .net 6 veraltet sein. Benutzer sollten zum neueren AndroidPackageFormats wechseln.

Android-Paketformate (AndroidPackageFormats)

Eine durch Semikolons getrennte Eigenschaft mit gültigen Werten von apk und aab. Gibt an, ob Sie die Android-Anwendung als APK-Datei oder Android App Bundle verpacken möchten. App-Bundles sind ein neues Format für Release-Builds, die für die Übermittlung auf Google Play vorgesehen sind.

Beim Erstellen eines Release-Builds möchten Sie möglicherweise sowohl ein aab als auch ein apk für die Verteilung in verschiedenen Stores erstellen.

AndroidPackageFormats auf aab;apk zu setzen führt dazu, dass beide generiert werden. Durch die Einstellung von AndroidPackageFormats entweder auf aab oder apk wird nur eine Datei generiert.

Der Standardwert aab;apk gilt nur für Release-Builds. Die Verwendung von apk für das Debuggen ist schneller, aber aab wird auch bei Bedarf mit schneller Bereitstellung unterstützt, z. B. beim Testen von Asset-Paketen.

AndroidPackageNamingPolicy

Eine Eigenschaft im Enumerationsstil zum Angeben der Java-Paketnamen des generierten Java-Quellcodes.

Der einzige unterstützte Wert lautet LowercaseCrc64.

AndroidPrepareForBuildDependsOn

Eine durch Semikolons getrennte Eigenschaft, die zum Erweitern des Android-Buildprozesses verwendet werden kann. MSBuild-Ziele, die dieser Eigenschaft hinzugefügt werden, werden frühzeitig im Build für Anwendungs- und Bibliotheksprojekttypen ausgeführt. Diese Eigenschaft ist standardmäßig leer.

Beispiel:

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

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

AndroidProguardMappingFile

Gibt die ProGuard-Regel -printmapping für r8 an. Dies bedeutet, dass die Datei mapping.txt im Ordner $(OutputPath) erstellt wird. Diese Datei kann dann verwendet werden, wenn Pakete in den Google Play Store hochgeladen werden.

Standardmäßig wird diese Datei bei Verwendung AndroidLinkTool=r8 automatisch erstellt und generiert die folgende Datei $(OutputPath)mapping.txt.

Wenn Sie diese Zuordnungsdatei nicht generieren möchten, können Sie die AndroidCreateProguardMappingFile Eigenschaft verwenden, um die Erstellung zu stoppen. Fügen Sie Folgendes in Ihrem Projekt hinzu:

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

oder -p:AndroidCreateProguardMappingFile=False in der Befehlszeile verwenden.

AndroidD8IgnoreWarnings

Gibt an, dass --map-diagnostics warning info an d8 übergeben werden soll. Der Standardwert ist True, kann aber auf False gesetzt werden, um ein strengeres Verhalten zu erzwingen. Ausführliche Informationen finden Sie im Quellcode von D8 und R8.

In .NET 8 hinzugefügt.

AndroidR8IgnoreWarnings

Gibt die ProGuard-Regel -ignorewarnings für r8 an. Dadurch kann r8 mit der DEX-Kompilierung fortfahren, auch wenn bestimmte Warnungen auftreten. Der Standardwert ist True, kann aber auf False gesetzt werden, um ein strengeres Verhalten zu erzwingen. Weitere Informationen finden Sie im ProGuard-Leitfaden.

Gibt ab .NET 8 --map-diagnostics warning info an. Ausführliche Informationen finden Sie im Quellcode von D8 und R8.

AndroidR8JarPath

Der Pfad zur Datei r8.jar zur Verwendung mit dem r8 dex-Compiler und -Shrinker. Der Standardwert ist ein Pfad zur .NET für Android-Workload-Installation. Weitere Informationen finden Sie in unserer Dokumentation zu D8 und R8.

AndroidR8ObfuscationMode

Eine Aufzählungseigenschaft, die angibt, wie r8 Java-Namen verschleiert, wenn $(AndroidLinkTool) auf r8 festgelegt ist. Unterstützte Werte sind:

  • private-membersbehält Java Klassen- und Schnittstellennamen sowie öffentliche oder geschützte Membernamen bei. Private und paketprivate Mitglieder können obfuskiert werden, und die R8-Optimierung ist aktiviert.
  • disableddeaktiviert die Verschleierung, behält alle Java Namen bei und verwendet die nicht optimierenden Android R8-Standardwerte.

Diese Eigenschaft deaktiviert die R8-Codeverkleinerung nicht.

Diese Eigenschaft wurde in einer .NET 10 Servicing Release eingeführt. Standardmäßig ist in .NET 10 disabled und ab .NET 11 private-members festgelegt.

AndroidResgenExtraArgs

Gibt Befehlszeilenoptionen an, die an den aapt-Befehl übergeben werden sollen, wenn Android-Assets und -Ressourcen verarbeitet werden.

AndroidResgenFile

Gibt den Namen der zu generierenden Ressourcendatei an. Die Standardvorlage legt diese Option auf Resource.designer.cs fest.

AndroidResourceDesignerClassModifier

Gibt den Klassenmodifizierer für die zwischengeschaltete Resource Klasse an, die generiert wird. Gültige Werte sind public und internal.

Standardmäßig lautet dies public.

In .NET 9 hinzugefügt.

AndroidSdkBuildToolsVersion

Das Buildtoolpaket des Android SDK enthält unter anderem die Tools aapt und zipalign. Mehrere verschiedene Versionen des build-tools-Pakets können gleichzeitig installiert werden. Das build-tools-Paket, das für die Paketerstellung ausgewählt wird, wird durch Überprüfen und Verwenden einer „bevorzugten“ build-tools-Version ermittelt, wenn diese vorhanden ist. Wenn die „bevorzugte“ Version nicht vorhanden ist, wird das Paket mit der höchsten installierten build-tools-Version verwendet.

Die MSBuild-Eigenschaft $(AndroidSdkBuildToolsVersion) enthält die bevorzugte build-tools-Version. Das .NET für Android-Buildsystem bietet einen Standardwert in Xamarin.Android.Common.targets, und der Standardwert kann in Ihrer Projektdatei außer Kraft gesetzt werden, um eine alternative Build-Tools-Version auszuwählen, wenn (z. B.) das neueste aapt abstürzt, während bekannt ist, dass eine vorherige aapt-Version funktioniert.

AndroidSigningKeyAlias

Gibt den Alias für den Schlüssel im Keystore an. Dies ist der Wert keytool -alias, der beim Erstellen des Keystore verwendet wird.

AndroidSigningKeyPass

Gibt das Kennwort des Schlüssels in der Keystoredatei an. Dies ist der Wert, der eingegeben wird, wenn keytool die folgende Aufforderung ausgibt: Enter key password for $(AndroidSigningKeyAlias).

Diese Eigenschaft unterstützt auch die Präfixe env: und file:, die verwendet werden können, um eine Umgebungsvariable oder eine Datei anzugeben, die das Kennwort enthält. Diese Optionen bieten eine Möglichkeit, zu verhindern, dass das Kennwort in Buildprotokollen auftaucht.

So wird beispielsweise eine Umgebungsvariable mit dem Namen AndroidSigningPassword verwendet:

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

Um eine Datei unter C:\Users\user1\AndroidSigningPassword.txt zu verwenden:

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

Hinweis

Das Präfix env: wird nicht unterstützt, wenn $(AndroidPackageFormat) auf aab festgelegt ist.

AndroidSigningKeyStore

Gibt den Dateinamen der von keytool erstellten Keystoredatei an. Dies entspricht dem Wert, der der Option keytool -keystore zur Verfügung gestellt wird.

AndroidSigningStorePass

Gibt das Kennwort für $(AndroidSigningKeyStore) an. Dies ist der Wert, der keytool beim Erstellen der Keystoredatei zur Verfügung gestellt wird, wenn die folgende Aufforderung ausgegeben wird: Enter keystore password:.

Diese Eigenschaft unterstützt auch die Präfixe env: und file:, die verwendet werden können, um eine Umgebungsvariable oder eine Datei anzugeben, die das Kennwort enthält. Diese Optionen bieten eine Möglichkeit, zu verhindern, dass das Kennwort in Buildprotokollen auftaucht.

So wird beispielsweise eine Umgebungsvariable mit dem Namen AndroidSigningPassword verwendet:

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

Um eine Datei unter C:\Users\user1\AndroidSigningPassword.txt zu verwenden:

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

Hinweis

Das Präfix env: wird nicht unterstützt, wenn $(AndroidPackageFormat) auf aab festgelegt ist.

AndroidSigningPlatformKey

Gibt die Schlüsseldatei an, die zum Signieren der APK verwendet werden soll. Dies wird nur beim Erstellen von system Anwendungen verwendet.

AndroidSigningPlatformCert

Gibt die Zertifikatdatei an, die zum Signieren der APK verwendet werden soll. Dies wird nur beim Erstellen von system Anwendungen verwendet.

AndroidStripILAfterAOT

Eine Boolesche Eigenschaft, die angibt, ob die Methodenkörper der kompilierten AOT-Methoden entfernt werden.

Der Standardwert ist false, und die Methodentexte der kompilierten AOT-Methoden werden nicht entfernt.

Bei Festlegung auf true wird $(AndroidEnableProfiledAot) standardmäßig auf false festgelegt. Dies bedeutet, dass in unterstützten .NET 8- und .NET 9-Mono-Release-Builds – in denen $(RunAOTCompilation) standardmäßig ist – Mono AOT für true aktiviert ist. Dies kann zu erhöhten App-Größen führen. Dieses Verhalten kann überschrieben werden, indem $(AndroidEnableProfiledAot) explizit auf true in der Projektdatei festgelegt wird.

Experimentelle Unterstützung für diese Eigenschaft wurde in .NET 8 hinzugefügt, entfernt in .NET 10.

AndroidStripNativeLibraries

Eine boolesche Eigenschaft, die dem Verpackungsvorgang vorgibt, Debugsymbole aus den nativen freigegebenen Bibliotheken (.so Dateien) zu entfernen.

Der Standardwert ist false , und die Debugsymbole bleiben bei der Verpackung erhalten.

AndroidSupportedAbis

Diese Eigenschaft wird in .NET 6 und höher nicht mehr unterstützt. Entfernen Sie es, und verwenden Sie $(RuntimeIdentifier) oder $(RuntimeIdentifiers) mit .NET-RIDs anstelle von Android-ABI-Namen.

Die folgende .NET 11-Einstellung enthält beispielsweise alle unterstützten CoreCLR-Architekturen:

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

AndroidTlsProvider

Diese Eigenschaft ist veraltet und sollte nicht verwendet werden.

AndroidTypeMapImplementation

Eine Eigenschaft im Enumerationsstil, die die Implementierung der Typzuordnung festlegt. Gültige Werte sind llvm-ir und trimmable.

Der Standardwert ist trimmable, wenn $(PublishAot)true ist, andernfalls llvm-ir.

AndroidUseApkSigner

Eine Boolean-Eigenschaft, die es dem Entwickler ermöglicht, das apksigner-Tool anstelle von jarsigner zu verwenden.

AndroidUseDefaultAotProfile

Eine Bool-Eigenschaft, mit der der Entwickler die Verwendung des Standardprofils mono AOT unterdrücken kann.

Das Standardprofil wird verwendet, wenn $(AndroidEnableProfiledAot)true, es sei denn, diese Eigenschaft ist auf false festgelegt.

Diese Eigenschaft gilt für unterstützte .NET 10-und-frühere Projekte, die Mono verwenden. Es wählt keine MIBC-Profile oder dynamische PGO für CoreCLR aus.

AndroidUseDesignerAssembly

Eine Bool-Eigenschaft, die steuert, ob das Buildsystem eine _Microsoft.Android.Resource.Designer.dll-Datei anstatt einer Resource.Designer.cs-Datei generiert. Die Vorteile sind kleinere Anwendungen und schnellere Startzeit.

Der Standardwert ist true in .NET 8.

Als Nuget Author wird empfohlen, drei Versionen der Assembly zu versenden, wenn Sie die Abwärtskompatibilität beibehalten möchten. Eine für MonoAndroid, eine für net6.0-android und eine für net8.0-android. Dazu können Sie Xamarin.Legacy.Sdk verwenden. Dies ist nur erforderlich, wenn Ihr NuGet-Bibliotheksprojekt AndroidResource Elemente im Projekt oder über eine Abhängigkeit verwendet.

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

Alternativ können Sie diese Einstellung deaktivieren, da sowohl Classic als auch net7.0-android veraltet sind.

.NET 8-Projekte, die sich entscheiden, diese Einstellung zu deaktivieren, können keine Verweise verarbeiten, die es verwenden. Wenn Sie versuchen, eine Assembly zu verwenden, die dieses Feature in einem Projekt aktiviert hat, das nicht funktioniert, erhalten Sie einen XA1034 Buildfehler.

In .NET 8 hinzugefügt.

AndroidUseInstrumentation

Eine boolesche Eigenschaft, die angibt, dass die Anwendung über das <instrumentation/> Element und nicht über einen <activity/>Test- oder BenchmarkDotNet-Host gestartet wird.

Wenn true, dotnet runAndroidManifest.xml aus dem generierten $(AndroidInstrumentation) ermittelt und mit adb shell am instrument startet, selbst wenn die App ebenfalls eine startbare Aktivität deklariert.

Der Standardwert ist true, wenn true$(EnableMSTestRunner) ist, andernfalls false. Beachten Sie, dass eine App ohne startbare <activity/> unabhängig von dieser Eigenschaft über ihr <instrumentation/> gestartet wird.

In .NET 11 eingeführt.

AndroidUseInterpreter

Eine boolesche Eigenschaft, die bewirkt, dass ein MonoVM .apk den Mono-Interpreter und nicht den normalen JIT enthält. Standardmäßig wird für Debug-Builds, die Mono verwenden, True und andernfalls False verwendet.

Diese Eigenschaft gilt für unterstützte .NET 10-und-frühere Projekte, die Mono verwenden. Es ist keine CoreCLR-Einstellung, und Android verfügt über keinen Dolmetscher in .NET 11 und höher.

Experimentell.

AndroidUseLegacyVersionCode

Eine boolesche Eigenschaft, mit der der Entwickler die VersionCode-Berechnung wieder auf das alte Verhalten vor Xamarin.Android 8.2 zurücksetzen kann. Dies sollte NUR für Entwickler verwendet werden, die an im Google Play Store vorhandenen Anwendungen arbeiten. Es wird dringend empfohlen, die neue $(AndroidVersionCodePattern)-Eigenschaft zu verwenden.

AndroidUseManagedDesignTimeResourceGenerator

Eine boolesche Eigenschaft, die die Entwurfszeitbuilds umschaltet, damit diese anstelle von aapt den Parser für verwaltete Ressourcen verwenden.

AndroidUseNegotiateAuthentication

Eine boolesche Eigenschaft, die die Unterstützung der NTLMv2/Negotiate-Authentifizierung in AndroidMessageHandlerermöglicht. Der Standardwert ist Falsch.

In .NET 7 hinzugefügt.

AndroidUseSharedRuntime

Diese Eigenschaft ist veraltet und sollte nicht verwendet werden.

AndroidVersionCode

Eine MSBuild-Eigenschaft, die als Alternative zu /manifest/@android:versionCode der AndroidManifest.xml Datei verwendet werden kann. Um dieses Feature nutzen zu können, müssen Sie zuerst <GenerateApplicationManifest>true</GenerateApplicationManifest> aktivieren. Dies ist der Standardwert in .NET 6.

Diese Eigenschaft wird ignoriert, wenn $(AndroidCreatePackagePerAbi) und $(AndroidVersionCodePattern) verwendet werden.

@android:versionCode ist ein ganzzahliger Wert, der für jede Google Play-Version erhöht werden muss. Weitere Details zu den Anforderungen für finden Sie in der /manifest/@android:versionCode.

AndroidVersionCodePattern

Eine Zeichenfolgeneigenschaft, die es Entwicklern ermöglicht, den versionCode im Manifest anzupassen. Informationen zur Entscheidung für einen versionCodefinden Sie unter Erstellen des Versionscodes für das APK.

Einige Beispiele: Wenn abiarmeabi ist und versionCode im Manifest 123 ist, generiert {abi}{versionCode} einen VersionCode von 1123, wenn $(AndroidCreatePackagePerAbi) wahr ist, andernfalls einen Wert von 123. Wenn abix86_64 ist und versionCode im Manifest 44 ist. Dies generiert 544, wenn $(AndroidCreatePackagePerAbi) TRUE ist, andernfalls wird ein Wert von 44 generiert.

Wenn wir eine Formatzeichenfolge für Auffüllung links {abi}{versionCode:0000} einschließen, wird 50044 generiert, weil wir versionCode links mit 0 auffüllen. Alternativ können Sie die Dezimalauffüllung verwenden, wie z.B. {abi}{versionCode:D4} dies entspricht dem vorherigen Beispiel.

Nur die Füllungsformatzeichenfolgen „0“ und „Dx“ werden unterstützt, da der Wert eine ganze Zahl sein MUSS.

Vordefinierte Schlüsselelemente

  • abi – fügt die Ziel-ABI für die App ein

    • 2 – armeabi-v7a
    • 3 – x86
    • 4 – arm64-v8a
    • 5 – x86_64
  • minSDK – Fügt den minimal unterstützten SDK-Wert aus dem AndroidManifest.xml oder 11 ein, wenn keiner definiert ist.

  • versionCode – Verwendet den Versionscode direkt von Properties\AndroidManifest.xml.

Sie können mithilfe der $(AndroidVersionCodeProperties)-Eigenschaft (definiert als Nächstes) benutzerdefinierte Elemente definieren.

Standardmäßig ist der Wert auf {abi}{versionCode:D6} festgelegt. Wenn Sie das vorherige Verhalten beibehalten möchten, können Sie die Standardeinstellung überschreiben, indem Sie die $(AndroidUseLegacyVersionCode)-Eigenschaft auf true festlegen.

AndroidVersionCodeProperties

Eine Zeichenfolgeneigenschaft, mit der der Entwickler benutzerdefinierte Elemente definieren kann, die mit der $(AndroidVersionCodePattern) verwendet werden. Diese liegen in Form eines key=value-Paares vor. Alle Elemente im value sollten ganzzahlige Werte sein. Beispiel: screen=23;target=$(_AndroidApiLevel) Wie Sie sehen können, können Sie vorhandene oder benutzerdefinierte MSBuild-Eigenschaften in der Zeichenfolge verwenden.

ApplicationId

Eine MSBuild-Eigenschaft, die als Alternative zu /manifest/@package der AndroidManifest.xml Datei verwendet werden kann. Um dieses Feature nutzen zu können, müssen Sie zuerst <GenerateApplicationManifest>true</GenerateApplicationManifest> aktivieren. Dies ist der Standardwert in .NET 6.

Weitere Details zu den Anforderungen für finden Sie in der /manifest/@package.

Anwendungstitel

Eine MSBuild-Eigenschaft, die als Alternative zu /manifest/application/@android:label der AndroidManifest.xml Datei verwendet werden kann. Um dieses Feature nutzen zu können, müssen Sie zuerst <GenerateApplicationManifest>true</GenerateApplicationManifest> aktivieren. Dies ist der Standardwert in .NET 6.

Weitere Details zu den Anforderungen für finden Sie in der /manifest/application/@android:label.

Anwendungsversion

Eine MSBuild-Eigenschaft, die als Alternative zu /manifest/@android:versionName der AndroidManifest.xml Datei verwendet werden kann. Um dieses Feature nutzen zu können, müssen Sie zuerst <GenerateApplicationManifest>true</GenerateApplicationManifest> aktivieren. Dies ist der Standardwert in .NET 6.

Weitere Details zu den Anforderungen für finden Sie in der /manifest/@android:versionName.

AotAssemblies

Eine boolesche Eigenschaft, die festlegt, ob Assemblys vorzeitig in nativen Code von Mono kompiliert und in Anwendungen eingefügt werden. Wenn sie nicht angegeben ist, ergibt sich der effektive Wert wie folgt $(RunAOTCompilation): False für Debug-Builds und True für Release-Builds, die Mono auf unterstützten .NET-10- und früheren Zielframeworks verwenden.

Veraltet in .NET 7. Für unterstützte .NET 10-und-frühere Projekte, die Mono verwenden, migrieren Sie stattdessen zur $(RunAOTCompilation) MSBuild-Eigenschaft. Die Angabe von $(AotAssemblies), einschließlich des Festlegens auf false, gibt die Warnung XA1029 aus. Wird der Wert für CoreCLR oder NativeAOT auf true gesetzt, führt dies zu dem Build beendenden Fehler XA1044, wenn $(RunAOTCompilation) nicht festgelegt ist (oder anderweitig zu true ausgewertet wird), da die Standardlogik $(AotAssemblies) an $(RunAOTCompilation) weiterleitet.

Entfernen Sie bei .NET 11 CoreCLR-Projekten $(AotAssemblies), ohne $(RunAOTCompilation) hinzuzufügen. CoreCLR verwendet nicht die Mono AOT-Pipeline.

AProfUtilExtraOptions

Zusätzliche Optionen, die bei der Verwendung der älteren Mono-AOT-Profiling-Ziele in unterstützten .NET 10- und früheren Projekten an aprofutil übergeben werden können.

BeforeBuildAndroidAssetPacks

MSBuild-Ziele, die in dieser Eigenschaft aufgeführt sind, werden direkt ausgeführt, bevor die AssetPack Elemente erstellt werden.

Hinzugefügt in .NET 9

BeforeGenerateAndroidManifest

Die in dieser Eigenschaft aufgelisteten MSBuild-Ziele werden direkt vor _GenerateJavaStubs ausgeführt.

Konfiguration

Gibt die zu verwendende Buildkonfiguration an, z. B. „Debug“ oder „Release“. Die Configuration-Eigenschaft wird verwendet, um Standardwerte für andere Eigenschaften zu ermitteln, die das Zielverhalten bestimmen. In der IDE können ggf. zusätzliche Konfigurationen erstellt werden.

Standardmäßig führt die Debug-Konfiguration dazu, dass Install und SignAndroidPackage zielt darauf ab, ein kleineres Android-Paket zu erstellen, das das Vorhandensein anderer Dateien und Pakete erfordert, um zu arbeiten.

Die Standardkonfiguration Release führt zu der Install und SignAndroidPackagezielt darauf ab, ein Android-Paket zu erstellen, das eigenständig ist und verwendet werden kann, ohne andere Pakete oder Dateien zu installieren.

DebugSymbols

Ein boolescher Wert, der bestimmt, ob das Android-Paket debuggierbar ist, in Kombination mit der $(DebugType) Eigenschaft. Ein Paket, das debuggt werden kann, enthält Debugsymbole, legt das //application/@android:debuggable-Attribut auf true fest und fügt automatisch die INTERNET-Berechtigung hinzu, sodass ein Debugger an den Prozess angefügt werden kann. Eine Anwendung kann debuggt werden, wenn DebugSymbols den Wert True aufweist undDebugType entweder die leere Zeichenfolge oder Full ist.

Debug-Typ

Gibt den Typ von Debugsymbolen an, die als Teil des Builds generiert werden sollen. Dies wirkt sich ebenfalls darauf aus, ob die Anwendung debuggt werden kann. Mögliche Werte sind:

  • Full: Vollständige Symbole werden generiert. Wenn die MSBuild-Eigenschaft DebugSymbols Wenn die MSBuild-Eigenschaft ebenfalls True ist, kann das Anwendungspaket debuggt werden.

  • PdbOnly: Es werden PDB-Symbole generiert. Das Anwendungspaket kann nicht debuggt werden.

Wenn DebugType nicht festgelegt wurde oder die leere Zeichenfolge ist, steuert die DebugSymbols-Eigenschaft, ob die Anwendung debuggt werden kann.

Gerät

Gibt an, auf welches Android-Gerät oder welchen Emulator bei der Verwendung von dotnet run --device <Device> oder MSBuild-Zielen ausgerichtet werden soll, die mit Geräten interagieren (z. B. Run, Install oder Uninstall).

Der Wert muss die vollständige Seriennummer oder der Gerätename sein, wie er von adb devices zurückgegeben wird. Wenn das Gerät z. B. serial ist emulator-5554, müssen Sie verwenden -p:Device=emulator-5554.

Bei Festlegung wird diese Eigenschaft verwendet, um die AdbTarget Eigenschaft mit dem Wert -s "<Device>"zu initialisieren.

Weitere Informationen zur Geräteauswahl finden Sie in der .NET SDK-Geräteauswahlspezifikation.

DiagnosticAddress

Ein Wert, der von dotnet-dsrouter bereitgestellt wird, wie zum Beispiel 127.0.0.1, die IP-Adresskomponente von $(DiagnosticConfiguration) oder DOTNET_DiagnosticPorts.

Wenn diese Eigenschaft nicht leer ist und $(AndroidEnableProfiler) nicht explizit auf false festgelegt ist, aktiviert sie implizit die Android-Diagnose. Für CoreCLR bleibt der resultierende TCP-Endpunkt normalerweise an die Loopback-Schnittstelle gebunden und wird von dotnet-dsrouter verwendet. Verwenden Sie für einen Android-Emulator 10.0.2.2, um den Entwicklungsrechner zu erreichen; für ein physisches Gerät verwenden Sie 127.0.0.1 mit durch dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Android aktivierter Android-Portweiterleitung.

Wird standardmäßig auf 127.0.0.1 festgelegt.

Diagnostik-Konfiguration

Ein von dotnet-dsrouter für DOTNET_DiagnosticPorts bereitgestellter Wert, wie zum Beispiel:

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

Wenn die Diagnose ohne explizite Konfiguration aktiviert ist, sind die abgeleiteten Standardwerte Adresse127.0.0.1, Port DiagnosticSuspend=false9000und DiagnosticListenMode=connect.

Beachten Sie, dass das ,-Zeichen mit %2c maskiert werden muss, wenn es in der Befehlszeile an dotnet build übergeben wird.

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

Dadurch wird die DOTNET_DiagnosticPorts Umgebungsvariable automatisch festgelegt, die in der Anwendung verpackt ist. Im connect-Modus verbindet sich die Android-Laufzeitumgebung mit dem konfigurierten TCP-Endpunkt, und dotnet-dsrouter leitet diese Verbindung an das lokale Diagnosetool weiter. Der Endpunkt ist nicht authentifiziert und unverschlüsselt, halten Sie ihn also auf einer lokalen Entwicklungsschnittstelle.

Wenn Sie diese Eigenschaft oder eine der unten aufgeführten Komponenteneigenschaften festlegen, werden Android-Diagnosen implizit aktiviert, wenn $(AndroidEnableProfiler) nicht explizit auf false festgelegt ist.

DiagnosticListenMode

Ein von dotnet-dsrouter angegebener Wert, wie z. B. connect, die Überwachungsmoduskomponente von $(DiagnosticConfiguration) oder DOTNET_DiagnosticPorts.

Wenn diese Eigenschaft nicht leer ist und $(AndroidEnableProfiler) nicht explizit auf false festgelegt ist, aktiviert sie implizit die Android-Diagnose.

Wird standardmäßig auf connect festgelegt.

DiagnosticPort

Ein von dotnet-dsrouter bereitgestellter Wert, wie 9000, der Portkomponente von $(DiagnosticConfiguration) oder DOTNET_DiagnosticPorts.

Wenn diese Eigenschaft nicht leer ist und $(AndroidEnableProfiler) nicht explizit auf false festgelegt ist, aktiviert sie implizit die Android-Diagnose.

Wird standardmäßig auf 9000 festgelegt.

DiagnosticSuspend

Ein boolescher Wert, bereitgestellt von dotnet-dsrouter, wie true/suspend oder false/nosuspend, eine Komponente von $(DiagnosticConfiguration) oder DOTNET_DiagnosticPorts.

Wenn diese Eigenschaft nicht leer ist und $(AndroidEnableProfiler) nicht explizit auf false festgelegt ist, aktiviert sie implizit die Android-Diagnose.

Wird standardmäßig auf false festgelegt.

EmbedAssembliesIntoApk

Eine boolesche Eigenschaft, die bestimmt, ob die Assemblys der App in das Anwendungspaket eingebettet werden sollen.

Diese Eigenschaft ist umgekehrt von $(AndroidEnableFastDeployment). Neue Projekte sollten $(AndroidEnableFastDeployment) zur Steuerung von Fast Deployment verwenden. Wenn beide Eigenschaften festgelegt sind, $(EmbedAssembliesIntoApk) hat dies Vorrang.

Diese Eigenschaft sollte True für Releasebuilds und False für Debugbuilds sein. Sie muss ggf. True in Debugbuilds sein, wenn die schnelle Bereitstellung das Zielgerät nicht unterstützt.

EnableCrashReport

Eine boolesche Eigenschaft, die bei Verwendung der CoreCLR- oder NativeAOT-Laufzeit die Umgebungsvariable DOTNET_EnableCrashReport auf 1 festlegt. Dies ermöglicht die Erstellung von Absturzberichten beim Starten der Anwendung.

Diese Eigenschaft ist standardmäßig False und wird ignoriert, wenn $(UseMonoRuntime)True ist.

Diagnose aktivieren

Eine Android SDK/MSBuild-Eigenschaft, die die Diagnose für die ausgewählte Laufzeit ermöglicht. Es ist ein Synonym für $(AndroidEnableProfiler) bei Mono-Anwendungen. Für CoreCLR aktiviert es die Konfiguration des Diagnoseports, die von dotnet-trace und dotnet-gcdump verwendet wird.

$(EnableDiagnostics) ist nicht mit der CoreCLR-Laufzeitumgebungsvariable DOTNET_EnableDiagnosticsidentisch. Ersteres wird von den Android-SDK-/MSBuild-Zielen ausgewertet; letzteres wird von der Laufzeit gelesen, wenn es als Umgebungsvariable bereitgestellt wird.

Standardmäßig ist diese Eigenschaft False.

Aktivieren Sie LLVM

Eine boolesche Eigenschaft, die bestimmt, ob LLVM vom Mono-AOT-Compiler bei der Ahead-of-Time-Kompilierung von Assemblies in nativen Code verwendet wird.

Zum Erstellen eines Projekts, für das diese Eigenschaft aktiviert ist, muss das Android-NDK installiert sein.

Standardmäßig ist diese Eigenschaft False.

Diese Eigenschaft gilt für unterstützte Projekte mit .NET 10 und früheren Versionen, die Mono verwenden, und wirkt sich nur dann auf die Kompilierung aus, wenn $(RunAOTCompilation) auf True festgelegt ist.

Wenn Sie diese Eigenschaft für CoreCLR oder NativeAOT auf true festlegen, wird sie auf false zurückgesetzt, und der Build wird mit XA1044 beendet.

EnableMSTestRunner

Eine boolesche Eigenschaft, die msTest runner für Android-Testprojekte ermöglicht. Wenn true festgelegt ist, wird dotnet run die Anwendung über am instrument statt über am start starten, wodurch Testergebnisse über das Android-Instrumentierungsprotokoll gemeldet werden können.

Standardmäßig ist diese Eigenschaft False.

In .NET 11 eingeführt.

EnableProguard

Eine boolesche Eigenschaft, die bestimmt, ob ProGuard als Teil des Paketerstellungsprozesses ausgeführt wird, um Java-Code zu verknüpfen.

Standardmäßig ist diese Eigenschaft False.

Wenn True, werden @(ProguardConfiguration)-Dateien verwendet, um die proguard-Ausführung zu steuern.

EventSourceSupport

Bei Festlegung auf false deaktiviert .NET die EventSource-Unterstützung von gekürzten Android-Anwendungen. Durch das Deaktivieren dieses Features würden .NET-Diagnosetools wie dotnet-counters nicht funktionieren, was jedoch den Vorteil einer reduzierten Anwendungsgröße bietet.

Standardmäßig auf false eingestellt im Release Modus, es sei denn, $(EnableDiagnostics) oder $(AndroidEnableProfiler) aktiviert sind.

AnwendungsmanifestErzeugen

Aktiviert oder deaktiviert die folgenden MSBuild-Eigenschaften, die Werte in der endgültigen AndroidManifest.xml Datei ausgeben:

Der Standardwert $(GenerateApplicationManifest) ist true.

JavaMaximumHeapSize

Gibt den Wert des Java-Parameters-Xmx an, der beim Erstellen der .dex-Datei als Teil des Paketerstellungsprozesses verwendet werden soll. Wenn nicht angegeben ist, wird die Option -Xmx verwendet, um java mit einem Wert von 1G zu versorgen. Dies wurde unter Windows im Vergleich zu anderen Plattformen als häufig erforderlich erachtet.

Die Angabe dieser Eigenschaft ist erforderlich, wenn das _CompileDex-Ziel einen java.lang.OutOfMemoryError auslöst.

Passen Sie den Wert durch folgende Änderungen an:

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

Gibt Befehlszeilenoptionen an, die beim Erstellen der Datei an java übergeben werden sollen.

JarsignerTimestampAuthorityCertificateAlias

Über diese Eigenschaft können Sie einen Alias im Keystore für eine Zeitstempelautorität angeben. Weitere Informationen finden Sie in der Java Dokumentation zur Zeitstempelunterstützung für Signaturen.

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

JarsignerTimestampAuthorityUrl

Über diese Eigenschaft können Sie eine URL zu einem Zeitstempelautoritätsdienst angeben. Diese kann verwendet werden, um sicherzustellen, dass die .apk-Signatur einen Zeitstempel enthält. Weitere Informationen finden Sie in der Java Dokumentation zur Zeitstempelunterstützung für Signaturen.

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

LinkerDumpDependencies

Eine boolesche Eigenschaft, die das Generieren von Linker-Abhängigkeitsdateien ermöglicht. Diese Datei kann als Eingabe für das Illinkanalyzer-Tool verwendet werden.

Die Abhängigkeitsdatei linker-dependencies.xml.gz wird in das Projektverzeichnis geschrieben. Bei .NET 5/6 wird sie neben den verknüpften Assemblys in das Verzeichnis obj/<Configuration>/android<ABI>/linked geschrieben.

Der Standardwert ist Falsch.

MandroidI18n

Diese MSBuild-Eigenschaft ist veraltet und wird nicht mehr unterstützt.

MauiEnableFullReadyToRun

Eine boolesche Eigenschaft für .NET MAUI-Android-Anwendungen, die CoreCLR verwenden und in der Konfiguration Release mit aktiviertem ReadyToRun erstellt werden. Wenn diese Eigenschaft nicht festgelegt ist oder false, verwendet MAUI partielles ReadyToRun mit seinen standardmäßigen MIBC-Profilen. Legen Sie diese Eigenschaft auf true fest, um vollständiges ReadyToRun zu aktivieren. Diese Eigenschaft hat keine Wirkung, wenn $(PublishReadyToRun)false ist.

Full ReadyToRun erhöht die Anwendungs- und Downloadgröße, kann aber möglicherweise die Laufzeitleistung verbessern, da mehr Methoden vorkompiliert sind.

Weitere Informationen zu CoreCLR und ReadyToRun in .NET MAUI finden Sie unter Runtimes und Kompilierung in .NET MAUI.

MetricsSupport

Wenn auf false festgelegt, deaktiviert es die Metrikunterstützung von .NET für gekürzte Android-Anwendungen. Durch das Deaktivieren dieses Features würden APIs wie System.Diagnostics.Metrics z. B. nicht funktionieren, aber im Vorteil einer reduzierten Anwendungsgröße.

Standardmäßig auf false eingestellt im Release Modus, es sei denn, $(EnableDiagnostics) oder $(AndroidEnableProfiler) aktiviert sind.

MonoAndroidAssetPrefix

Gibt ein Pfadpräfix an, das am Anfang von Dateinamen mit einer Buildaktion von AndroidAsset entfernt wird. Damit soll ermöglicht werden, den Speicherort von Ressourcen zu ändern.

Der Standardwert ist Assets. Ändern Sie diese Option für die Java-Projektstruktur in assets.

MonoAndroidResourcePrefix

Gibt ein Pfadpräfix an, das am Anfang von Dateinamen mit einer Buildaktion von AndroidResource entfernt wird. Damit soll ermöglicht werden, den Speicherort von Ressourcen zu ändern.

Der Standardwert ist Resources. Ändern Sie diese Option für die Java-Projektstruktur in res.

MonoSymbolArchive

Hinweis

Dies war eine ältere MSBuild-Eigenschaft von Xamarin.Android. In .NET 6+ nicht verfügbar.

Eine boolesche Eigenschaft, die steuert, ob .mSYM-Artefakte für die spätere Verwendung mit mono-symbolicate generiert werden, um „echte“ Dateinamen- und Zeilennummerinformationen aus Releasestapelüberwachungen zu extrahieren.

Dies ist standardmäßig "True" für "Release"-Apps mit aktivierten Debugsymbolen: $(EmbedAssembliesIntoApk) ist "True", $(DebugSymbols) ist wahr, und $(Optimize) ist True.

PublishReadyToRun

Eine boolesche Eigenschaft, die steuert, ob Assemblys bei Verwendung von CoreCLR in das ReadyToRun-Format kompiliert werden. ReadyToRun-Assemblys enthalten sowohl MSIL- als auch nativen Code. Dies kann die Startzeit der Anwendung verbessern, während die JIT-Kompatibilität beibehalten wird, aber die Größe der Anwendung und des Downloads erhöht wird.

Für Android-Anwendungen, die CoreCLR verwenden, ist diese Eigenschaft in der Release-Konfiguration standardmäßig auf true festgelegt und in der Debug-Konfiguration standardmäßig nicht aktiviert. ReadyToRun gilt nicht bei Verwendung von Mono oder NativeAOT.

ReadyToRun erfordert Kürzen. Wenn $(PublishTrimmed) nicht true ist, deaktiviert .NET für Android PublishReadyToRun und $(PublishReadyToRunComposite) und gibt die Warnung XA0119 aus.

Die ReadyToRun-Kompilierung ist standardmäßig eine Verbundkompilierung. Siehe $(PublishReadyToRunComposite). .NET MAUI verwendet auch partielles ReadyToRun mit MIBC-Standardprofilen. Siehe $(MauiEnableFullReadyToRun), um vollständiges ReadyToRun zu aktivieren.

Weitere Informationen finden Sie unter Runtimes und Kompilierung in .NET MAUI.

PublishReadyToRunComposite

Eine boolesche Eigenschaft, die festlegt, ob die ReadyToRun-Kompilierung die Assemblys der Anwendung zu einem zusammengesetzten Image zusammenführt. Composite ReadyToRun ermöglicht assemblyübergreifende Optimierungen, kann aber die Buildzeit erhöhen.

Bei Android-Anwendungen, die CoreCLR verwenden, wird diese Eigenschaft standardmäßig auf true festgelegt, wenn $(PublishReadyToRun) den Wert true hat. ReadyToRun, einschließlich zusammengesetztem ReadyToRun, setzt voraus, dass $(PublishTrimmed)true ist.

RunAOTCompilation

Eine boolesche Eigenschaft, die bestimmt, ob Assemblys vorab mit dem Mono AOT-Compiler kompiliert werden und in Anwendungen enthalten sind, die die Mono-Laufzeit verwenden. Diese Eigenschaft ist standardmäßig für Debug-Builds auf False und standardmäßig für Release-Builds auf True festgelegt, die Mono auf unterstützten .NET-10-oder-früheren Zielframeworks verwenden.

Diese MSBuild-Eigenschaft ersetzt die $(AotAssemblies) MSBuild-Eigenschaft von Xamarin.Android. Dies ist die gleiche Eigenschaft, die für Blazor WASM verwendet wird.

Diese Eigenschaft aktiviert "ReadyToRun" oder "NativeAOT" nicht. Wenn diese Einstellung für CoreCLR oder NativeAOT auf true festgelegt wird, wird sie auf false zurückgesetzt, und der Build wird mit XA1044 beendet.

Das Festlegen auf false für CoreCLR beendet auch den Build mit XA1044, anstatt die Eigenschaft stillschweigend zu ignorieren. Entfernen Sie ab .NET 11 $(RunAOTCompilation) und setzen Sie $(PublishReadyToRun) auf false, um die ReadyToRun (R2R)-AOT-Kompilierung zu deaktivieren.

Das Festlegen von $(RunAOTCompilation) auf false für NativeAOT bleibt zulässig.

UseMonoRuntime

Eine boolesche Eigenschaft, die steuert, ob Android-Anwendungen die Mono-Laufzeit anstelle von CoreCLR für unterstützte .NET 10-und-frühere Ziele verwenden. Legen Sie diese Eigenschaft auf true fest, um Mono auf diesen Zielen zu verwenden, oder auf false, um CoreCLR auf diesen Zielen zu verwenden. $(PublishAot) hat Vorrang und wählt NativeAOT für unterstützte Publish- oder optimierte Builds aus, wenn es auf true festgelegt ist.

Diese Eigenschaft hat in .NET 10 und früher standardmäßig den Wert true, sodass Android-Anwendungen Mono verwenden. Ab .NET 11 wird standardmäßig false verwendet, sodass Android-Anwendungen CoreCLR verwenden und ein expliziter true-Wert mit NETSDK1242 abgelehnt wird.

Weitere Informationen finden Sie unter Runtimes und Kompilierung in .NET MAUI.

WaitForExit

Eine boolesche Eigenschaft, die das Verhalten beim Starten von dotnet run Android-Anwendungen steuert.

Wenn $(WaitForExit) nicht false (der Standard) ist, wird Folgendes geschehen dotnet run:

  • Starten der Android-Anwendung
  • Die Ausgabe des Streams logcat wird auf den Prozess der Anwendung gefiltert.
  • Warten Sie, bis die Anwendung beendet wird, oder drücken Sie STRG+C.
  • Erzwingen des Beendens der Anwendung, wenn STRG+C gedrückt wird

Wenn $(WaitForExit) auf false gesetzt ist, startet dotnet run die Anwendung einfach und kehrt sofort zurück, ohne darauf zu warten, dass die Anwendung beendet wird, oder Ausgaben zu streamen.

Diese Eigenschaft steuert auch, ob adb shell am instrument beim Starten der Anwendung über ihr $(AndroidInstrumentation)-w übergeben wird:

$(WaitForExit) Starten eines <activity/> Starten eines <instrumentation/>
true (Standardwert) adb shell am start -S -W adb shell am instrument -w -r
false adb shell am start -S adb shell am instrument -r

Da adb shell am instrument Ergebnisse erst meldet, wenn die Instrumentierung abgeschlossen ist, darf false nicht $(WaitForExit) sein, wenn Sie die Ausgabe der Instrumentierung oder einen aussagekräftigen Exit-Code benötigen. Dies ist wichtig für Szenarien wie das Ausführen von Tests oder einen BenchmarkDotNet-Host , weshalb immer der Standardwert verwendet wird dotnet test .

In .NET 11 eingeführt.