Udostępnij za pośrednictwem


Właściwości budowania

Właściwości programu MSBuild kontrolują zachowanie obiektów docelowych.

Są one określone w pliku projektu, na przykład MyApp.csproj, w grupie właściwości MSBuild.

Uwaga / Notatka

Na platformie .NET dla systemu Android technicznie nie ma rozróżnienia między aplikacją a projektem powiązań, więc właściwości będą działać w obu tych przypadkach. W praktyce zdecydowanie zaleca się tworzenie oddzielnych projektów aplikacji i powiązań. Właściwości, które są używane głównie w projektach powiązań, są udokumentowane w przewodniku referencyjnym właściwości projektu powiązań MSBuild .

AdbTarget

Właściwość $(AdbTarget) określa urządzenie docelowe systemu Android, z których może zostać zainstalowany pakiet systemu Android lub z niego usunięty. Wartość tej właściwości jest taka sama jak adb opcja Urządzenie docelowe.

AfterGenerateAndroidManifest

Cele MSBuild wymienione w tej właściwości będą uruchamiane bezpośrednio po wewnętrznym celu _GenerateJavaStubs, w którym plik AndroidManifest.xml jest generowany w $(IntermediateOutputPath). Jeśli chcesz wprowadzić jakiekolwiek modyfikacje wygenerowanego AndroidManifest.xml pliku, możesz to zrobić przy użyciu tego punktu rozszerzenia.

AndroidAapt2CompileExtraArgs

Określa opcje wiersza polecenia, które mają być przekazywane do polecenia aapt2 compile podczas przetwarzania elementów i zasobów systemu Android.

AndroidAapt2LinkExtraArgs

Określa opcje wiersza polecenia, które mają być przekazywane do polecenia aapt2 link podczas przetwarzania zasobów i elementów systemu Android.

AndroidAddKeepAlives

Właściwość logiczna, która kontroluje, czy linker wstawi GC.KeepAlive() wywołania w projekty powiązane, aby zapobiec przedwczesnej kolekcji obiektów.

Wartość domyślna wynosi True dla kompilacji w konfiguracji wydania.

AndroidAotAdditionalArguments

Właściwość typu string, która umożliwia przekazywanie opcji do kompilatora Mono podczas zadania Aot w projektach, które mają ustawione $(AndroidEnableProfiledAot) lub $(AotAssemblies) na true. Wartość ciągu właściwości jest dodawana do pliku odpowiedzi podczas wywoływania kompilatora krzyżowego Mono.

Ogólnie rzecz biorąc, ta właściwość powinna pozostać pusta, ale w niektórych specjalnych scenariuszach może zapewnić przydatną elastyczność.

Właściwość $(AndroidAotAdditionalArguments) różni się od powiązanej $(AndroidExtraAotOptions) właściwości; $(AndroidAotAdditionalArguments) przekazuje pełne autonomiczne opcje rozdzielane spacjami, takie jak --verbose lub --debug do kompilatora AOT, natomiast $(AndroidExtraAotOptions) zawiera argumenty rozdzielane przecinkami, które są częścią --aot opcji kompilatora AOT.

AndroidAotCustomProfilePath

Plik, który aprofutil powinien zostać utworzony do przechowywania danych profilera.

AndroidAotProfiles

Właściwość ciągu, która umożliwia deweloperowi dodawanie profilów AOT z wiersza polecenia. Jest to rozdzielana średnikami lista ścieżek bezwzględnych.

AndroidAotProfilerPort

Port, z który aprofutil powinien nawiązać połączenie podczas uzyskiwania danych profilowania.

AndroidAotEnableLazyLoad

Włącz leniwe ładowanie zestawów AOT-d zamiast wstępnego ładowania ich podczas uruchamiania. Domyślna wartość to True dla kompilacji wydania z włączoną dowolną formą AOT.

Wprowadzone w .NET 6.

AndroidApkDigestAlgorithm

Wartość ciągu określająca algorytm skrótu do użycia z elementem jarsigner -digestalg.

Domyślna wartość to SHA-256.

AndroidApkSignerAdditionalArguments

Właściwość ciągu, która umożliwia deweloperowi przekazywanie argumentów narzędzia apksigner.

AndroidApkSigningAlgorithm

Wartość ciągu określająca algorytm podpisywania do użycia z jarsigner -sigalg.

Domyślna wartość to SHA256withRSA.

AndroidApplication

Wartość logiczna wskazująca, czy projekt jest przeznaczony dla aplikacji systemu Android (True) lub projektu biblioteki systemu Android (False lub nie istnieje).

W pakiecie systemu Android może znajdować się tylko jeden projekt zawierający <AndroidApplication>True</AndroidApplication>. (Niestety to wymaganie nie jest weryfikowane, co może spowodować subtelne i dziwaczne błędy dotyczące zasobów systemu Android).

AndroidApplicationJavaClass

Pełna nazwa klasy Java używana zamiast android.app.Application, gdy klasa dziedziczy z Android.App.Application.

Właściwość $(AndroidApplicationJavaClass) jest zazwyczaj ustawiana przez inne właściwości, takie jak $(AndroidEnableMultiDex) właściwość MSBuild.

AndroidAvoidEmitForPerformance

Właściwość logiczna określająca, czy System.Reflection.Emit jest "pomijany" w celu zwiększenia wydajności uruchamiania. Ta właściwość jest True domyślnie.

System.Reflection.Emit Użycie programu ma zauważalny wpływ na wydajność uruchamiania w systemie Android. To zachowanie jest domyślnie wyłączone dla następujących przełączników funkcji:

  • Switch.System.Reflection.ForceInterpretedInvoke: po drugim wywołaniu metody MethodInfo.Invoke() lub ConstructorInfo.Invoke()kod jest emitowany w celu zwiększenia wydajności powtarzających się wywołań.

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: po drugim wywołaniu w celu pobrania usługi z kontenera iniekcji zależności kod jest emitowany w celu zwiększenia wydajności powtarzających się wywołań.

W większości aplikacji systemu Android pożądane jest wyłączenie tego zachowania.

Aby uzyskać szczegółowe informacje o dostępnych przełącznikach funkcji, zobacz dokumentację przełączników funkcji bibliotek klas podstawowych .

Dodano do platformy .NET 8.

AndroidBinUtilsPath

Ścieżka do katalogu, który zawiera binutils dla systemu Android, takie jak ld natywny konsolidator i as natywny asembler. Te narzędzia znajdują się w obciążeniu platformy .NET dla systemu Android.

Domyślna wartość to $(MonoAndroidBinDirectory)\binutils\bin\.

AndroidBoundExceptionType

Wartość ciągu, która określa sposób propagacji wyjątków, gdy typ dostarczany przez .NET dla Androida implementuje typ lub interfejs .NET w kontekście typów Java, na przykład Android.Runtime.InputStreamInvoker i System.IO.Stream, lub Android.Runtime.JavaDictionary i System.Collections.IDictionary.

  • Java: Oryginalny typ wyjątku Java jest propagowany bez zmian.

    Java oznacza, że na przykład InputStreamInvoker nie implementuje poprawnie API System.IO.Stream, ponieważ Java.IO.IOException może zostać zgłoszony z Stream.Read() zamiast System.IO.IOException.

  • System: oryginalny typ wyjątku Java jest przechwytywany i owinięty w odpowiedni typ wyjątku platformy .NET.

    System oznacza, że na przykład InputStreamInvoker prawidłowo implementuje System.IO.Streamelement i Stream.Read()nie będzie zgłaszać Java.IO.IOException wystąpień. (Zamiast tego może zgłosić System.IO.IOException, który zawiera Java.IO.IOException jako wartość Exception.InnerException.)

    System jest wartością domyślną.

InterfejsyPowiązaneZAndroidemZawierająStałe

Właściwość logiczna określająca, czy powiązanie stałych w interfejsach będzie obsługiwane, czy też zostanie użyte obejście polegające na tworzeniu klasy IMyInterfaceConsts.

Domyślna wartość to True.

InterfejsyZwiązaneZAndroidemZawierająStatyczneIDefaultoweMetodyInterfejsów

Właściwość logiczna, która określa, czy w interfejsach będą obsługiwani domyślni i statyczni członkowie, czy będzie stosowane stare obejście polegające na tworzeniu klasy równorzędnej zawierającej statycznych członków, takiej jak abstract class MyInterface.

Wartość domyślna to True w .NET 6 i False dla wersji legacy.

