Proprietà di compilazione

Le proprietà di MSBuild controllano il comportamento delle destinazioni.

Vengono specificati all'interno del file di progetto, ad esempio MyApp.csproj, all'interno di un gruppo di proprietà MSBuild.

Nota

In .NET per Android non esiste tecnicamente alcuna distinzione tra un'applicazione e un progetto di binding, quindi le proprietà funzioneranno in entrambi. In pratica, è consigliabile creare progetti di applicazioni e associazioni separati. Le proprietà usate principalmente nei progetti di binding sono documentate nella guida di riferimento alle proprietà del progetto di associazioni MSBuild.

Ambito di runtime

Le normali applicazioni Android hanno come destinazione CoreCLR in .NET 11 e versioni successive. Per impostazione predefinita, le applicazioni Android destinate a .NET 10 e versioni precedenti usano Mono. L'impostazione $(PublishAot) su true seleziona il runtime NativeAOT per le compilazioni di pubblicazione o ottimizzate supportate e ha la precedenza su $(UseMonoRuntime).

$(UseMonoRuntime)=truenon è un .NET 11 tratteggio di fuga. L'SDK .NET 11 lo rifiuta con NETSDK1242. Usare le linee guida mono .NET 10 e precedenti solo quando la destinazione è un framework in cui Mono è supportato.

AdbTarget

La $(AdbTarget) proprietà specifica il dispositivo di destinazione Android da cui può essere installato o rimosso il pacchetto Android. Il valore di questa proprietà corrisponde all'opzione adbDispositivo di destinazione.

AfterGenerateAndroidManifest

Le destinazioni MSBuild elencate in questa proprietà verranno eseguite direttamente dopo la destinazione interna _GenerateJavaStubs , che è la posizione in cui il AndroidManifest.xml file viene generato in $(IntermediateOutputPath). Se si desidera apportare modifiche al file generato AndroidManifest.xml , è possibile farlo usando questo punto di estensione.

AndroidAapt2CompileExtraArgs

Specifica le opzioni della riga di comando da passare al comando di compilazione aapt2 durante l'elaborazione di risorse e asset Android.

AndroidAapt2LinkExtraArgs

Specifica le opzioni della riga di comando da passare al comando aapt2 link durante l'elaborazione di asset e risorse Android.

AndroidAddKeepAlives

Proprietà booleana che controlla se il linker inserisce invocazioni GC.KeepAlive() all'interno dei progetti di associazione per impedire la raccolta prematura degli oggetti.

Il valore predefinito è True per le build di configurazione Release.

Per le compilazioni non eseguite usando la mappa dei trimmable tipi, GC.KeepAlive() le chiamate vengono inserite solo quando $(AndroidEnableLegacyCompatibilityAssemblyFixups) è anche True. Le compilazioni tagliate usando la mappa dei trimmable tipi non inseriscono queste chiamate.

AndroidAotAdditionalArguments

Proprietà di tipo stringa che consente di passare le opzioni al compilatore Mono durante l'attività Aot per i progetti che hanno $(AndroidEnableProfiledAot) o $(AotAssemblies) impostati su true. Il valore stringa della proprietà viene aggiunto al file di risposta quando si chiama il compilatore incrociato Mono.

In generale, questa proprietà deve essere lasciata vuota, ma in alcuni scenari speciali potrebbe offrire una flessibilità utile.

La $(AndroidAotAdditionalArguments) proprietà è diversa dalla proprietà correlata $(AndroidExtraAotOptions) . $(AndroidAotAdditionalArguments) Passa opzioni separate da spazio autonomo complete come --verbose o --debug al compilatore AOT, mentre $(AndroidExtraAotOptions) contiene argomenti delimitati da virgole che fanno parte dell'opzione --aot del compilatore AOT.

AndroidAotCustomProfilePath

Il file che aprofutil dovrebbe creare per contenere i dati del profiler.

AndroidAotProfiles

Proprietà di tipo stringa che consente allo sviluppatore di aggiungere profili AOT dalla riga di comando nella programmazione. Si tratta di un elenco delimitato da punto e virgola o da virgole di percorsi assoluti.

AndroidAotProfilerPort

La porta a cui connettere aprofutil per ottenere i dati di profilatura.

AndroidAotEnableLazyLoad

Abilitare il caricamento ritardato degli assembly AOT-d, anziché precaricarli all'avvio. Il valore predefinito è True per le build release con qualsiasi forma di AOT abilitata.

Introdotto in .NET 6.

AndroidApkDigestAlgorithm

Valore stringa che specifica l'algoritmo digest da usare con jarsigner -digestalg.

Il valore predefinito è SHA-256.

AndroidApkSignerAdditionalArguments

Proprietà di stringa che consente allo sviluppatore di fornire argomenti allo strumento apksigner.

AndroidApkSigningAlgorithm

Valore stringa che specifica l'algoritmo di firma da usare con jarsigner -sigalg.

Il valore predefinito è SHA256withRSA.

AndroidApplication

Valore booleano che indica se il progetto è per un'applicazione Android (True) o per un progetto di libreria Android (False o non presente).

In un pacchetto Android può essere presente un solo progetto con <AndroidApplication>True</AndroidApplication>. Purtroppo questo requisito non viene verificato, che può causare errori sottili e bizzarri relativi alle risorse Android.

AndroidApplicationJavaClass

Nome completo della classe Java da usare al posto di android.app.Application quando una classe eredita da Android.App.Application.

La $(AndroidApplicationJavaClass) proprietà viene in genere impostata da altre proprietà, ad esempio la $(AndroidEnableMultiDex) proprietà MSBuild.

AndroidAvoidEmitForPerformance

Proprietà booleana che determina se è "evitato" o meno System.Reflection.Emit per migliorare le prestazioni di avvio. Per impostazione predefinita, il valore della proprietà è True.

L'utilizzo di System.Reflection.Emit ha un impatto notevole sulle prestazioni di avvio su Android. Questo comportamento è disabilitato per impostazione predefinita per le opzioni di funzionalità seguenti:

  • Switch.System.Reflection.ForceInterpretedInvoke: dopo la seconda chiamata a MethodInfo.Invoke() o ConstructorInfo.Invoke(), il codice viene generato per migliorare le prestazioni delle chiamate ripetute.

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: dopo la seconda chiamata per ottenere un servizio da un contenitore per l'iniezione delle dipendenze, viene generato del codice per migliorare le prestazioni delle chiamate ripetute.

È consigliabile nella maggior parte delle applicazioni Android disabilitare questo comportamento.

Per informazioni dettagliate sui commutatori di funzionalità disponibili, vedere la documentazione relativa alle opzioni delle funzionalità delle librerie di classi di base.

Aggiunta in .NET 8.

AndroidBinUtilsPath

Percorso di una directory contenente i binutils di Android, ad ldesempio, il linker nativo e as l'assembler nativo. Questi strumenti sono inclusi nel carico di lavoro .NET per Android.

Il valore predefinito è $(MonoAndroidBinDirectory)\binutils\bin\.

AndroidBoundExceptionType

Valore stringa che specifica come propagare le eccezioni quando un tipo fornito da .NET per Android implementa un tipo o un'interfaccia .NET in termini di tipi Java, ad esempio Android.Runtime.InputStreamInvoker e System.IO.Streamo Android.Runtime.JavaDictionary e System.Collections.IDictionary.

  • Java: il tipo di eccezione Java originale viene propagato così come è.

    Java significa che, ad esempio, InputStreamInvoker non implementa correttamente l'API System.IO.Stream perché Java.IO.IOException può essere generato anziché da Stream.Read() da System.IO.IOException.

  • System: il tipo di eccezione Java originale viene intercettato e avvolto in un tipo di eccezione .NET appropriato.

    System significa che, ad esempio, InputStreamInvoker implementa System.IO.Streamcorrettamente e Stream.Read()non genera Java.IO.IOException istanze. Può invece generare un System.IO.IOException contenente un Java.IO.IOException come valore di Exception.InnerException.

    System è il valore predefinito.

AndroidBoundInterfacesContainConstants

Proprietà booleana che determina se le costanti di associazione sulle interfacce saranno supportate o se verrà utilizzata la soluzione alternativa alla creazione di una IMyInterfaceConsts classe.

Il valore predefinito è True.

InterfacceVincolateAndroidContenentiMetodiDiInterfacciaStaticiEDiDefault

Proprietà booleana che indica se i membri predefiniti e statici nelle interfacce saranno supportati o una soluzione alternativa precedente per la creazione di una classe di pari livello contenente membri statici come abstract class MyInterface.

Il valore predefinito è True in .NET 6 e False per legacy.