InterfejsyPowiązaneZAndroidZawierająTypy

Właściwość logiczna, która określa, czy będą obsługiwane typy zagnieżdżone w interfejsach, czy zastosowane zostanie obejście polegające na stworzeniu typu niezagnieżdżonego, takiego jak IMyInterfaceMyNestedClass.

Wartość domyślna to True w .NET 6 oraz False dla wersji starszych.

PakietBudowaniaAplikacjiAndroid

Wartość logiczna wskazująca, czy utworzyć i podpisać pakiet (.apk). Ustawienie tej wartości na True jest równoważne użyciu elementu SignAndroidPackage cel kompilacji.

Ta właściwość jest False domyślnie.

AndroidBundleConfigurationFile

Określa nazwę pliku do użycia jako plik konfiguracji podczas bundletool kompilowania pakietu aplikacji systemu Android. Ten plik steruje pewnymi aspektami sposobu generowania plików APK z pakietu, takich jak podział wymiarów pakietu w celu utworzenia plików APK. Platforma .NET dla systemu Android automatycznie konfiguruje niektóre z tych ustawień, w tym listę rozszerzeń plików do pozostawienia nieskompresowanych.

Ta właściwość jest istotna tylko wtedy, gdy $(AndroidPackageFormat) jest ustawiona na aab.

AndroidBundleToolExtraArgs

Określa opcje wiersza polecenia, które mają być przekazywane do polecenia bundletool podczas kompilowania pakietów aplikacji.

AndroidClassParser

Właściwość ciągu, która kontroluje sposób .jar analizowania plików. Możliwe wartości to:

  • class-parse: bezpośrednio analizuje kod bajtowy Java za pomocą class-parse.exe, bez pomocy JVM.

  • jar2xml: ta wartość jest przestarzała i nie jest już obsługiwana.

AndroidCodegenTarget

Właściwość typu string, która kontroluje docelowe ABI dla generowania kodu. Możliwe wartości to:

  • XamarinAndroid: ta wartość jest przestarzała i nie jest już obsługiwana.

  • XAJavaInterop1: używaj Java.Interop do wywołań JNI. Wiązanie zestawów przy użyciu XAJavaInterop1 można kompilować i wykonywać tylko na Xamarin.Android 6.1 lub nowszym. Xamarin.Android 6.1 lub nowsza wiąże Mono.Android.dll z tą wartością.

  • JavaInterop1: wartość eksperymentalna, obecnie domyślna dla środowiska uruchomieniowego NativeAOT.

Domyślna wartość to XAJavaInterop1.

AndroidUtwórzPakietNaAbi

Właściwość logiczna określająca, czy należy utworzyć zestaw plików — po jednym na każde ABI wskazane w elemencie $(AndroidSupportedAbis) — zamiast obsługiwać wszystkie ABI w jednym .apk.

Zobacz również przewodnik Tworzenie APK-ów Specyficznych dla ABI.

AndroidCreateProguardMappingFile

Właściwość logiczna, która kontroluje, czy plik mapowania ProGuard jest generowany w ramach procesu kompilacji.

Dodanie następującego elementu do pliku csproj spowoduje wygenerowanie pliku i użycie AndroidProguardMappingFile właściwości do kontrolowania lokalizacji końcowego pliku mapowania.

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

Podczas tworzenia .aab plików plik mapowania jest automatycznie dołączany do pakietu. Nie ma potrzeby ręcznego przekazywania go do Sklepu Google Play. W przypadku korzystania z plików .apk, AndroidProguardMappingFile należy przekazać ręcznie.

Wartość domyślna to True w przypadku używania $(AndroidLinkTool)=r8.

AndroidDebugKeyAlgorithm

Określa domyślny algorytm do użycia dla elementu debug.keystore. Domyślna wartość to RSA.

WażnośćKluczaDebugowaniaAndroid

Określa domyślną ważność, która ma być używana dla elementu debug.keystore. Wartość domyślna to 10950 lub 30 * 365 lub 30 years.

AndroidDebugStoreType

Określa format pliku magazynu kluczy, który ma być używany dla elementu debug.keystore. Wartość domyślna to pkcs12.

AndroidDeviceUserId

Umożliwia wdrażanie i debugowanie aplikacji w ramach konta gościa lub konta służbowego. Wartość jest wartością uid uzyskaną z następującego polecenia adb:

adb shell pm list users

Powyższe polecenie zwróci następujące dane:

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

uid jest pierwszą wartością całkowitą. W powyższych danych wyjściowych są one 0 i 10.

AndroidDexTool

Właściwość w stylu wyliczeniowym mająca prawidłową wartość d8. Wcześniej wartość dx była obsługiwana w Xamarin.Android.

Wskazuje, który kompilator dex systemu Android jest używany podczas procesu kompilacji platformy .NET dla systemu Android. Domyślna wartość to d8. Zapoznaj się z naszą dokumentacją dotyczącą D8 i R8.

AndroidEnableDesugar

Właściwość logiczna określająca, czy desugar jest włączony. System Android nie obsługuje obecnie wszystkich funkcji języka Java 8, a domyślny łańcuch narzędzi implementuje nowe funkcje języka, wykonując przekształcenia kodu bajtowego o nazwie desugar, na danych wyjściowych kompilatora javac . Wartość domyślna to False, jeśli używasz $(AndroidDexTool)=dx i True, jeśli używasz $(AndroidDexTool)=d8.

AndroidEnableGooglePlayStoreChecks

Właściwość logiczna, która umożliwia deweloperom wyłączenie następujących kontroli sklepu Google Play: XA1004, XA1005 i XA1006. Wyłączenie tych kontroli jest przydatne dla deweloperów, którzy nie celują w Sklep Google Play i nie chcą uruchamiać tych kontroli.

AndroidEnableMarshalMethods

Właściwość typu boolean określająca, czy metody marshalingu w LLVM są włączone. Metody marshalowe LLVM to optymalizacja uruchamiania aplikacji, która wykorzystuje natywne punkty wejścia do rejestracji metod języka Java native.

Ta właściwość ma wartość False domyślnie.

Dodano do platformy .NET 8.

AndroidEnableMultiDex

Właściwość logiczna określająca, czy obsługa multi-dex będzie używana w końcowym obiekcie .apk.

Ta właściwość jest False domyślnie.

AndroidEnableProfiler

Synonim właściwości $(EnableDiagnostics) .

Wymagane do używania dotnet-trace lub dotnet-gcdump w aplikacjach systemu Android. Jeśli ustawiono tę wartość na true, aplikacja zawiera składnik diagnostyczny Mono. Ten składnik jest biblioteką natywną libmono-component-diagnostics_tracing.so .

Ta właściwość jest False domyślnie.

AndroidEnableObsoleteOverrideInheritance

Właściwość logiczna określająca, czy metody powiązane automatycznie dziedziczą [Obsolete] atrybuty z metod, które zastępują.

Obsługa tej właściwości została dodana w programie .NET 8.

Ta właściwość jest True domyślnie.

AndroidEnablePreloadAssemblies

Właściwość logiczna, która kontroluje, czy podczas uruchamiania procesu wszystkie zarządzane zestawy zawarte w pakiecie aplikacji są ładowane, czy nie.

Po ustawieniu na True, wszystkie zestawy dołączone do pakietu aplikacji zostaną załadowane podczas uruchamiania procesu, zanim zostanie wykonany jakikolwiek kod aplikacji.

W przypadku ustawienia wartości Falsezestawy będą ładowane tylko zgodnie z potrzebami. Ładowanie zestawów zgodnie z potrzebami umożliwia uruchamianie aplikacji szybciej i jest również bardziej spójne z semantykami platformy .NET dla komputerów stacjonarnych. Aby wyświetlić oszczędności czasu, ustaw właściwość systemu debug.mono.log w taki sposób, aby zawierała timing, a następnie poszukaj komunikatu Finished loading assemblies: preloaded w pliku adb logcat.

Aplikacje lub biblioteki, które używają wstrzykiwania zależności, mogą wymagać, aby ta właściwość była ustawiona w przypadku, gdy żądają, aby AppDomain.CurrentDomain.GetAssemblies() zwrócił wszystkie zestawy w pakiecie aplikacji, nawet jeśli zestaw nie byłby potrzebny.

Domyślnie ta wartość to False.

AndroidEnableProfiledAot

Właściwość logiczna określająca, czy profile AOT (Ahead-Of-Time) są lub nie są używane podczas kompilacji przed czasem.

Profile są wymienione na liście @(AndroidAotProfile) grupa elementów. Ta grupa elementów zawiera profile domyślne. Można ją zastąpić przez usunięcie istniejących profilów i dodanie własnych profilów AOT.

Ta właściwość jest False domyślnie.

AndroidEnableRestrictToAttributes

Właściwość wyliczeniowa z prawidłowymi wartościami obsolete oraz disable.

W przypadku ustawienia wartości obsolete, typy i elementy członkowskie oznaczone adnotacją Java androidx.annotation.RestrictTo lub znajdujące się w nieeksportowanych pakietach Java zostaną oznaczone atrybutem [Obsolete] w powiązaniu języka C#.

Ten [Obsolete] atrybut zawiera opisowy komunikat wyjaśniający, że właściciel pakietu Java uważa, że interfejs API jest "wewnętrzny" i ostrzega przed jego użyciem.

Ten atrybut ma również niestandardowy kod ostrzegawczy XAOBS001 dzięki czemu można go wyciszyć niezależnie od zwykłego przestarzałego interfejsu API.

Po ustawieniu disable interfejs API zostanie wygenerowany jak zwykle, bez dodatkowych atrybutów. (Jest to takie samo zachowanie jak przed platformą .NET 8).

Dodanie [Obsolete] atrybutów zamiast automatycznego usuwania interfejsu API zostało wykonane w celu zachowania zgodności interfejsu API z istniejącymi pakietami. Jeśli zamiast tego wolisz usunąć członków, którzy mają adnotację @RestrictTolub znajdują się w niewyeksportowanych pakietach języka Java, możesz użyć pliku Przekształć oprócz tej właściwości, aby zapobiec powiązaniu tych typów:

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

Obsługa tej właściwości została dodana w programie .NET 8.

Ta właściwość jest domyślnie ustawiona na obsolete.

AndroidEnableSGenConcurrent

Właściwość logiczna określająca, czy stosowany jest współbieżny kolektor GC Mono.

Ta właściwość jest False domyślnie.

AndroidErrorOnCustomJavaObject

Właściwość logiczna określająca, czy typy mogą implementować Android.Runtime.IJavaObjectbez dziedziczenia z Java.Lang.Object lub Java.Lang.Throwable:

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

    public void Dispose()
    {
    }
}

Jeśli wartość True, takie typy wygenerują błąd XA4212, w przeciwnym razie zostanie wygenerowane ostrzeżenie XA4212.

Ta właściwość jest True domyślnie.

AndroidExplicitCrunch

Ta nieruchomość nie jest już wspierana.

AndroidExtraAotOptions

Właściwość ciągu, która umożliwia przekazywanie opcji do kompilatora Mono w trakcie zadania Aot dla projektów, które mają ustawioną wartość $(AndroidEnableProfiledAot) lub $(AotAssemblies) na true. Wartość ciągu właściwości jest dodawana do pliku odpowiedzi podczas wywoływania kompilatora krzyżowego Mono.

Ogólnie rzecz biorąc, ta właściwość powinna pozostać pusta, ale w niektórych specjalnych scenariuszach może zapewnić przydatną elastyczność.

Właściwość $(AndroidExtraAotOptions) różni się od powiązanej właściwości $(AndroidAotAdditionalArguments); $(AndroidAotAdditionalArguments) umieszcza argumenty rozdzielane przecinkami w opcji --aot kompilatora Mono. $(AndroidExtraAotOptions) zamiast tego przekazuje pełne autonomiczne opcje rozdzielane spacjami, takie jak --verbose lub --debug do kompilatora.

TypSzybkiegoWdrożeniaAndroida

: Rozdzielona dwukropkiem lista wartości do kontrolowania typów, które można wdrożyć do katalogu szybkiego wdrażania na urządzeniu docelowym, gdy $(EmbedAssembliesIntoApk) właściwość MSBuild to False. Jeśli zasób jest szybko wdrażany, nie jest osadzony w wygenerowanym .apk, co może przyspieszyć wdrażanie. Im więcej jest szybko wdrażane, tym rzadziej .apk należy ponownie kompilować, a proces instalacji może być szybszy. Prawidłowe wartości to:

  • Assemblies: Wdrażanie zestawów aplikacji.
  • Dexes: Wdrażanie .dex plików, bibliotek natywnych i map typów. Wartość Dexes można używać tylko na urządzeniach z systemem Android 4.4 lub nowszym (API-19).

Domyślna wartość to Assemblies.

Obsługa szybkiego wdrażania zasobów i elementów za pośrednictwem tego systemu została usunięta w zatwierdzeniu f0d565fe. Wynikało to z faktu, że do działania wymagane było użycie przestarzałego interfejsu API.

**Obsługa tej funkcji została usunięta na platformie .NET 9

Eksperymentalne.

AndroidFragmentType

Określa domyślny w pełni kwalifikowany typ, który ma być używany dla wszystkich <fragment> elementów układu podczas generowania kodu powiązań układu. Wartość domyślna to standardowy typ systemu Android Android.App.Fragment .

AndroidGenerateJniMarshalMethods

Właściwość logiczna, która umożliwia generowanie metod marshalingu JNI w ramach procesu kompilacji. Znacznie zmniejsza użycie System.Reflection w kodzie pomocnika powiązania.

Domyślna wartość to False. Jeśli deweloperzy chcą korzystać z nowych metod marshalingu JNI, mogą ustawić

<AndroidGenerateJniMarshalMethods>True</AndroidGenerateJniMarshalMethods>

w pliku .csproj. Alternatywnie podaj właściwość w wierszu polecenia

-p:AndroidGenerateJniMarshalMethods=True

Eksperymentalne. Domyślna wartość to False.

AndroidGenerateJniMarshalMethodsAdditionalArguments (Generowanie dodatkowych argumentów metody JNI do obsługi języka Android)

Właściwość ciągu, która może służyć do dodawania parametrów do jnimarshalmethod-gen.exe wywołania i jest przydatna do debugowania, dzięki czemu można użyć opcji, takich jak -v, -dlub --keeptemp .

Wartość domyślna to pusty ciąg. Można go ustawić w .csproj pliku lub w wierszu polecenia. Przykład:

<AndroidGenerateJniMarshalMethodsAdditionalArguments>-v -d --keeptemp</AndroidGenerateJniMarshalMethodsAdditionalArguments>

or:

-p:AndroidGenerateJniMarshalMethodsAdditionalArguments="-v -d --keeptemp"

AndroidGenerateLayoutBindings

Włącza generowanie layout code-behind, jeśli jest ustawione na true, lub wyłącza je całkowicie, jeśli jest ustawione na false.

Domyślna wartość to false.

AndroidGenerateResourceDesigner

Domyślna wartość to true. Gdy jest ustawiona wartość false, wyłącza generowanie elementu Resource.designer.cs.

AndroidHttpClientHandlerType

Określa domyślną System.Net.Http.HttpMessageHandler implementację System.Net.Http.HttpClient , która będzie używana przez konstruktor domyślny. Wartość jest kwalifikowaną nazwą typu zestawu podklasy HttpMessageHandler , która jest odpowiednia do użycia z System.Type.GetType(string).

W przypadku platformy .NET 6 i nowszych ta właściwość działa tylko wtedy, gdy jest używana razem z $(UseNativeHttpHandler)=true. Najbardziej typowe wartości tej właściwości to:

  • Xamarin.Android.Net.AndroidMessageHandler: Użyj interfejsów API języka Java systemu Android do wykonywania żądań HTTP. Jest ona podobna do starszej Xamarin.Android.Net.AndroidClientHandler wersji z kilkoma ulepszeniami. Obsługuje protokoły HTTP 1.1 i TLS 1.2. Jest to domyślna procedura obsługi komunikatów HTTP.

  • System.Net.Http.SocketsHttpHandler, System.Net.Http: domyślna procedura obsługi komunikatów na platformie .NET. Obsługuje protokół HTTP/2, TLS 1.2 i jest to zalecana procedura obsługi komunikatów HTTP do użycia z klientem Grpc.Net.Client. Ta wartość jest równoważna $(UseNativeHttpHandler)=false.

  • Usuń/pusty ciąg, który jest odpowiednikiem System.Net.Http.HttpClientHandler, System.Net.Http

    Odpowiada opcji Domyślne na stronach właściwości programu Visual Studio.

    Kreator nowego projektu wybiera tę opcję dla nowych projektów, gdy minimalna wersja systemu Android jest skonfigurowana do systemu Android w wersji 4.4.87 lub nowszej w programie Visual Studio lub gdy platformy docelowe są ustawione na nowoczesne programowanie lub maksymalna zgodność w programie Visual Studio dla komputerów Mac.

  • System.Net.Http.HttpClientHandler, System.Net.Http: Użyj zarządzanego HttpMessageHandler elementu.

    Odpowiada opcji Zarządzane na stronach właściwości programu Visual Studio.