AndroidBoundInterfacesContainTypes

Proprietà booleana che indica se i tipi annidati nelle interfacce saranno supportati o la soluzione alternativa alla creazione di un tipo non annidato, ad IMyInterfaceMyNestedClassesempio .

Il valore predefinito è True in .NET 6 e False per legacy.

AndroidBuildApplicationPackage

Valore booleano che indica se creare e firmare il pacchetto (.apk). L'impostazione di questo valore su True equivale all'uso di SignAndroidPackage destinazione di compilazione.

Per impostazione predefinita, il valore della proprietà è False.

AndroidBundleConfigurationFile

Specifica un nome file da usare come file di configurazione per bundletool durante la compilazione di un bundle di app Android. Questo file controlla alcuni aspetti del modo in cui gli API vengono generati dal bundle, ad esempio in quali dimensioni il bundle viene suddiviso per produrre API. .NET per Android configura automaticamente alcune di queste impostazioni, incluso l'elenco delle estensioni di file da non comprimere.

Questa proprietà è rilevante solo se $(AndroidPackageFormat) è impostata su aab.

AndroidBundleToolExtraArgs

Specifica le opzioni della riga di comando da passare al comando bundletool quando si compilano bundle di app.

AndroidClassParser

Una proprietà di stringa che controlla la modalità di analisi dei file .jar. I valori possibili includono:

  • class-parse: usa class-parse.exe per analizzare direttamente il bytecode Java senza ricorrere a JVM.

  • jar2xml: questo valore è obsoleto e non è più supportato.

AndroidCodegenTarget

Proprietà stringa che controlla l'ABI di destinazione della generazione del codice. I valori possibili includono:

  • XamarinAndroid: questo valore è obsoleto e non è più supportato.

  • XAJavaInterop1: usa Java.Interop per le chiamate JNI. Gli assembly di binding che usano XAJavaInterop1 possono solo essere compilati ed eseguiti con Xamarin.Android 6.1 o versioni successive. Xamarin.Android 6.1 e versioni successive eseguono il binding di Mono.Android.dll con questo valore.

  • JavaInterop1: valore sperimentale, attualmente il valore predefinito per il runtime NativeAOT.

Il valore predefinito è XAJavaInterop1.

AndroidCreatePackagePerAbi

Proprietà booleana che determina se è necessario creare un set di file, uno per ogni ABI specificato in $(AndroidSupportedAbis), anziché avere il supporto per tutti gli ABI in un singolo .apk.

Vedere anche la guida alla creazione di pacchetti APK specifici per ABI.

AndroidCreateProguardMappingFile

Proprietà booleana che controlla se un file di mapping proguard viene generato come parte del processo di compilazione.

L'aggiunta del codice seguente al file csproj causerà la generazione del file e userà la AndroidProguardMappingFile proprietà per controllare il percorso del file di mapping finale.

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

Quando si producono .aab file, il file di mapping viene incluso automaticamente nel pacchetto. Non è necessario caricarlo manualmente in Google Play Store. Quando si usano i file .apk, AndroidProguardMappingFile sarà necessario caricarli manualmente.

Il valore predefinito è True quando si utilizza $(AndroidLinkTool)=r8.

AndroidDebugKeyAlgorithm

Specifica l'algoritmo predefinito da utilizzare per .debug.keystore Il valore predefinito è RSA.

AndroidDebugKeyValidity

Specifica la validità predefinita da utilizzare per .debug.keystore Il valore predefinito è 10950 o 30 * 36530 years.

AndroidDebugStoreType

Specifica il formato di file dell'archivio chiavi da utilizzare per debug.keystore. Il valore predefinito è pkcs12.

AndroidDeviceUserId

Consente la distribuzione e il debug dell'applicazione in account guest o aziendali. Il valore è il uid valore ottenuto dal comando adb seguente:

adb shell pm list users

Il comando precedente restituirà i dati seguenti:

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

uid è il primo valore intero. Nell'output precedente sono 0 e 10.

AndroidDexTool

Una proprietà di tipo enum con un valore valido di d8. In precedenza, un valore di dx è supportato in Xamarin.Android.

Indica quale compilatore dex Android viene usato durante il processo di compilazione .NET per Android. Il valore predefinito è d8. Vedere la documentazione su D8 e R8.

AndroidEnableDesugar

Proprietà booleana che determina se desugar è abilitata. Android attualmente non supporta tutte le funzionalità java 8 e la toolchain predefinita implementa le nuove funzionalità del linguaggio eseguendo trasformazioni bytecode, denominate desugar, nell'output del javac compilatore. Il valore predefinito è False se si usa $(AndroidDexTool)=dx e True se si usa$(AndroidDexTool)=d8 .

AndroidEnableFastDeployment

Proprietà booleana che determina se la distribuzione rapida è abilitata. Fast Deployment installa gli assembly all'esterno del pacchetto dell'applicazione, riducendo i tempi di distribuzione e ricompilazione.

Il valore predefinito è True per le build di debug e False per le build di rilascio. L'impostazione di questa proprietà equivale all'impostazione del valore inverso di $(EmbedAssembliesIntoApk). Se entrambe le proprietà sono impostate, $(EmbedAssembliesIntoApk) ha la precedenza.

AndroidAbilitaControlliGooglePlayStore

Proprietà bool che consente agli sviluppatori di disabilitare i controlli seguenti di Google Play Store: XA1004, XA1005 e XA1006. La disabilitazione di questi controlli è utile per gli sviluppatori che non hanno come destinazione Google Play Store e non vogliono eseguire tali controlli.

AndroidEnableLegacyCompatibilityAssemblyFixups

Proprietà booleana che controlla se le compilazioni senza tentativi modificano gli assembly a cui si fa riferimento per supportare il comportamento dell'associazione legacy e della finestra di progettazione risorse. Queste modifiche includono l'aggiunta di metodi di interfaccia astratta mancanti, l'aggiornamento dei riferimenti di Progettazione risorse legacy e l'inserimento di GC.KeepAlive() chiamate in Xamarin meno recenti. Assembly di associazione Android. Le compilazioni tagliate usando la mappa dei trimmable tipi non eseguono queste correzioni di compatibilità e l'impostazione di questa proprietà su True non le abilita per le compilazioni tagliate.

Il valore predefinito è quando $(AndroidTypeMapImplementation) è trimmableFalse e True in caso contrario.

AndroidEnableMarshalMethods

Proprietà bool che determina se i metodi di marshalling LLVM sono abilitati o meno. I metodi di marshalling LLVM sono un'ottimizzazione per l'avvio delle app che usa punti di ingresso nativi per la registrazione dei metodi Javanative.

Questa proprietà è False per impostazione predefinita.

Questa proprietà non può essere impostata su true quando $(PublishReadyToRun) è true.

Aggiunta in .NET 8.

AndroidEnableMultiDex

Proprietà booleana che determina se il supporto multi-dex verrà utilizzato o meno nel file finale .apk.

Per impostazione predefinita, il valore della proprietà è False.

AndroidEnableProfiler

Per le applicazioni Mono, si tratta di un sinonimo della $(EnableDiagnostics) proprietà . Se è true, il componente di diagnostica Mono, libmono-component-diagnostics_tracing.so, viene incluso nell'applicazione.

Per le applicazioni CoreCLR in .NET 11 e versioni successive, questa proprietà abilita la configurazione della porta di diagnostica CoreCLR usata da strumenti come dotnet-trace e dotnet-gcdump. Non aggiunge un componente di diagnostica Mono. NativeAOT è un runtime separato selezionato da $(PublishAot) e questa proprietà documenta solo il comportamento di configurazione e creazione di pacchetti Android supportati.

Per impostazione predefinita, il valore della proprietà è False.

AndroidEnableObsoleteOverrideInheritance

Proprietà booleana che determina se i metodi associati ereditano [Obsolete] automaticamente gli attributi dai metodi di cui eseguono l'override.

Il supporto per questa proprietà è stato aggiunto in .NET 8.

Per impostazione predefinita, il valore della proprietà è True.

AndroidEnablePreloadAssemblies

Proprietà booleana che controlla se tutti gli assembly gestiti raggruppati all'interno del pacchetto dell'applicazione vengono caricati o meno durante l'avvio del processo.

Se impostata su True, tutti gli assembly inclusi nel pacchetto dell'applicazione verranno caricati durante l'avvio del processo, prima che venga richiamato il codice dell'applicazione.

Quando impostato su False, gli assembly verranno caricati solo all'occorrenza. Il caricamento di assembly in base alle esigenze consente alle applicazioni di avviare più velocemente e è anche più coerente con la semantica desktop .NET. Per visualizzare il tempo risparmiato, impostare la proprietà di sistema debug.mono.log in modo da includere timing e cercare il messaggio Finished loading assemblies: preloaded all'interno di adb logcat.