Uwaga / Notatka

W programie .NET 6 określony typ nie może być Xamarin.Android.Net.AndroidClientHandler, System.Net.Http.HttpClientHandler ani dziedziczyć z którejkolwiek z tych klas. Jeśli migrujesz z "klasycznej" wersji Xamarin.Android, użyj AndroidMessageHandler lub stwórz swój własny niestandardowy obsługiwacz na jego bazie.

Uwaga / Notatka

Obsługa właściwości $(AndroidHttpClientHandlerType) działa przez ustawienie zmiennej środowiskowej XA_HTTP_CLIENT_HANDLER_TYPE. Wartość $XA_HTTP_CLIENT_HANDLER_TYPE znaleziona w pliku z akcją kompilacji @(AndroidEnvironment) będzie mieć pierwszeństwo.

AndroidIgnoreAllJniPreload

Wartość logiczna, która, jeśli jest ustawiona na true wartość, zwalnia wszystkie natywne biblioteki JNI z obowiązku wstępnego ładowania podczas uruchamiania aplikacji. Domyślnie wszystkie takie biblioteki zostaną załadowane przez środowisko uruchomieniowe na wczesnym etapie uruchamiania aplikacji, aby zapewnić ich właściwą inicjację. Jednak w niektórych przypadkach może to nie być pożądane zachowanie, a ta właściwość pozwala skutecznie ją wyłączyć.

Niektóre biblioteki ramowe, które muszą zostać załadowane podczas uruchamiania aplikacji, nie są objęte działaniem tej właściwości.

Zapoznaj się także z informacjami w @(AndroidNativeLibraryNoJniPreload) w celu uzyskania bardziej szczegółowego sposobu wyłączenia bibliotek z mechanizmu wstępnego ładowania.

AndroidIncludeWrapSh

Wartość logiczna wskazująca, czy skrypt osłony Androida (wrap.sh) powinien zostać zapakowany do pakietu APK. Wartość domyślna to false , ponieważ skrypt otoki może znacząco wpływać na sposób uruchamiania i działania aplikacji, a skrypt powinien zostać uwzględniony tylko w razie potrzeby, na przykład podczas debugowania lub zmiany zachowania uruchamiania/środowiska uruchomieniowego aplikacji.

Skrypt jest dodawany do projektu przy użyciu elementu @(AndroidNativeLibrary) akcja kompilacji, ponieważ jest umieszczona w tym samym katalogu co biblioteki natywne specyficzne dla architektury i musi mieć nazwę wrap.sh.

Najprostszym sposobem określenia ścieżki do skryptu wrap.sh jest umieszczenie go w katalogu o nazwie po architekturze docelowej. Takie podejście będzie działać, jeśli masz tylko jeden wrap.sh przypadający na architekturę:

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

Jeśli jednak Twój projekt wymaga więcej niż jednego elementu wrap.sh na architekturę, dla różnych celów, takie podejście nie będzie skuteczne. Zamiast tego w takich przypadkach można określić nazwę przy użyciu Link metadanych elementu AndroidNativeLibrary:

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

Jeśli metadane Link są używane, ścieżka określona w wartości musi być prawidłową biblioteką specyficzną dla natywnej architektury, względną do katalogu głównego APK. Format ścieżki to lib\ARCH\wrap.sh, gdzie ARCH może być jeden z następujących:

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

AndroidUwzględnijPakietyZasobówWPakiecie

Ta właściwość określa, czy kompilacja pakietów zasobów jest automatycznie dołączana do pliku końcowego .aab . Wartość domyślna to true.

W niektórych przypadkach użytkownik może chcieć zwolnić tymczasowe wydanie. W takich przypadkach użytkownik nie musi aktualizować pakietu zasobów. Szczególnie jeśli zawartość pakietu zasobów nie uległa zmianie. Ta właściwość umożliwia użytkownikowi pomijanie pakietów zasobów, jeśli nie są one wymagane.

Dodano w programie .NET 9

AndroidInstallJavaDependencies

Domyślna wartość to true w przypadku kompilacji z wiersza poleceń. Gdy jest ustawiona wartość true, włącza instalację Java SDK podczas uruchamiania docelowego celu <InstallAndroidDependencies/>.

Obsługa tej właściwości została dodana na platformie .NET 9.

AndroidJavadocVerbosity

Określa, jak "szczegółowe" powinny być komentarze dokumentacji XML języka C# podczas importowania dokumentacji Javadoc w projektach powiązań.

Wymaga użycia @(JavaSourceJar) akcja kompilacji.

Właściwość $(AndroidJavadocVerbosity) jest przypominająca wyliczenie, z możliwymi wartościami full lub intellisense.

Domyślna wartość to intellisense.

AndroidKeyStore

Wartość logiczna wskazująca, czy należy używać niestandardowych informacji o podpisywaniu. Wartość domyślna to False, co oznacza, że domyślny klucz podpisywania debugowania będzie używany do podpisywania pakietów.

AndroidLaunchActivity

Aktywność systemu Android do uruchomienia.

AndroidLinkMode

Określa typ łączenia , który ma być wykonywany na zestawach zawartych w pakiecie systemu Android. Używane tylko w projektach aplikacji systemu Android. Wartość domyślna to SdkOnly. Prawidłowe wartości to:

  • Brak: nie zostanie podjęta próba połączenia.

  • SdkOnly: łączenie będzie wykonywane tylko w bibliotekach klas bazowych, a nie na zestawach użytkownika.

  • Pełne: łączenie będzie wykonywane w bibliotekach klas bazowych i zestawach użytkowników.

    Uwaga / Notatka

    AndroidLinkMode Użycie wartości Full często powoduje uszkodzenie aplikacji, szczególnie w przypadku użycia odbicia. Unikaj, chyba że naprawdę wiesz, co robisz.

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

Gdy true, system kompilacji połączy zagnieżdżone typy klasy Resource.Designer.cs Resource we wszystkich zestawach. Kod IL, który używa tych typów, zostanie zaktualizowany w celu bezpośredniego używania wartości zamiast uzyskiwania dostępu do pól.

Łączenie zagnieżdżonych typów może mieć niewielki wpływ na zmniejszenie rozmiaru pliku apk, a także może pomóc w wydajności uruchamiania. Tylko kompilacje "Release" są połączone.

Eksperymentalny Przeznaczone tylko do pracy z kodem, takim jak

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

Żadne inne scenariusze (takie jak odbicie) nie będą obsługiwane.

AndroidLinkSkip

Określa rozdzielaną średnikami (;) listę nazw zestawów bez rozszerzeń plików zestawów, które nie powinny być połączone. Używane tylko w projektach aplikacji systemu Android.

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

Właściwość typu wyliczeniowego, który może przyjmować wartości proguard lub r8. Wskazuje, który zmniejszanie kodu jest używane dla kodu Java. Wartość domyślna to pusty ciąg lub proguard jeśli $(AndroidEnableProguard) ma wartość True. Zapoznaj się z naszą dokumentacją dotyczącą D8 i R8.

AndroidLintEnabled

Właściwość logiczna, która umożliwia deweloperowi uruchomienie narzędzia android lint w ramach procesu pakowania.

Gdy $(AndroidLintEnabled)=True, są używane następujące właściwości:

Mogą być również używane następujące akcje kompilacji:

Aby uzyskać więcej informacji dotyczących narzędzi lint systemu Android, zobacz Pomoc Lint.

ZezwoloneProblemyAndroidLint

Właściwość typu string, która jest rozdzielaną przecinkami listą problemów lint do włączenia.

Używane tylko wtedy, gdy $(AndroidLintEnabled)=True.

ProblemyWyłączonePrzezAndroidLint

Właściwość typu ciąg, która jest listą problemów lintowania oddzielonych przecinkami do wyłączenia.

Używane tylko wtedy, gdy $(AndroidLintEnabled)=True.

AndroidLintCheckIssues

Właściwość tekstowa, która jest listą problemów lint rozdzieloną przecinkami do sprawdzenia.

Używane tylko wtedy, gdy $(AndroidLintEnabled)=True.

Uwaga: zostaną sprawdzone tylko te problemy.

AndroidManagedSymbols

Właściwość logiczna, która kontroluje, czy punkty sekwencyjne są generowane, aby można było wyodrębnić informacje o nazwie pliku i numerze wiersza ze śladów stosu Release.

AndroidManifest

Określa nazwę pliku do użycia jako szablon dla aplikacji AndroidManifest.xml. Podczas kompilacji wszystkie inne niezbędne wartości zostaną scalone, aby utworzyć rzeczywisty element AndroidManifest.xml. Element $(AndroidManifest) musi zawierać nazwę pakietu w atrybucie /manifest/@package .

AndroidManifestMerger

Określa implementację scalania plikówAndroidManifest.xml . Jest to właściwość typu wyliczeniowego, w której legacy wybiera oryginalną implementację języka C# i manifestmerger.jar wybiera implementację języka Java firmy Google.

Wartość domyślna to obecnie manifestmerger.jar. Jeśli chcesz użyć starej wersji, dodaj następujący kod do pliku csproj

<AndroidManifestMerger>legacy</AndroidManifestMerger>

Fuzja firmy Google umożliwia obsługę xmlns:tools="http://schemas.android.com/tools" zgodnie z opisem w dokumentacji systemu Android.

AndroidManifestMergerExtraArgs

Właściwość typu string do przekazywania argumentów do narzędzia dokumentacji systemu Android.

Jeśli chcesz uzyskać szczegółowe dane wyjściowe z narzędzia, możesz dodać następujące dane do pliku .csproj.

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

Właściwość stylu wyliczenia z prawidłowymi wartościami Xamarin lub GoogleV2. To kontroluje, które repozytorium jest używane przez InstallAndroidDependencies Docelowy element służy do określenia, które pakiety Android i wersje pakietów są dostępne i można je zainstalować.

Xamarin to repozytorium Zatwierdzona lista (rekomendowana) w Menedżer zestawu SDK programu Visual Studio.

GoogleV2 to repozytorium Pełna lista (nieobsługiwana) w Menedżerze zestawu SDK programu Visual Studio.

Jeśli $(AndroidManifestType) nie jest ustawiona, Xamarin zostanie użyta.

AndroidManifestPlaceholders

Rozdzielana średnikami lista par zastępczych klucz-wartość dla AndroidManifest.xml, gdzie każda para ma format key=value.

Na przykład wartość właściwości assemblyName=$(AssemblyName) definiuje ${assemblyName} symbol zastępczy, który następnie może pojawić się w AndroidManifest.xml:

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

Zapewnia to sposób wstawiania zmiennych z procesu kompilacji do pliku AndroidManifest.xml .

AndroidMultiDexClassListExtraArgs

Właściwość typu string, która umożliwia deweloperom przekazywanie argumentów do com.android.multidex.MainDexListBuilder podczas generowania pliku multidex.keep.

Jeśli podczas kompilacji pojawia się następujący błąd dx, jest to jeden konkretny przypadek.

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

Jeśli wystąpi ten błąd, możesz dodać następujący kod do pliku .csproj.

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

które umożliwią, aby krok dx zakończył się powodzeniem.

AndroidPackageFormat

Właściwość stylu wyliczenia z prawidłowymi wartościami apk lub aab. Wskazuje, czy chcesz spakować aplikację systemu Android jako plik APK lub pakiet aplikacji systemu Android. Pakiety aplikacji to nowy format Release kompilacji przeznaczonych do przesyłania w sklepie Google Play. Domyślna wartość to apk.

Gdy $(AndroidPackageFormat) ustawiono wartość aab, ustawiane są także inne właściwości programu MSBuild, które wymagane są dla pakietów aplikacji systemu Android.

Ta właściwość będzie wycofana w przypadku platformy .NET 6. Użytkownicy powinni przełączyć się na nowsze AndroidPackageFormats.

AndroidPackageFormats

Właściwość oddzielana średnikami z prawidłowymi wartościami apk i aab. Wskazuje, czy chcesz spakować aplikację systemu Android jako plik APK lub pakiet aplikacji systemu Android. Pakiety aplikacji to nowy format Release kompilacji przeznaczonych do przesyłania w sklepie Google Play.

Podczas kompilowania wersji przeznaczonej do wydania warto wygenerować zarówno aab, jak i apk do dystrybucji w różnych sklepach.

Ustawienie AndroidPackageFormats na aab;apk spowoduje wygenerowanie obu. Ustawienie AndroidPackageFormats wartości aab lub apk spowoduje wygenerowanie tylko jednego pliku.

Wartość domyślna to aab;apk tylko dla kompilacji Release. Zaleca się kontynuowanie używania tylko apk do debugowania.

AndroidPackageNamingPolicy

Właściwość typu wyliczeniowego określająca nazwy pakietów Java dla wygenerowanego kodu źródłowego Java.

Jedyną obsługiwaną wartością jest LowercaseCrc64.

AndroidPrepareForBuildDependsOn

Właściwość rozdzielana średnikami, która może służyć do rozszerzania procesu kompilacji systemu Android. Obiekty docelowe programu MSBuild dodane do tej właściwości będą wykonywane na wczesnym etapie kompilacji zarówno dla typów projektów Aplikacji, jak i Biblioteki. Ta właściwość jest domyślnie pusta.

Przykład:

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

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

AndroidProguardMappingFile

Określa regułę -printmapping proguard dla r8. Oznacza to, mapping.txt że plik zostanie utworzony w folderze $(OutputPath) . Ten plik może być następnie używany podczas przekazywania pakietów do Sklepu Google Play.

Domyślnie ten plik jest generowany automatycznie podczas korzystania z pliku AndroidLinkTool=r8 i wygeneruje następujący plik $(OutputPath)mapping.txt.

Jeśli nie chcesz wygenerować tego pliku mapowania, możesz użyć AndroidCreateProguardMappingFile właściwości , aby zatrzymać tworzenie pliku . Dodaj następujący kod w projekcie

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

lub użyj polecenia -p:AndroidCreateProguardMappingFile=False w wierszu polecenia.

AndroidD8IgnorujOstrzeżenia

Określa --map-diagnostics warning info do przekazania do d8. Wartość domyślna to True, ale można ustawić na False, aby wymusić bardziej rygorystyczne zachowanie. Aby uzyskać szczegółowe informacje, zobacz kod źródłowy D8 i R8 .

Dodano do platformy .NET 8.

AndroidR8IgnoreWarnings

Określa regułę -ignorewarnings proguard dla r8. Umożliwia r8 to kontynuowanie kompilacji dex nawet w przypadku napotkania niektórych ostrzeżeń. Wartość domyślna to True, ale można ustawić False, aby wymusić bardziej rygorystyczne zachowanie. Aby uzyskać szczegółowe informacje, zobacz podręcznik ProGuard .

Począwszy od platformy .NET 8, określa wartość --map-diagnostics warning info. Aby uzyskać szczegółowe informacje, zobacz kod źródłowy D8 i R8 .

AndroidR8JarPath

Ścieżka do r8.jar użycia z kompilatorem r8 dex-compiler i shrinker. Wartość domyślna to ścieżka do instalacji pakietu .NET dla systemu Android. Aby uzyskać więcej informacji, zobacz naszą dokumentację dotyczącą D8 i R8.

AndroidResgenExtraArgs

Określa opcje linii poleceń, które mają być przekazywane do polecenia aapt podczas przetwarzania zasobów Androida.

AndroidResgenFile

Określa nazwę pliku zasobu do wygenerowania. Domyślny szablon ustawia to na Resource.designer.cs.

AndroidResourceDesignerClassModifier

Określa modyfikator klas dla klasy pośredniej Resource , która jest generowana. Prawidłowe wartości to public i internal.

Domyślnie to będzie public.

Dodano do platformy .NET 9.

AndroidSdkBuildToolsVersion

Pakiet narzędzi kompilacji zestawu ANDROID SDK udostępnia między innymi narzędzia aapt i zipalign . Wiele różnych wersji pakietu narzędzi kompilacji może być zainstalowanych jednocześnie. Pakiet narzędzi kompilacji wybrany do pakietowania odbywa się poprzez sprawdzenie i użycie "preferowanej" wersji narzędzi kompilacji, jeśli jest obecna; jeśli "preferowana" wersja nie jest obecna, używany jest pakiet narzędzi kompilacji o najwyższej wersji zainstalowanej.