Le applicazioni o le librerie, che usano l'inserimento delle dipendenze, possono richiedere che questa proprietà sia True se a loro volta richiedano la AppDomain.CurrentDomain.GetAssemblies() restituzione di tutti gli assembly all'interno del bundle dell'applicazione, anche se l'assembly non sarebbe altrimenti necessario.

Per impostazione predefinita, questo valore è False.

AndroidEnableProfiledAot

Proprietà booleana che determina se i profili AOT vengono utilizzati durante la compilazione in anticipo.

I profili sono elencati in @(AndroidAotProfile) gruppo di elementi. Questo ItemGroup contiene i profili predefiniti. Può essere sovrascritto rimuovendo quelli esistenti e aggiungendo i propri profili AOT.

Per impostazione predefinita, il valore della proprietà è False.

AndroidEnableRestrictToAttributes

Proprietà di tipo enumerazione con valori validi di obsolete e disable.

Se impostato su obsolete, i tipi e i membri contrassegnati con l'annotazione androidx.annotation.RestrictToJava o che si trovano in pacchetti Java non esportati verranno contrassegnati con un [Obsolete] attributo nell'associazione C#.

Questo [Obsolete] attributo ha un messaggio descrittivo che spiega che il proprietario del pacchetto Java considera l'API "interna" e ne avvisa l'uso.

Questo attributo include anche un codice XAOBS001 di avviso personalizzato in modo che possa essere eliminato indipendentemente dall'API obsoleta "normale".

Se impostato su disable, l'API verrà generata come di consueto senza attributi aggiuntivi. Si tratta dello stesso comportamento di prima di .NET 8.

L'aggiunta [Obsolete] di attributi anziché la rimozione automatica dell'API è stata eseguita per mantenere la compatibilità dell'API con i pacchetti esistenti. Se invece si preferisce rimuovere i membri che hanno l'annotazione @RestrictTo o che si trovano in pacchetti Java non esportati, è possibile usare i File Transform oltre a questa proprietà per impedire che questi tipi siano vincolati:

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

Il supporto per questa proprietà è stato aggiunto in .NET 8.

Questa proprietà è impostata su obsolete per impostazione predefinita.

AndroidEnableSGenConcurrent

Proprietà booleana che determina se verrà utilizzato o meno il collettore GC concorrente di Mono.

Per impostazione predefinita, il valore della proprietà è False.

AndroidErrorOnCustomJavaObject

Proprietà booleana che determina se i tipi possono essere implementati Android.Runtime.IJavaObjectsenza ereditare anche da Java.Lang.Object o Java.Lang.Throwable:

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

    public void Dispose()
    {
    }
}

Se True, tali tipi genereranno un errore XA4212. In caso contrario, verrà generato un avviso XA4212.

Per impostazione predefinita, il valore della proprietà è True.

AndroidExplicitCrunch

Questa proprietà non è più supportata.

AndroidExtraAotOptions

Proprietà di tipo stringa che consente di passare le opzioni al compilatore Mono durante l'attività Aot per i progetti che hanno $(AndroidEnableProfiledAot) o $(AotAssemblies) impostati su true. Il valore stringa della proprietà viene aggiunto al file di risposta quando si chiama il compilatore incrociato Mono.

In generale, questa proprietà deve essere lasciata vuota, ma in alcuni scenari speciali potrebbe offrire una flessibilità utile.

La $(AndroidExtraAotOptions) proprietà è diversa dalla proprietà correlata $(AndroidAotAdditionalArguments) . $(AndroidAotAdditionalArguments) Inserisce gli argomenti delimitati da virgole nell'opzione --aot del compilatore Mono. $(AndroidExtraAotOptions) passa invece al compilatore le opzioni complete separate da spazi autonomi, come --verbose o --debug.

TipoDiDistribuzioneRapidaAndroid

Questa proprietà è stata rimossa in .NET 9 e non ha alcun effetto.

AndroidFragmentType

Specifica il tipo pienamente qualificato predefinito da usare per tutti gli elementi <fragment> del layout quando viene generato il codice delle associazioni di layout. Il valore predefinito è il tipo Android Android.App.Fragment standard.

AndroidGenerateJniMarshalMethods

Questa funzionalità sperimentale è stata rimossa in .NET 11. L'impostazione della proprietà non ha alcun effetto.

AndroidGeneraMetodiDiMarshalingJniArgomentiAggiuntivi

Questa funzionalità sperimentale è stata rimossa in .NET 11. L'impostazione della proprietà non ha alcun effetto.

AndroidGenerateLayoutBindings

Abilita la generazione del layout code-behind se impostato su true, o la disabilita completamente se impostato su false.

Il valore predefinito è false.

AndroidGenerateResourceDesigner

Il valore predefinito è true. Se impostato su false, disabilita la generazione di Resource.designer.cs.

AndroidHttpClientHandlerType

Nota

Questa proprietà non è supportata in .NET 11. Rimuoverlo dal file di progetto e usarlo UseNativeHttpHandler .

AndroidIgnoreAllJniPreload

Valore booleano che, se impostato su true, esenta tutte le librerie JNI native dall'essere precaricate all'avvio dell'applicazione. Per impostazione predefinita, tutte queste librerie verranno caricate dal runtime all'inizio dell'avvio dell'applicazione per garantire la corretta inizializzazione. Tuttavia, in alcuni casi potrebbe non essere il comportamento desiderato e questa proprietà consente di disabilitarla in modo efficace.

Alcune librerie framework che devono essere caricate all'avvio dell'applicazione non saranno interessate da questa proprietà.

Vedi anche @(AndroidNativeLibraryNoJniPreload) per un metodo più dettagliato per esentare le librerie dal meccanismo di precaricamento.

AndroidIncludeWrapSh

Valore booleano che indica se lo script wrapper Android (wrap.sh) deve essere confezionato nell'APK. Il valore predefinito è false poiché lo script wrapper può influire significativamente sulla modalità di avvio e funzionamento dell'applicazione e lo script deve essere incluso solo quando necessario, ad esempio quando si esegue il debug o si modifica il comportamento di avvio/runtime dell'applicazione.

Lo script viene aggiunto al progetto usando @(AndroidNativeLibrary) azione di compilazione, perché viene inserita nella stessa directory delle librerie native specifiche dell'architettura e deve essere denominata wrap.sh.

Il modo più semplice per specificare il percorso dello script consiste nell'inserirlo wrap.sh in una directory denominata dopo l'architettura di destinazione. Questo approccio funzionerà se hai un'unica wrap.sh per architettura.

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

Tuttavia, se il progetto richiede più di un'architettura wrap.sh , per scopi diversi, questo approccio non funzionerà. In questi casi, invece, è possibile specificare il nome usando i Link metadati di AndroidNativeLibrary:

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

Se vengono usati i Link metadati, il percorso specificato nel relativo valore deve essere un percorso di libreria specifico dell'architettura nativa valido, relativo alla directory radice APK. Il formato del percorso è lib\ARCH\wrap.sh dove ARCH può essere uno dei seguenti:

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

AndroidIncludeAssetPacksInPackage

Questa proprietà controlla se i pacchetti di risorse che si compilano automaticamente vengono inclusi automaticamente nel file finale .aab. Sarà impostato su predefinito true.

In alcuni casi l'utente potrebbe voler rilasciare una versione provvisoria. In questi casi l'utente non deve aggiornare il pacchetto di asset. Soprattutto se il contenuto del pacchetto di asset non è stato modificato. Questa proprietà consente all'utente di ignorare i pacchetti di asset, se non sono necessari.

Aggiunta in .NET 9

AndroidInstallJavaDependencies

Il valore predefinito è true per le compilazioni della riga di comando. Se impostato su true, abilita l'installazione dell'SDK di Java quando si esegue il <InstallAndroidDependencies/> target.

Il supporto per questa proprietà è stato aggiunto in .NET 9.

AndroidInstrumentation

Proprietà stringa che specifica il nome della classe dello strumento di esecuzione della strumentazione Android da usare quando si avvia l'applicazione tramite dotnet run.

Quando questa proprietà non è impostata, dotnet run risolve l'avvio da generato nell'output intermedio AndroidManifest.xml :

  • Se $(AndroidUseInstrumentation) è true, viene utilizzato il primo <instrumentation/> elemento.
  • In caso contrario, l'utilità di <activity/> avvio è preferibile e il primo <instrumentation/> elemento viene usato quando l'app non dichiara alcuna attività avviabile. Ciò consente a dotnet run un'app il cui solo punto di ingresso è una Android.App.Instrumentation sottoclasse, ad esempio un host BenchmarkDotNet .