Właściwość $(AndroidSdkBuildToolsVersion) MSBuild zawiera preferowaną wersję narzędzi kompilacji. System kompilacji .NET dla Androida zapewnia domyślną wartość w elemencie Xamarin.Android.Common.targets, a wartość ta może zostać zastąpiona w pliku projektu, aby wybrać alternatywną wersję narzędzi kompilacyjnych, jeśli (na przykład) najnowsza wersja aapt ulega awarii, podczas gdy poprzednia wersja aapt jest znana jako działająca.

AndroidSigningKeyAlias

Określa alias klucza w magazynie kluczy. Jest to wartość keytool -alias używana podczas tworzenia magazynu kluczy.

AndroidSigningKeyPass

Określa hasło klucza w pliku magazynu kluczy. Jest to wartość wprowadzona na żądanie keytool, gdy wyświetla się komunikat Enter key password for $(AndroidSigningKeyAlias).

Ta właściwość obsługuje również prefiksy env: i file:, których można użyć do określenia zmiennej środowiskowej lub pliku zawierającego hasło. Te opcje umożliwiają zapobieganie wyświetlaniu hasła w dziennikach kompilacji.

Aby na przykład użyć zmiennej środowiskowej o nazwie AndroidSigningPassword:

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

Aby użyć pliku znajdującego się w lokalizacji C:\Users\user1\AndroidSigningPassword.txt:

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

Uwaga / Notatka

Prefiks env: nie jest obsługiwany, gdy $(AndroidPackageFormat) jest ustawiony na aab.

AndroidSigningKeyStore

Określa nazwę pliku magazynu kluczy utworzonego przez keytool. Odpowiada to wartości podanej opcji keytool -keystore .

AndroidSigningStorePass

Określa hasło dla $(AndroidSigningKeyStore). Jest to wartość podana keytool podczas tworzenia pliku magazynu kluczy i zapytania Wprowadź hasło magazynu kluczy:.

Ta właściwość obsługuje również prefiksy env: i file:, których można użyć do określenia zmiennej środowiskowej lub pliku zawierającego hasło. Te opcje umożliwiają zapobieganie wyświetlaniu hasła w dziennikach kompilacji.

Aby na przykład użyć zmiennej środowiskowej o nazwie AndroidSigningPassword:

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

Aby użyć pliku znajdującego się w lokalizacji C:\Users\user1\AndroidSigningPassword.txt:

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

Uwaga / Notatka

Prefiks env: nie jest obsługiwany, gdy wartość $(AndroidPackageFormat) jest ustawiona na aab.

AndroidSigningPlatformKey

Określa plik klucza, który ma być używany do podpisywania pliku apk. Jest to używane tylko podczas kompilowania system aplikacji.

AndroidSigningPlatformCert

Określa plik certyfikatu, który ma być używany do podpisywania pliku apk. Jest to używane tylko podczas kompilowania system aplikacji.

AndroidStripILAfterAOT

Właściwość logiczna określająca, czy ciała metod skompilowanych metod AOT zostaną usunięte.

Wartość domyślna to false, a elementy metody skompilowanych metod AOT nie zostaną usunięte.

Gdy ustawione jest na true, $(AndroidEnableProfiledAot) jest domyślnie ustawiane na false. Oznacza to, że w kompilacjach konfiguracji wydania — w której $(RunAOTCompilation) jest true domyślnie — funkcja AOT jest włączona dla wszystkich elementów. Może to spowodować zwiększenie rozmiaru aplikacji. To zachowanie można zastąpić, jawnie ustawiając $(AndroidEnableProfiledAot) na true w pliku projektu.

Obsługa eksperymentalna tej właściwości została dodana na platformie .NET 8, usunięta na platformie .NET 10.

AndroidStripNativeLibraries

Boolowska właściwość, która nakazuje procesowi pakowania usuwać symbole debugowania z natywnych bibliotek współdzielonych (.so plików).

Wartość domyślna to false i symbole debugowania, jeśli istnieją, zostaną zachowane podczas pakowania.

AndroidSupportedAbis

Właściwość ciągu zawierająca listę rozdzielaną średnikiem (;) ABI, które powinny zostać uwzględnione w obiekcie .apk.

Obsługiwane wartości to:

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

AndroidTlsProvider

Ta właściwość jest przestarzała i nie powinna być używana.

AndroidUseAapt2

Była to właściwość platformy Xamarin.Android, która nie ma wpływu na platformę .NET dla systemu Android. aapt2 jest zawsze używany i nie można go wyłączyć.

AndroidUseApkSigner

Właściwość logiczna, która umożliwia deweloperowi korzystać z narzędzia apksigner zamiast jarsigner.

AndroidUseDefaultAotProfile

Właściwość logiczna, która umożliwia deweloperowi wyłączenie użycia domyślnych profilów AOT.

Aby pominąć domyślne profile AOT, ustaw właściwość na false.

AndroidUseDesignerAssembly

Właściwość logiczna, która kontroluje, czy system kompilacji wygeneruje plik _Microsoft.Android.Resource.Designer.dll zamiast pliku Resource.Designer.cs. Korzyści wynikające z tego są mniejsze aplikacje i krótszy czas uruchamiania.

Wartość domyślna to true w .NET 8.

Jako autor Nuget zaleca się udostępnienie trzech wersji zestawu, jeśli chcesz zachować kompatybilność wsteczną. Jeden dla MonoAndroid, jeden dla net6.0-android i jeden dla net8.0-android. Możesz to zrobić przy użyciu zestawu Xamarin.Legacy.Sdk. Jest to wymagane tylko wtedy, gdy projekt Biblioteki Nuget korzysta z AndroidResource elementów w projekcie lub za pośrednictwem zależności.

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

Możesz też wyłączyć to ustawienie, dopóki nie zostanie wycofana zarówno wersja klasyczna, jak i net7.0-android.

Projekty platformy .NET 8, które zdecydują się wyłączyć to ustawienie, nie będą mogły korzystać z odwołań, które go używają. Jeśli spróbujesz użyć zestawu, który ma tę funkcję włączoną w projekcie, który nie, zostanie wyświetlony XA1034 błąd kompilacji.

Dodano do platformy .NET 8.

AndroidUseInterpreter

Właściwość logiczna, która powoduje .apk, że interpreter mono jest używany, a nie normalny tryb JIT.

Eksperymentalny

AndroidUseLegacyVersionCode

Właściwość logiczna, która umożliwia deweloperowi przywrócenie obliczeń versionCode z powrotem do starego zachowania przed Xamarin.Android 8.2. Powinno to być używane tylko dla deweloperów z istniejącymi aplikacjami w Sklepie Google Play. Zdecydowanie zaleca się użycie nowej $(AndroidVersionCodePattern) właściwości.

AndroidUseManagedDesignTimeResourceGenerator

Właściwość logiczna, która przełączy kompilacje podczas fazy projektowania do używania analizatora zasobów zarządzanych zamiast aapt.

AndroidUseNegotiateAuthentication

Właściwość logiczna, która umożliwia obsługę uwierzytelniania NTLMv2/Negotiate w programie AndroidMessageHandler. Wartość domyślna to False.

Dodano w programie .NET 7.

AndroidUseSharedRuntime

Ta właściwość jest przestarzała i nie powinna być używana.

AndroidVersionCode

Właściwość MSBuild, która może być używana jako alternatywa /manifest/@android:versionCode dla pliku AndroidManifest.xml . Aby wyrazić zgodę na tę funkcję, należy również włączyć funkcję <GenerateApplicationManifest>true</GenerateApplicationManifest>. Będzie to wartość domyślna w programie .NET 6.

Ta właściwość jest ignorowana, jeśli $(AndroidCreatePackagePerAbi) i $(AndroidVersionCodePattern) jest używana.

@android:versionCode to wartość całkowita, która musi być zwiększana dla każdej wersji sklepu Google Play. Aby uzyskać więcej informacji na temat wymagań dotyczących programu , zobacz /manifest/@android:versionCode.

AndroidVersionCodePattern

Właściwość ciągu, która umożliwia deweloperowi dostosowanie elementu versionCode w manifeście. Aby uzyskać informacje na temat podejmowania decyzji, zobacz versionCode.