Se l'app non dichiara nessuno dei due, la compilazione non riesce con XA1043. Se $(AndroidUseInstrumentation) è true ma l'app dichiara no <instrumentation/>, la compilazione ha esito negativo con XA1048.

Quando viene avviata una strumentazione, dotnet run esegue adb shell am instrument -w -r ed esce con un codice di uscita diverso da zero se la strumentazione si arresta in modo anomalo o chiama Instrumentation.Finish() con Result.Canceled. L'impostazione $(WaitForExit)-wsu false elimina , quindi dotnet run restituisce non appena viene avviata la strumentazione e non vengono segnalati risultati.

Tutti gli argomenti dopo -- vengono inoltrati alla strumentazione come am instrument elementi aggiuntivi. Gli argomenti del form KEY=VALUE diventano -e KEY VALUEe tutti gli argomenti rimanenti vengono uniti in un unico -e args "..." argomento aggiuntivo:

dotnet run -- --filter *MyBenchmark*

viene recapitato a Instrumentation.OnCreate(Bundle?) come arguments.GetString("args").

Introdotto in .NET 11.

AndroidJavadocVerbosity

Specifica il modo in cui devono essere "verbose" i commenti della documentazione XML C# durante l'importazione della documentazione Javadoc all'interno dei progetti di associazione.

Richiede l'uso di @(JavaSourceJar) azione di compilazione.

La $(AndroidJavadocVerbosity) proprietà è simile a enumerazione, con valori possibili di full o intellisense:

Il valore predefinito è intellisense.

AndroidKeyStore

Valore booleano che indica se devono essere utilizzate informazioni di firma personalizzate. Il valore predefinito è False, indicante che per la firma dei pacchetti verrà usata la chiave di firma di debug.

AndroidLaunchActivity

Attività Android da avviare.

AndroidLinkMode

Specifica il tipo di collegamento da eseguire sugli assembly contenuti nel pacchetto Android. Usato solo nei progetti Applicazione Android. Il valore predefinito è SdkOnly. I valori validi sono:

  • None: non verranno tentati collegamenti.

  • SdkOnly: il collegamento verrà eseguito solo nelle librerie di classi base e non negli assembly dell'utente.

  • Full: il collegamento verrà eseguito nelle librerie di classi base e negli assembly dell'utente.

    Nota

    Quando si utilizza un valore AndroidLinkMode di Full, spesso le app smettono di funzionare, soprattutto quando viene usata la Reflection. Evita a meno che tu non sia davvero certo di quello che stai facendo.

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

Quando true, il sistema di compilazione collega i tipi annidati della classe Resource.Designer.cs Resource in tutti gli assembly. Il codice IL che usa tali tipi verrà aggiornato per usare i valori direttamente anziché accedere ai campi.

Il collegamento dei tipi annidati può avere un impatto ridotto sulla riduzione delle dimensioni dell'apk e può anche contribuire alle prestazioni di avvio. Sono collegate solo le build "Release".

Sperimentale. Progettato solo per funzionare con codice come

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

Gli altri scenari (ad esempio reflection) non saranno supportati.

AndroidLinkSkip

Specifica un elenco delimitato da punto e virgola (;) di nomi di assembly, senza estensioni di file, di assembly che non devono essere collegati. Usato solo nei progetti Applicazione Android.

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

Proprietà di tipo enumerazione con valori validi di proguard o r8. Indica quale riduttore di codice viene utilizzato per il codice Java. Il valore predefinito è una stringa vuota o proguard se $(AndroidEnableProguard) è True. Vedere la documentazione su D8 e R8.

AndroidLintEnabled

Proprietà bool che consente allo sviluppatore di eseguire lo strumento Android lint come parte del processo di packaging.

Quando $(AndroidLintEnabled)=True, vengono usate le proprietà seguenti:

È anche possibile usare le azioni di compilazione seguenti:

Vedere la guida di Lint per maggiori dettagli sullo strumento lint di Android.

ProblemiAbilitatiInAndroidLint

Proprietà stringa che rappresenta un elenco delimitato da virgole di problemi lint da abilitare.

Utilizzato solo quando $(AndroidLintEnabled)=True.

AndroidLintDisabledIssues

Proprietà di tipo stringa che rappresenta un elenco delimitato da virgole dei problemi di lint da disabilitare.

Utilizzato solo quando $(AndroidLintEnabled)=True.

AndroidLintCheckIssues

Una proprietà stringa che rappresenta un elenco di problemi di lint delimitato da virgole da controllare.

Utilizzato solo quando $(AndroidLintEnabled)=True.

Nota: verranno controllati solo questi problemi.

AndroidManagedSymbols

Proprietà booleana che controlla se i punti di sequenza vengono generati in modo che le informazioni sul nome file e sul numero di riga possano essere estratte dalle Release tracce dello stack.

AndroidManifest

Specifica un nome file da usare come modello per l'app AndroidManifest.xml. Durante la compilazione, verranno uniti gli altri valori necessari per generare il file AndroidManifest.xml effettivo. $(AndroidManifest) deve contenere il nome del pacchetto nell'attributo /manifest/@package.

AndroidManifestMerger

Specifica l'implementazione per l'unione di file AndroidManifest.xml . Si tratta di una proprietà di tipo enumerazione in cui legacy seleziona l'implementazione C# originale e manifestmerger.jar seleziona l'implementazione Java di Google.

Il valore predefinito è attualmente manifestmerger.jar. Se si vuole usare la versione precedente, aggiungere quanto segue al file csproj

<AndroidManifestMerger>legacy</AndroidManifestMerger>

La fusione di Google consente il supporto per xmlns:tools="http://schemas.android.com/tools" come descritto nella documentazione di Android.

AndroidManifestMergerExtraArgs

Proprietà stringa per fornire argomenti allo strumento di documentazione di Android.

Se si vuole ottenere un output dettagliato dallo strumento, è possibile aggiungere quanto segue a .csproj.

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

Proprietà di tipo enumerazione con valori validi di Xamarin o GoogleV2. Questo controlla quale repository viene usato da InstallAndroidDependencies destinazione per determinare quali pacchetti Android e versioni dei pacchetti sono disponibili e possono essere installati.

Xamarin è il repository Elenco approvato (consigliato) in Visual Studio SDK Manager.

GoogleV2 è il repository Elenco completo (non supportato) all'interno di Visual Studio SDK Manager.

Se $(AndroidManifestType) non è impostato, Xamarin viene usato .

AndroidManifestSource

Proprietà stringa che specifica un URI assoluto o un percorso di file locale esistente per il manifesto del repository usato da InstallAndroidDependencies destinazione. Quando questa proprietà non è impostata, viene usato il manifesto del repository predefinito selezionato da $(AndroidManifestType) .

Ad esempio:

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

AndroidManifestPlaceholders

Elenco delimitato da punto e virgola di coppie di sostituzione chiave-valore per AndroidManifest.xml, in cui ogni coppia ha il formato key=value.

Ad esempio, un valore della proprietà assemblyName=$(AssemblyName) definisce un ${assemblyName} segnaposto, che può essere visualizzato in AndroidManifest.xml:

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

In questo modo è possibile inserire variabili dal processo di compilazione nel file AndroidManifest.xml .

AndroidMultiDexClassListExtraArgs

Proprietà stringa che consente agli sviluppatori di passare argomenti al com.android.multidex.MainDexListBuilder durante la generazione del file multidex.keep.

Un caso specifico è se si riceve l'errore seguente durante la compilazione di dx.

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

Se viene visualizzato questo errore, è possibile aggiungere quanto segue a .csproj.

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

che consentirà al dx passaggio di avere esito positivo.

AndroidNdkDirectory

La $(AndroidNdkDirectory) proprietà specifica una directory di installazione personalizzata di Android NDK. Il percorso può essere impostato nel file di progetto o nella riga di comando:

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

Se questa proprietà non è impostata, .NET per Android individua l'NDK dall'ambiente di sviluppo Android configurato.

AndroidPackageFormat

Proprietà di tipo enumerazione con valori validi di apk o aab. Indica se si vuole creare un pacchetto dell'applicazione Android come file APK o Android App Bundle. I bundle di app sono un nuovo formato per le compilazioni Release destinate all'invio in Google Play. Il valore predefinito è apk.

Quando $(AndroidPackageFormat) è impostato su aab, vengono impostate altre proprietà di MSBuild, necessarie per i bundle di app Android:

Questa proprietà verrà considerata obsoleta per .net 6. Gli utenti devono passare alla versione più recente AndroidPackageFormats.

AndroidPackageFormats

Proprietà delimitata da punti e virgola con valori validi di apk e aab. Indica se si vuole creare un pacchetto dell'applicazione Android come file APK o Android App Bundle. I bundle di app sono un nuovo formato per le compilazioni Release destinate all'invio in Google Play.

Quando si compila una build di rilascio, è possibile generare sia un aab che un apk per la distribuzione in vari archivi.

L'impostazione di AndroidPackageFormats a aab;apk comporterà la generazione di entrambi. Se si imposta AndroidPackageFormats su aab o apk verrà generato un solo file.

Il valore predefinito è aab;apk per le compilazioni Release solo. L'uso apk di per il debug è più rapido, ma aab è supportato anche con una distribuzione rapida, se necessario, ad esempio durante il test dei pacchetti di asset.

AndroidPackageNamingPolicy

Proprietà di tipo enumerazione per specificare i nomi dei pacchetti del codice sorgente Java generato.

L'unico valore supportato è LowercaseCrc64.

PreparazioneAndroidPerLaBuildDipendeDa

Proprietà delimitata da punti e virgola che può essere usata per estendere il processo di compilazione Android. Le destinazioni MSBuild aggiunte a questa proprietà verranno eseguite all'inizio della compilazione per i tipi di progetto Application e Library. Questa proprietà è vuota per impostazione predefinita.

Esempio:

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

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

AndroidProguardMappingFile

Specifica la -printmapping regola proguard per r8. Ciò significa che il mapping.txt file verrà prodotto nella $(OutputPath) cartella . Questo file può quindi essere usato durante il caricamento di pacchetti in Google Play Store.

Per impostazione predefinita, questo file viene generato automaticamente quando si usa AndroidLinkTool=r8 e genera il file $(OutputPath)mapping.txtseguente.

Se non si vuole generare questo file di mapping, è possibile utilizzare la proprietà per interrompere la AndroidCreateProguardMappingFile creazione. Aggiungere quanto segue nel progetto

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

oppure usare -p:AndroidCreateProguardMappingFile=False nella riga di comando.

AndroidD8IgnoreWarnings

Specifica --map-diagnostics warning info che deve essere passato a d8. Il valore predefinito è True, ma può essere impostato su False per applicare un comportamento più rigoroso. Per informazioni dettagliate, vedere il codice sorgente D8 e R8.

Aggiunta in .NET 8.

AndroidR8IgnoreWarnings

Specifica la -ignorewarnings regola proguard per r8. Ciò consente di r8 continuare con la compilazione dex anche se vengono rilevati determinati avvisi. Il valore predefinito è True, ma può essere impostato su False per applicare un comportamento più rigoroso. Per informazioni dettagliate, vedere il manuale di ProGuard.

A partire da .NET 8, specifica --map-diagnostics warning info. Per informazioni dettagliate, vedere il codice sorgente D8 e R8.

AndroidR8JarPath

Percorso da r8.jar usare con il compilatore dex e il compattatore r8. Il valore predefinito è un percorso relativo all'installazione del workload .NET per Android. Per altre informazioni, vedere la documentazione su D8 e R8.

AndroidR8ObfuscationMode

Proprietà di tipo enumerazione che specifica come r8 offusca i nomi Java quando $(AndroidLinkTool) è r8. I valori supportati sono:

  • private-membersmantiene Java nomi di classe e di interfaccia e nomi di membri pubblici o protetti. I membri privati e privati del pacchetto possono essere offuscati e l'ottimizzazione R8 è abilitata.
  • disableddisabilita l'offuscamento, mantiene tutti i nomi Java e usa le impostazioni predefinite di Android R8 non ottimizzate.

Questa proprietà non disabilita la compattazione del codice R8.

Questa proprietà è stata introdotta in una versione di manutenzione .NET 10. Per impostazione predefinitadisabled, in .NET 10 e private-members in .NET 11 e versioni successive.

AndroidResgenExtraArgs

Specifica le opzioni della riga di comando da passare al comando aapt durante l'elaborazione di risorse e asset Android.

AndroidResgenFile

Specifica il nome del file di risorse da generare. Il modello predefinito lo imposta su Resource.designer.cs.

AndroidResourceDesignerClassModifier

Specifica il modificatore di classe per la classe intermedia Resource generata. I valori validi sono public e internal.

Per impostazione predefinita, sarà public.

Aggiunta in .NET 9.

AndroidSdkBuildToolsVersion

Il pacchetto di strumenti di compilazione di Android SDK fornisce gli strumenti aapt e zipalign , tra gli altri. Più versioni diverse del pacchetto di strumenti di compilazione possono essere installate contemporaneamente. Il pacchetto di strumenti di compilazione scelto per la creazione di pacchetti viene creato cercando e usando una versione "preferita" degli strumenti di compilazione, se presente. Se la versione "preferita" non è presente, viene usato il pacchetto di strumenti di compilazione installato con la versione superiore.

La proprietà MSBuild $(AndroidSdkBuildToolsVersion) contiene la versione preferita degli strumenti di compilazione. Il sistema di build .NET per Android fornisce un valore predefinito in Xamarin.Android.Common.targets, e il valore predefinito può essere sottoposto a override all'interno del file di progetto per scegliere una versione alternativa degli strumenti di build, se (ad esempio) la versione più recente di aapt si blocca mentre è noto che una versione di aapt precedente funziona correttamente.

AndroidSigningKeyAlias

Specifica l'alias per la chiave nell'archivio chiavi. Si tratta del valore keytool -alias usato durante la creazione dell'archivio chiavi.

AndroidSigningKeyPass

Specifica la password della chiave all'interno del file dell'archivio chiavi. Si tratta del valore immesso quando keytool chiede di immettere la password della chiave per $(AndroidSigningKeyAlias).

Questa proprietà supporta anche i prefissi env: e file:, che possono essere usati per specificare una variabile di ambiente o un file che contiene la password. Queste opzioni consentono di impedire la visualizzazione della password nei log di compilazione.

Ad esempio, per usare una variabile di ambiente denominata AndroidSigningPassword:

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

Per usare un file che si trova in C:\Users\user1\AndroidSigningPassword.txt:

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

Nota

Il env: prefisso non è supportato quando $(AndroidPackageFormat) è impostato su aab.

AndroidSigningKeyStore

Specifica il nome del file dell'archivio chiavi creato da keytool. Corrisponde al valore fornito all'opzione keytool -keystore.

AndroidSigningStorePass

Specifica la password di $(AndroidSigningKeyStore). Si tratta del valore fornito a keytool quando si è creato il file dell'archivio chiavi ed è stato chiesto di immettere la password dell'archivio chiavi.

Questa proprietà supporta anche i prefissi env: e file:, che possono essere usati per specificare una variabile di ambiente o un file che contiene la password. Queste opzioni consentono di impedire la visualizzazione della password nei log di compilazione.

Ad esempio, per usare una variabile di ambiente denominata AndroidSigningPassword:

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

Per usare un file che si trova in C:\Users\user1\AndroidSigningPassword.txt:

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

Nota

Il env: prefisso non è supportato quando $(AndroidPackageFormat) è impostato su aab.

AndroidSigningPlatformKey

Specifica il file di chiave da usare per firmare l'apk. Questa operazione viene usata solo durante la compilazione di system applicazioni.

AndroidSigningPlatformCert

Specifica il file di certificato da usare per firmare l'apk. Questa operazione viene usata solo durante la compilazione di system applicazioni.

AndroidStripILAfterAOT

Proprietà bool che specifica se i corpi dei metodi compilati da AOT verranno rimossi.

Il valore predefinito è falsee i corpi del metodo dei metodi compilati AOT non verranno rimossi.

Quando è impostato a true, $(AndroidEnableProfiledAot) è impostato su false per impostazione predefinita. Ciò significa che nelle build di configurazione del rilascio, in cui $(RunAOTCompilation) è true per impostazione predefinita, AOT è abilitato per tutti gli elementi. Ciò può comportare un aumento delle dimensioni dell'app. Questo comportamento può essere sottoposto a override impostando $(AndroidEnableProfiledAot) in modo esplicito su true all'interno del file di progetto.

Il supporto sperimentale per questa proprietà è stato aggiunto in .NET 8, rimosso in .NET 10.

AndroidStripNativeLibraries

Proprietà booleana che indica al processo di creazione del pacchetto di rimuovere i simboli di debug dai file delle librerie condivise native (.so).

Il valore predefinito è false e i simboli di debug, se presenti, verranno mantenuti durante la creazione del pacchetto.

AndroidSupportedAbis

Proprietà stringa che contiene un elenco delimitato da punto e virgola (;) di ABI che deve essere incluso in .apk.