Niektóre przykłady, jeśli abi jest armeabi i versionCode w manifeście to 123, {abi}{versionCode} wygeneruje wartość versionCode równą 1123 gdy $(AndroidCreatePackagePerAbi) ma wartość True; w przeciwnym razie wygeneruje wartość 123. Jeśli abi jest x86_64 i versionCode w manifeście jest 44. Spowoduje to wygenerowanie 544 gdy $(AndroidCreatePackagePerAbi) wynosi True, w przeciwnym razie wygeneruje wartość 44.

Jeśli dołączymy ciąg formatu dopełnienia po lewej {abi}{versionCode:0000}, to wygeneruje 50044, ponieważ wypełniamy versionCode za pomocą 0. Alternatywnie można użyć dopełnienia dziesiętnego, takiego jak {abi}{versionCode:D4} który robi to samo, co w poprzednim przykładzie.

Obsługiwane są tylko ciągi formatowania dopełniaczy "0" i "Dx", ponieważ wartość MUSI być liczbą całkowitą.

Wstępnie zdefiniowane elementy klucza

  • ABI — wstawia docelowe ABI dla aplikacji

    • 2 – armeabi-v7a
    • 3 – x86
    • 4 – arm64-v8a
    • 5 – x86_64
  • minSDK — wstawia minimalną obsługiwaną wartość SDK wziętą z AndroidManifest.xml lub 11, jeśli żadna z nich nie jest zdefiniowana.

  • versionCode — używa kodu wersji bezpośrednio z pliku Properties\AndroidManifest.xml.

Elementy niestandardowe można zdefiniować przy użyciu $(AndroidVersionCodeProperties) właściwości (zdefiniowanej dalej).

Domyślnie wartość zostanie ustawiona na {abi}{versionCode:D6}. Jeśli deweloper chce zachować stare zachowanie, można przesłonić domyślne ustawienia, konfigurując właściwość $(AndroidUseLegacyVersionCode) na true.

AndroidVersionCodeProperties

Właściwość ciągu, która umożliwia deweloperowi definiowanie elementów niestandardowych do użycia z elementem $(AndroidVersionCodePattern). Mają formę pary key=value. Wszystkie elementy w obiekcie value powinny być wartościami całkowitymi. Na przykład: screen=23;target=$(_AndroidApiLevel). Jak widać, możesz użyć istniejących lub niestandardowych właściwości narzędzia MSBuild wewnątrz ciągu.

Identyfikator aplikacji

Właściwość MSBuild, która może być używana jako alternatywa /manifest/@package dla pliku AndroidManifest.xml . Aby wyrazić zgodę na tę funkcję, należy również włączyć funkcję <GenerateApplicationManifest>true</GenerateApplicationManifest>. Będzie to wartość domyślna w programie .NET 6.

Aby uzyskać więcej informacji na temat wymagań dotyczących programu , zobacz /manifest/@package.

NazwaAplikacji

Właściwość MSBuild, która może być używana jako alternatywa /manifest/application/@android:label dla pliku AndroidManifest.xml . Aby wyrazić zgodę na tę funkcję, należy również włączyć funkcję <GenerateApplicationManifest>true</GenerateApplicationManifest>. Będzie to wartość domyślna w programie .NET 6.

Aby uzyskać więcej informacji na temat wymagań dotyczących programu , zobacz /manifest/application/@android:label.

WersjaAplikacji

Właściwość MSBuild, która może być używana jako alternatywa /manifest/@android:versionName dla pliku AndroidManifest.xml . Aby wyrazić zgodę na tę funkcję, należy również włączyć funkcję <GenerateApplicationManifest>true</GenerateApplicationManifest>. Będzie to wartość domyślna w programie .NET 6.

Aby uzyskać więcej informacji na temat wymagań dotyczących programu , zobacz /manifest/@android:versionName.

AotAssemblies

Właściwość logiczna określająca, czy moduły będą kompilowane wyprzedzająco do kodu natywnego i uwzględnione w aplikacjach, czy nie. Ta właściwość jest False domyślnie.

Przestarzałe na platformie .NET 7. Zamiast tego migruj do nowej właściwości MSBuild $(RunAOTCompilation), ponieważ wsparcie dla $(AotAssemblies) zostanie usunięte w przyszłej wersji.

AProfUtilDodatkoweOpcje

Dodatkowe opcje przekazywania do aprofutil.

BeforeBuildAndroidAssetPacks

Cele programu MSBuild wymienione w tej właściwości będą uruchamiane bezpośrednio przed skompilowaniem elementów AssetPack.

Dodano w programie .NET 9

PrzedWygenerowaniemAndroidManifest

Obiekty docelowe programu MSBuild wymienione w tej właściwości będą uruchamiane bezpośrednio przed _GenerateJavaStubs.

Konfiguracja

Określa konfigurację kompilacji do użycia, taką jak "Debug" lub "Release". Właściwość Configuration służy do określania wartości domyślnych dla innych właściwości, które określają zachowanie obiektu docelowego. Dodatkowe konfiguracje można utworzyć w środowisku IDE.

DomyślnieDebug konfiguracja spowoduje Install i SignAndroidPackage ma na celu tworzenie mniejszego pakietu Androida, który będzie wymagał obecności innych plików i pakietów do działania.

Domyślna konfiguracja Release spowoduje, że element Install i SignAndroidPackage docelowo tworzy pakiet Android samodzielny, który może być używany bez instalowania innych pakietów lub plików.

DebugSymbols

Wartość logiczna określająca, czy pakiet systemu Android jest debugowalny, w połączeniu z właściwością $(DebugType) . Pakiet debugowalny zawiera symbole debugowania, ustawia //application/@android:debuggable atrybut na true, a następnie automatycznie dodaje element INTERNET uprawnienie umożliwiające dołączanie debugera do procesu. Aplikacja jest debugowalna, jeśli DebugSymbols jest TrueiDebugType jest pustym ciągiem lub Full.

Typ debugowania

Określa typ symboli debugowania do wygenerowania w ramach kompilacji, co ma również wpływ na to, czy aplikacja jest debugowana. Możliwe wartości to:

  • Pełne: generowane są pełne symbole. Jeśli DebugSymbols Właściwość MSBuild jest również ustawiona na True, wtedy pakiet aplikacji jest debugowalny.

  • PdbOnly: są generowane symbole "PDB". Pakiet aplikacji nie jest debugowalny.

Jeśli DebugType nie jest ustawiony lub jest pustym ciągiem, właściwość określa, DebugSymbols czy aplikacja jest debugowalna.

Urządzenie

Określa, które urządzenie z systemem Android lub emulator ma być celem podczas korzystania z dotnet run --device <Device> lub obiektów docelowych programu MSBuild, które współdziałają z urządzeniami (takimi jak Run, Install lub Uninstall).

Wartość musi być pełnym numerem seryjnym lub identyfikatorem urządzenia zwróconym przez adb devices. Jeśli na przykład numer seryjny urządzenia to emulator-5554, należy użyć polecenia -p:Device=emulator-5554.

Po ustawieniu ta właściwość jest używana do inicjowania właściwości AdbTarget o wartości -s "<Device>".

Aby uzyskać więcej informacji na temat wyboru urządzenia, zobacz specyfikację wyboru urządzenia zestawu .NET SDK.

Adres diagnostyczny

Wartość dostarczana przez dotnet-dsrouter taka jak 127.0.0.1, składnik adresu IP z $(DiagnosticConfiguration) lub $DOTNET_DiagnosticPorts.

Niejawnie włącza składnik diagnostyczny Mono, co oznacza, że $(EnableDiagnostics)/$(AndroidEnableProfiler) ustawiono na true.

Wartość domyślna to 127.0.0.1.

Konfiguracja diagnostyczna

Wartość podana przez dotnet-dsrouter dla $DOTNET_DiagnosticPorts, taka jak:

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

Należy pamiętać, że znak , musi zostać zescapowany za pomocą %2c, jeśli zostanie przekazany w wierszu polecenia do dotnet build:

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

Spowoduje to automatyczne ustawienie zmiennej środowiskowej $DOTNET_DiagnosticPorts spakowanej wewnątrz aplikacji.

Niejawnie włącza składnik diagnostyczny Mono, co oznacza, że $(EnableDiagnostics)/$(AndroidEnableProfiler) jest ustawione na true.

DiagnosticListenMode

Wartość podana przez dotnet-dsrouter , taka jak connect, składnik trybu nasłuchiwania $(DiagnosticConfiguration) lub $DOTNET_DiagnosticPorts.