I valori supportati includono:

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

AndroidTlsProvider

Questa proprietà è obsoleta e non deve essere utilizzata.

AndroidTypeMapImplementation

Proprietà in stile enumerazione che seleziona l'implementazione della mappa dei tipi. I valori validi sono llvm-ir e trimmable.

Il valore predefinito è trimmable quando $(PublishAot) è true e llvm-ir in caso contrario.

AndroidUseApkSigner

Proprietà bool che consente allo sviluppatore di usare lo apksigner strumento anziché jarsigner.

AndroidUseDefaultAotProfile

Proprietà bool che consente allo sviluppatore di eliminare l'utilizzo dei profili AOT predefiniti.

Per eliminare i profili AOT predefiniti, impostare la proprietà su false.

AndroidUseDesignerAssembly

Proprietà booleana che controlla se il sistema di compilazione genererà un _Microsoft.Android.Resource.Designer.dll anziché un Resource.Designer.cs file. I vantaggi di questo sono applicazioni più piccole e tempi di avvio più veloci.

Il valore predefinito è true in .NET 8.

Come autore nuget, è consigliabile spedire tre versioni dell'assembly se si vuole mantenere la compatibilità con le versioni precedenti. Uno per MonoAndroid, uno per net6.0-android e uno per net8.0-android. A tale scopo, è possibile usare Xamarin.Legacy.Sdk. Questa operazione è necessaria solo se il progetto della libreria Nuget usa AndroidResource elementi nel progetto o tramite una dipendenza.

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

In alternativa, disattivare questa impostazione fino a quando non siano state deprecate sia la versione classica che net7.0-android.

I progetti .NET 8 che scelgono di disattivare questa impostazione non potranno utilizzare riferimenti che lo usano. Se si tenta di usare un assembly in cui questa funzionalità è abilitata in un progetto che non lo fa, verrà visualizzato un XA1034 errore di compilazione.

Aggiunta in .NET 8.

AndroidUseInstrumentation

Proprietà booleana che indica che l'applicazione viene avviata tramite il relativo <instrumentation/> elemento anziché un <activity/>oggetto , ad esempio un host test o BenchmarkDotNet .

Quando true, dotnet run viene risolto $(AndroidInstrumentation) dall'oggetto generato AndroidManifest.xml e lo avvia con adb shell am instrument, anche se l'app dichiara anche un'attività avviabile.

Il valore predefinito è quando $(EnableMSTestRunner) è truetrue e false in caso contrario. Si noti che un'app senza lanci avviabili <activity/> tramite questa <instrumentation/> proprietà indipendentemente da questa proprietà.

Introdotto in .NET 11.

AndroidUseInterpreter

Proprietà booleana che fa sì che una MonoVM .apk contenga l'interprete Mono e non il normale JIT. Si tratta di un'impostazione solo mono e non è un'impostazione CoreCLR. Android non dispone di interpreti in .NET 11 e versioni successive.

Sperimentale.

UtilizzoVecchioCodiceVersioneAndroid

Proprietà booleana che consente allo sviluppatore di ripristinare il comportamento precedente di Xamarin.Android 8.2 del calcolo versionCode. Deve essere usata SOLO dagli sviluppatori con applicazioni esistenti in Google Play Store. È consigliabile usare la nuova proprietà $(AndroidVersionCodePattern).

AndroidUseManagedDesignTimeResourceGenerator

Proprietà booleana che passerà alla compilazione in fase di progettazione per usare il parser delle risorse gestite anziché aapt.

AndroidUseNegotiateAuthentication

Proprietà booleana che abilita il supporto per l'autenticazione NTLMv2/Negotiate in AndroidMessageHandler. Il valore predefinito è Falso.

Aggiunta in .NET 7.

AndroidUseSharedRuntime

Questa proprietà è obsoleta e non deve essere utilizzata.

AndroidVersionCode

Proprietà MSBuild che può essere usata come alternativa a /manifest/@android:versionCode nel file AndroidManifest.xml. Per acconsentire a questa funzionalità, è necessario abilitare anche <GenerateApplicationManifest>true</GenerateApplicationManifest>. Questa sarà l'impostazione predefinita in futuro in .NET 6.

Questa proprietà viene ignorata se $(AndroidCreatePackagePerAbi) e $(AndroidVersionCodePattern) vengono utilizzati.

@android:versionCode è un valore intero che deve essere incrementato per ogni versione di Google Play. Per ulteriori dettagli sui requisiti per , consultare la /manifest/@android:versionCode.

AndroidVersionCodePattern

Proprietà stringa che consente allo sviluppatore di personalizzare il versionCode nel manifesto. Per informazioni su come creare il Codice di Versione per l'APK e aiutarvi a decidere su , vedere versionCode.

Alcuni esempi: se abi è armeabi e versionCode nel manifesto è 123, {abi}{versionCode} genererà un elemento versionCode 1123 quando $(AndroidCreatePackagePerAbi) è True. In caso contrario genererà il valore 123. Se abi è x86_64 e versionCode nel manifesto è 44, verrà generato 544 quando $(AndroidCreatePackagePerAbi) è True. In caso contrario, genererà il valore 44.

Includendo una stringa di formato con riempimento a sinistra {abi}{versionCode:0000}, questo produce 50044 poiché stiamo riempiendo a sinistra versionCode con 0. In alternativa, è possibile usare il riempimento decimale, ad esempio {abi}{versionCode:D4} che equivale all'esempio precedente.

Sono supportate solo le stringhe in formato con riempimento "0" e "Dx" perché il valore DEVE essere un intero.

Elementi chiave predefiniti

  • abi - Inserisce l'abi di destinazione per l'app

    • 2 – armeabi-v7a
    • 3 – x86
    • 4 – arm64-v8a
    • 5 – x86_64
  • minSDK : inserisce il valore sdk minimo supportato da AndroidManifest.xml o 11 se non è definito nessuno.

  • versionCode : usa il codice della versione direttamente da Properties\AndroidManifest.xml.

È possibile definire gli elementi personalizzati usando la proprietà $(AndroidVersionCodeProperties) (definita successivamente).

Per impostazione predefinita, il valore verrà impostato su {abi}{versionCode:D6}. Se uno sviluppatore vuole mantenere il comportamento precedente può ignorare l'impostazione predefinita impostando la proprietà $(AndroidUseLegacyVersionCode) su true

AndroidVersionCodeProperties

Proprietà stringa che consente allo sviluppatore di definire elementi personalizzati da usare con .$(AndroidVersionCodePattern) Sono nella forma di una coppia key=value. Tutti gli elementi in value devono essere valori interi. Ad esempio: screen=23;target=$(_AndroidApiLevel). Come si può osservare, è possibile usare nella stringa proprietà MSBuild esistenti o personalizzate.

ApplicationId

Proprietà MSBuild che può essere usata come alternativa a /manifest/@package nel file AndroidManifest.xml. Per acconsentire a questa funzionalità, è necessario abilitare anche <GenerateApplicationManifest>true</GenerateApplicationManifest>. Questa sarà l'impostazione predefinita in futuro in .NET 6.

Per ulteriori dettagli sui requisiti per , consultare la /manifest/@package.

TitoloApplicazione

Proprietà MSBuild che può essere usata come alternativa a /manifest/application/@android:label nel file AndroidManifest.xml. Per acconsentire a questa funzionalità, è necessario abilitare anche <GenerateApplicationManifest>true</GenerateApplicationManifest>. Questa sarà l'impostazione predefinita in futuro in .NET 6.

Per ulteriori dettagli sui requisiti per , consultare la /manifest/application/@android:label.

VersioneApplicazione

Proprietà MSBuild che può essere usata come alternativa a /manifest/@android:versionName nel file AndroidManifest.xml. Per acconsentire a questa funzionalità, è necessario abilitare anche <GenerateApplicationManifest>true</GenerateApplicationManifest>. Questa sarà l'impostazione predefinita in futuro in .NET 6.

Per ulteriori dettagli sui requisiti per , consultare la /manifest/@android:versionName.

AotAssemblies

Proprietà booleana che determina se gli assembly verranno compilati in anticipo nel codice nativo e inclusi nelle applicazioni. Per impostazione predefinita, il valore della proprietà è False.

Deprecato (non più supportato) in .NET 7. Migra alla proprietà MSBuild $(RunAOTCompilation) nuova, poiché il supporto per $(AotAssemblies) verrà rimosso in una versione futura.

AProfUtilExtraOptions

Opzioni aggiuntive da passare a aprofutil.

BeforeBuildAndroidAssetPacks

Le Target di MSBuild elencate in questa proprietà verranno eseguite immediatamente prima della compilazione degli AssetPack elementi.

Aggiunta in .NET 9

BeforeGenerateAndroidManifest

I target MSBuild elencati in questa proprietà saranno eseguiti immediatamente prima di _GenerateJavaStubs.

Impostazione

Specifica la configurazione di compilazione da usare, ad esempio "Debug" o "Release". La proprietà Configuration viene usata per determinare i valori predefiniti per le altre proprietà che determinano il comportamento delle destinazioni. Configurazioni aggiuntive possono essere create nell'IDE.

Per impostazione predefinita, la Debug configurazione genererà Install e SignAndroidPackage è destinato a creare un pacchetto Android più piccolo che richiede la presenza di altri file e pacchetti per funzionare.

La configurazione predefinita Release comporterà la Install e SignAndroidPackage è destinato alla creazione di un pacchetto Android autonomo e può essere usato senza installare altri pacchetti o file.

DebugSymbols

Valore booleano che determina se il pacchetto Android è debuggabile, in combinazione con la proprietà $(DebugType). Un pacchetto di debug contiene simboli di debug, imposta l'attributo //application/@android:debuggable su truee aggiunge automaticamente INTERNET autorizzazione in modo che un debugger possa connettersi al processo. Un'applicazione è debugbile se DebugSymbols è TrueeDebugType è la stringa vuota o Full.

DebugType

Specifica il tipo di simboli di debug da generare come parte della compilazione, che influisce anche sull'eventuale debug dell'applicazione. I valori possibili includono:

  • Full: vengono generati simboli completi. Se l'oggetto DebugSymbols La proprietà MSBuild è anche True, quindi il pacchetto dell'applicazione è debugabile.

  • PdbOnly: vengono generati simboli "PDB". Il pacchetto dell'applicazione non è sottoponibile a debug.

Se DebugType non è impostato o è una stringa vuota, la proprietà DebugSymbols controlla se l'applicazione può essere sottoposta o meno a debug.

Dispositivo

Specifica il dispositivo o l'emulatore Android di destinazione quando si usano dotnet run --device <Device> o destinazioni MSBuild che interagiscono con i dispositivi ( ad esempio Run, Installo Uninstall).

Il valore deve essere il numero di serie completo del dispositivo o l'identificatore restituito da adb devices. Ad esempio, se il dispositivo seriale è emulator-5554, è necessario usare -p:Device=emulator-5554.

Se impostata, questa proprietà viene utilizzata per inizializzare la AdbTarget proprietà con il valore -s "<Device>".

Per altre informazioni sulla selezione dei dispositivi, vedere la specifica di selezione dei dispositivi .NET SDK.

Indirizzo Diagnostico

Valore fornito da dotnet-dsrouter , ad esempio 127.0.0.1, il componente dell'indirizzo IP di $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.

Quando questa proprietà non èempty e $(AndroidEnableProfiler) non è impostata in modo esplicito su false, abilita in modo implicito la diagnostica di Android. Per CoreCLR, l'endpoint TCP risultante viene in genere mantenuto nel loopback e viene usato da dotnet-dsrouter. Per un emulatore Android, usare 10.0.2.2 per raggiungere il computer di sviluppo. Per un dispositivo fisico, usare 127.0.0.1 con il port forwarding Android abilitato da dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Android.

Il valore predefinito è 127.0.0.1.

Configurazione diagnostica

Valore fornito da dotnet-dsrouter per DOTNET_DiagnosticPorts , ad esempio:

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

Quando la diagnostica è abilitata senza una configurazione esplicita, le impostazioni predefinite derivate sono indirizzo 127.0.0.1, porta 9000, DiagnosticSuspend=falsee DiagnosticListenMode=connect.

Si noti che il , carattere deve essere preceduto da un carattere di escape con %2c se passato nella riga di comando a dotnet build:

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

In questo modo viene impostata automaticamente la DOTNET_DiagnosticPorts variabile di ambiente in pacchetto all'interno dell'applicazione. In connect modalità, il runtime Android si connette all'endpoint TCP configurato e dotnet-dsrouter collega tale connessione allo strumento di diagnostica locale. L'endpoint non è autenticato e non crittografato, quindi mantenerlo in un'interfaccia di sviluppo locale.

L'impostazione di questa proprietà o di una delle proprietà del componente seguenti abilita in modo implicito la diagnostica Android quando $(AndroidEnableProfiler) non è impostata in modo esplicito su false.

DiagnosticListenMode

Valore fornito da dotnet-dsrouter , ad esempio connect, il componente della modalità di ascolto di $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.

Quando questa proprietà non èempty e $(AndroidEnableProfiler) non è impostata in modo esplicito su false, abilita in modo implicito la diagnostica di Android.

Il valore predefinito è connect.

DiagnosticPort

Valore fornito da dotnet-dsrouter , ad esempio 9000, il componente della porta di $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.

Quando questa proprietà non èempty e $(AndroidEnableProfiler) non è impostata in modo esplicito su false, abilita in modo implicito la diagnostica di Android.

Il valore predefinito è 9000.

DiagnosticSuspend

Valore booleano fornito da dotnet-dsrouter , ad esempio true/suspend o false/nosuspend, un componente di $(DiagnosticConfiguration) o DOTNET_DiagnosticPorts.

Quando questa proprietà non èempty e $(AndroidEnableProfiler) non è impostata in modo esplicito su false, abilita in modo implicito la diagnostica di Android.

Il valore predefinito è false.

EmbedAssembliesIntoApk

Proprietà booleana che determina se gli assembly dell'app devono essere incorporati nel pacchetto dell'applicazione.

Questa proprietà è l'inversa di $(AndroidEnableFastDeployment). I nuovi progetti devono usare $(AndroidEnableFastDeployment) per controllare la distribuzione rapida. Se entrambe le proprietà sono impostate, $(EmbedAssembliesIntoApk) ha la precedenza.

Questa proprietà deve essere True per le build di rilascio e False per le build di debug. Potrebbe dover essere True nelle build di debug se Fast Deployment non supporta il dispositivo di destinazione.

EnableCrashReport

Proprietà booleana che imposta la DOTNET_EnableCrashReport variabile di ambiente su 1 quando si usa il runtime CoreCLR o NativeAOT. Ciò consente la generazione di report di arresto anomalo all'avvio dell'applicazione.

Questa proprietà è False per impostazione predefinita e viene ignorata quando $(UseMonoRuntime) è True.

AbilitaDiagnostica

Proprietà Android SDK/MSBuild che abilita la diagnostica per il runtime selezionato. È un sinonimo di $(AndroidEnableProfiler) applicazioni Mono. Per CoreCLR, abilita la configurazione della porta di diagnostica usata da dotnet-trace e dotnet-gcdump.

$(EnableDiagnostics) non è uguale alla variabile DOTNET_EnableDiagnosticsdi ambiente di runtime CoreCLR . Il primo viene valutato dalle destinazioni Android SDK/MSBuild; quest'ultimo viene letto dal runtime quando specificato come variabile di ambiente.

Per impostazione predefinita, il valore della proprietà è False.

AbilitaLLVM

Proprietà booleana che determina se verrà utilizzato o meno LLVM durante la compilazione ahead-of-time degli assembly in codice nativo.

Per compilare un progetto con questa proprietà abilitata, è necessario installare Android NDK.

Per impostazione predefinita, il valore della proprietà è False.

Questa proprietà viene ignorata a meno che la proprietà MSBuild $(AotAssemblies) non sia True.

EnableMSTestRunner

Proprietà booleana che abilita lo strumento di esecuzione MSTest per i progetti di test Android. Se impostato su true, dotnet run avvierà l'applicazione tramite am instrument invece di am start, consentendo di segnalare i risultati dei test tramite il protocollo di strumentazione di Android.

Per impostazione predefinita, il valore della proprietà è False.

Introdotto in .NET 11.

EnableProguard

Proprietà booleana che determina se proguard viene eseguito come parte del processo di creazione del pacchetto per collegare il codice Java.

Per impostazione predefinita, il valore della proprietà è False.

Quando True, i file @(ProguardConfiguration) verranno usati per controllare proguard l'esecuzione.

EventSourceSupport

Se impostato su false, disabilita il supporto di EventSource di .NET dalle applicazioni Android ridotte. La disabilitazione di questa funzionalità impedisce il funzionamento degli strumenti dotnet-counters di diagnostica .NET, ma a vantaggio di una riduzione delle dimensioni dell'applicazione.

Impostare su false per impostazione predefinita nella modalità Release, a meno che $(EnableDiagnostics) o $(AndroidEnableProfiler) siano abilitati.

ManifestoApplicazioneGenera