Niejawnie włącza składnik diagnostyczny Mono, co oznacza, że $(EnableDiagnostics), / i $(AndroidEnableProfiler) są ustawione na true.

Wartość domyślna to connect.

DiagnosticPort

Wartość podana przez dotnet-dsrouter, taka jak 9000, składnik portu $(DiagnosticConfiguration) lub $DOTNET_DiagnosticPorts.

Niejawnie włącza składnik diagnostyczny Mono, co oznacza, że $(EnableDiagnostics)/$(AndroidEnableProfiler) jest ustawione na true.

Wartość domyślna to 9000.

DiagnosticSuspend

Wartość logiczna, dostarczana przez dotnet-dsrouter, taka jak true/suspend lub false/nosuspend, będąca składnikiem $(DiagnosticConfiguration) lub $DOTNET_DiagnosticPorts.

Niejawnie włącza składnik diagnostyczny Mono, co oznacza, że $(EnableDiagnostics)/$(AndroidEnableProfiler) jest ustawiony na true.

Wartość domyślna to false.

EmbedAssembliesIntoApk

Właściwość logiczna określająca, czy zestawy aplikacji powinny być osadzone w pakiecie aplikacji.

Ta właściwość powinna być ustawiona na True dla kompilacji Release i na False dla kompilacji Debug. Może być konieczne użycie buildów debugowania, jeśli szybkie wdrażanie nie obsługuje urządzenia docelowego.

Gdy ta właściwość ma wartość False, wówczas właściwość $(AndroidFastDeploymentType) Właściwość MSBuild kontroluje również, co zostanie osadzone w .apk, co może wpływać na czas wdrażania i odbudowy.

WłączDiagnostykę

Synonim właściwości $(AndroidEnableProfiler) .

Wymagane do używania dotnet-trace lub dotnet-gcdump w aplikacjach systemu Android. Jeśli ustawiono tę wartość na true, aplikacja zawiera składnik diagnostyczny Mono. Ten składnik jest biblioteką natywną libmono-component-diagnostics_tracing.so .

Ta właściwość jest False domyślnie.

Włączenie LLVM

Właściwość logiczna określająca, czy LLVM będzie używany podczas kompilowania zestawów do kodu natywnego w trybie Ahead-of-Time.

Aby utworzyć projekt z włączoną tą właściwością, należy zainstalować zestaw NDK systemu Android.

Ta właściwość jest False domyślnie.

Ta właściwość jest ignorowana, chyba że $(AotAssemblies) właściwość MSBuild ma wartość True.

Włącz Proguard

Właściwość logiczna określająca, czy proguard jest uruchamiana w ramach procesu pakowania w celu połączenia kodu Java.

Ta właściwość jest False domyślnie.

Kiedy True pliki @(ProguardConfiguration) będą używane do kontrolowania wykonywania proguard.

EventSourceSupport

Po ustawieniu wartości false, wyłącza obsługę EventSource platformy .NET w przycinanych aplikacjach mobilnych systemu Android. Wyłączenie tej funkcji uniemożliwiłoby działanie narzędzi diagnostycznych platformy .NET, takich jak dotnet-counters, co jednak zmniejsza rozmiar aplikacji.

Ustawione na false domyślnie w trybie Release, chyba że $(EnableDiagnostics) albo $(AndroidEnableProfiler) są włączone.

GenerowanieManifestuAplikacji

Włącza lub wyłącza następujące właściwości programu MSBuild, które emitują wartości w pliku końcowym AndroidManifest.xml :

Wartość $(GenerateApplicationManifest) domyślna to true.

JavaMaximumHeapSize

Określa wartość parametru java-Xmx , która ma być używana podczas kompilowania .dex pliku w ramach procesu pakowania. Jeśli nie określono -Xmx , opcja zaopatruje Java w wartość 1G. Okazało się, że jest to często wymagane w systemie Windows w porównaniu z innymi platformami.

Określenie tej właściwości jest konieczne, jeśli _CompileDex element docelowy zgłasza wartość java.lang.OutOfMemoryError.

Dostosuj wartość, zmieniając:

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

Określa opcje wiersza polecenia, które mają być przekazywane do języka Java podczas kompilowania .dex pliku.

JarsignerTimestampAuthorityCertificateAlias

Ta właściwość umożliwia określenie aliasu w magazynie kluczy dla urzędu sygnowania czasowego. Aby uzyskać więcej informacji, zobacz dokumentację obsługi znacznika czasu podpisu Java.

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

JarsignerTimestampAuthorityUrl

Ta właściwość umożliwia określenie adresu URL dla usługi autoryzacji znaczników czasu. Może to służyć do upewnienia się, że .apk podpis zawiera sygnaturę czasową. Więcej szczegółów znajdziesz w dokumentacji Obsługi znaczników czasowych sygnatur w języku Java.

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

LinkerDumpDependencies

Właściwość logiczna, która umożliwia generowanie pliku zależności linkera. Ten plik może służyć jako dane wejściowe dla narzędzia illinkanalyzer .

Plik zależności o nazwie linker-dependencies.xml.gz jest zapisywany w katalogu projektu. Na platformie .NET5/6 jest zapisywane obok powiązanych zestawów w katalogu obj/<Configuration>/android<ABI>/linked.

Wartość domyślna to False.

MandroidI18n

Ta właściwość MSBuild jest przestarzała i nie jest już obsługiwana.

MetricsSupport

Gdy wartość jest ustawiona na false, wyłącza obsługę metryk dla platformy .NET w zoptymalizowanych aplikacjach systemu Android. Wyłączenie tej funkcji uniemożliwiłoby działanie takich interfejsów API, jak System.Diagnostics.Metrics, ale z korzyścią dla zmniejszenia rozmiaru aplikacji.

Domyślnie ustawione na false w trybie Release, chyba że $(EnableDiagnostics) lub $(AndroidEnableProfiler) są włączone.

MonoAndroidAssetPrefix

Określa prefiks ścieżki, który jest usuwany z początku nazw plików, które mają akcję kompilacji AndroidAsset. Umożliwia to zmianę lokalizacji zasobów.

Domyślna wartość to Assets. Zmień tę wartość na assets dla struktury projektu Java.

MonoAndroidResourcePrefix

Określa prefiks ścieżki, który jest usuwany z początku nazw plików podczas akcji kompilacji AndroidResource. Umożliwia to zmianę lokalizacji zasobów.

Domyślna wartość to Resources. Zmień tę wartość na res dla struktury projektu Java.

MonoSymbolArchive

Uwaga / Notatka

Była to starsza właściwość MSBuild z platformy Xamarin.Android. Niedostępne na platformie .NET 6+.

Właściwość logiczna, która kontroluje, czy .mSYM artefakty są tworzone do późniejszego użycia z elementem mono-symbolicate, aby wyodrębnić "rzeczywistą" nazwę pliku i informacje o numerze wiersza ze śladów stosu wydania.

Jest to wartość True domyślnie dla aplikacji "Release", które mają włączone symbole debugowania: $(EmbedAssembliesIntoApk) ma wartość True, $(DebugSymbols) ma wartość True i $(Optimize) ma wartość True.

RunAOTCompilation

Właściwość logiczna określająca, czy moduły będą kompilowane wyprzedzająco do kodu natywnego i uwzględnione w aplikacjach, czy nie. Ta właściwość jest domyślnie False dla kompilacji Debug i domyślnie True dla kompilacji Release.

Ta właściwość MSBuild zastępuje właściwość MSBuild $(AotAssemblies) z Xamarin.Android. Jest to ta sama właściwość używana dla platformy Blazor WASM.

WaitForExit

Właściwość logiczna, która kontroluje zachowanie dotnet run podczas uruchamiania aplikacji systemu Android.

Jeśli $(WaitForExit) nie jest false (wartość domyślna), dotnet run będzie:

  • Uruchamianie aplikacji systemu Android
  • Przesyłanie strumienia logcat filtrowanych danych wyjściowych do procesu aplikacji
  • Poczekaj na zakończenie działania aplikacji lub naciśnij klawisze Ctrl+C
  • Wymuś zatrzymanie aplikacji po naciśnięciu klawiszy Ctrl+C

Kiedy $(WaitForExit) ma wartość false, dotnet run uruchomi aplikację za pomocą adb shell am start i natychmiast wróci bez oczekiwania na zakończenie aplikacji lub przesyłania jakichkolwiek danych wyjściowych.

Wprowadzono w programie .NET 11.