Abilita o disabilita le proprietà MSBuild seguenti che generano valori nel file finale AndroidManifest.xml :

Il valore $(GenerateApplicationManifest) predefinito è true.

JavaMaximumHeapSize

Specifica il valore del valore del parametro Java-Xmx da usare durante la compilazione del .dex file come parte del processo di creazione dei pacchetti. Se il valore non è specificato, l'opzione -Xmx specifica per java il valore 1G. Questi valori sono richiesti più comunemente in Windows rispetto ad altre piattaforme.

È necessario specificare questa proprietà se la _CompileDex destinazione genera java.lang.OutOfMemoryError.

Personalizzare il valore modificando quanto segue:

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

Specifica le opzioni della riga di comando da passare a Java durante la compilazione del .dex file.

JarsignerTimestampAuthorityCertificateAlias

Questa proprietà consente di specificare un alias nell'archivio chiavi per un'autorità di timestamp. Per altri dettagli, vedere la documentazione relativa al supporto del timestamp della firma Java.

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

JarsignerTimestampAuthorityUrl

Questa proprietà consente di specificare un URL per un servizio di autorità di marcatura temporale. Può essere usato per assicurarsi che la .apk firma includa un timestamp. Per altri dettagli, vedere la documentazione relativa al supporto del timestamp della firma Java.

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

LinkerDumpDependencies

Una proprietà boolean che abilita la generazione di un file di dipendenze del linker. Questo file può essere usato come input per lo strumento illinkanalyzer.

Il file di dipendenze denominato linker-dependencies.xml.gz viene scritto nella directory del progetto. Su. NET5/6 viene scritto accanto agli assembly collegati nella obj/<Configuration>/android<ABI>/linked directory.

Il valore predefinito è Falso.

MandroidI18n

Questa proprietà MSBuild è obsoleta e non è più supportata.

MauiEnableFullReadyToRun

Proprietà booleana per .NET MAUI applicazioni Android che usano CoreCLR e sono incorporate nella Release configurazione con ReadyToRun abilitato. Quando questa proprietà non è impostata o false, MAUI usa readyToRun parziale con i profili MIBC predefiniti. Impostare questa proprietà su true per abilitare l'intero readyToRun. Questa proprietà non ha alcun effetto quando $(PublishReadyToRun) è false.

Full ReadyToRun aumenta le dimensioni dell'applicazione e del download, ma può potenzialmente migliorare le prestazioni di runtime perché sono precompilati più metodi.

Per altre informazioni su CoreCLR e ReadyToRun in .NET MAUI, vedere Runtime e compilazione in .NET MAUI.

MetricheSupporto

Quando impostato su false, disabilita il supporto di .NET alle Metriche per le applicazioni Android ridotte. La disabilitazione di questa funzionalità impedisce il funzionamento delle API System.Diagnostics.Metrics , ma a vantaggio di una riduzione delle dimensioni dell'applicazione.

Impostare su false per impostazione predefinita nella modalità Release, a meno che $(EnableDiagnostics) o $(AndroidEnableProfiler) siano abilitati.

MonoAndroidAssetPrefix

Specifica un prefisso del percorso che viene rimosso dall'inizio dei nomi file con un'azione di compilazione di AndroidAsset. per poter modificare la posizione delle risorse.

Il valore predefinito è Assets. Impostarlo su assets per la struttura del progetto Java.

MonoAndroidResourcePrefix

Specifica un prefisso del percorso che viene rimosso dall'inizio dei nomi file con un'azione di compilazione di AndroidResource. per poter modificare la posizione delle risorse.

Il valore predefinito è Resources. Impostarlo su res per la struttura del progetto Java.

MonoSymbolArchive

Nota

Si tratta di una proprietà MSBuild legacy di Xamarin.Android. Non disponibile in .NET 6+.

Proprietà booleana che controlla se vengono creati gli artefatti per un uso successivo con .mSYM, per estrarre le informazioni sul nome file e sul numero di riga reali dalle tracce dello stack di Release.

Questo è True per impostazione predefinita per le app "Release" con simboli di debug abilitati: $(EmbedAssembliesIntoApk) è True, $(DebugSymbols) è True e $(Optimize) è Vero.

PublishReadyToRun

Proprietà booleana che controlla se gli assembly vengono compilati in formato ReadyToRun quando si usa CoreCLR. Gli assembly ReadyToRun contengono sia codice MSIL che codice nativo. Ciò può migliorare il tempo di avvio dell'applicazione mantenendo la compatibilità JIT, ma aumenta le dimensioni dell'applicazione e del download.

Per le applicazioni Android che usano CoreCLR, questa proprietà viene impostata per impostazione predefinita true su nella Release configurazione e non è abilitata per impostazione predefinita nella Debug configurazione. ReadyToRun non si applica quando si usa Mono o NativeAOT.

ReadyToRun richiede il taglio. Se $(PublishTrimmed) non trueè , .NET per Android disabilita PublishReadyToRun e $(PublishReadyToRunComposite) genera l'avviso XA0119.

La compilazione ReadyToRun è composta per impostazione predefinita. Vedete $(PublishReadyToRunComposite). .NET MAUI usa anche ReadyToRun parziale con profili MIBC predefiniti. Vedere $(MauiEnableFullReadyToRun) per acconsentire esplicitamente a ReadyToRun completo.

Per altre informazioni, vedere Runtime e compilazione in .NET MAUI.

PublishReadyToRunComposite

Proprietà booleana che controlla se la compilazione ReadyToRun combina gli assembly dell'applicazione in un'immagine composita. Composite ReadyToRun abilita le ottimizzazioni tra assembly, ma può aumentare il tempo di compilazione.

Per le applicazioni Android che usano CoreCLR, questa proprietà viene true impostata per impostazione predefinita su quando $(PublishReadyToRun) è true. ReadyToRun, incluso ReadyToRun composito, deve $(PublishTrimmed) essere true.

RunAOTCompilation

Proprietà booleana che determina se gli assembly verranno compilati in anticipo con il compilatore Mono AOT e inclusi nelle applicazioni che usano il runtime Mono. Questa proprietà è False per impostazione predefinita per Debug le compilazioni e True per impostazione predefinita per Release le compilazioni che usano Mono. Non abilita ReadyToRun o NativeAOT.

Questa proprietà MSBuild sostituisce la $(AotAssemblies) proprietà MSBuild da Xamarin.Android. Questa è la stessa proprietà usata per Blazor WASM.

UseMonoRuntime

Proprietà booleana che controlla se le applicazioni Android usano il runtime Mono anziché CoreCLR per le .NET destinazioni 10 e precedenti supportate. Impostare questa proprietà su true per usare Mono o false per usare CoreCLR in tali destinazioni. $(PublishAot) ha la precedenza e seleziona NativeAOT per le compilazioni di pubblicazione o ottimizzate supportate quando è impostata su true.

Per impostazione predefinita, questa proprietà è true in .NET 10 e versioni precedenti, quindi le applicazioni Android usano Mono. In .NET 11 e versioni successive l'impostazione predefinita è false, quindi le applicazioni Android usano CoreCLR e un valore esplicito true viene rifiutato con NETSDK1242.

Per altre informazioni, vedere Runtime e compilazione in .NET MAUI.

WaitForExit

Proprietà booleana che controlla il comportamento di dotnet run quando si avviano applicazioni Android.

Se $(WaitForExit) non false è (impostazione predefinita), dotnet run eseguirà le seguenti attività:

  • Avviare l'applicazione Android
  • Output logcat del flusso filtrato per il processo dell'applicazione
  • Attendere che l'applicazione si chiuda o che l'utente prema Ctrl+C
  • Forzare l'interruzione dell'applicazione quando si preme Ctrl+C

Quando $(WaitForExit) è false, dotnet run avvierà semplicemente l'applicazione e restituirà immediatamente senza attendere che l'applicazione esesce o in streaming qualsiasi output.

Questa proprietà controlla anche se adb shell am instrument viene passato -w quando l'applicazione viene avviata tramite :$(AndroidInstrumentation)

$(WaitForExit) Avvio di un <activity/> Avvio di un <instrumentation/>
true (impostazione predefinita) adb shell am start -S -W adb shell am instrument -w -r
false adb shell am start -S adb shell am instrument -r

Poiché adb shell am instrument segnala solo i risultati una volta completata la strumentazione, $(WaitForExit) non deve essere false se è necessario l'output della strumentazione o un codice di uscita significativo. Questo aspetto è importante per scenari come l'esecuzione di test o un host BenchmarkDotNet , motivo per cui dotnet test usa sempre l'impostazione predefinita.

Introdotto in .NET 11.