Udostępnij za pośrednictwem


Jak mogę przeprowadzić migrację mojej aplikacji do Xamarin.Forms wersji 5.0?

Xamarin.Forms 5.0 zawiera następujące zmiany powodujące niezgodność:

  • Expander został przeniesiony do zestawu narzędzi Xamarin Community Toolkit. Aby uzyskać więcej informacji, zobacz Funkcje przeniesione z programu Xamarin.Forms.
  • MediaElement został przeniesiony do zestawu narzędzi Xamarin Community Toolkit. Aby uzyskać więcej informacji, zobacz Funkcje przeniesione z programu Xamarin.Forms.
  • Pliki DataPages i skojarzone projekty zostały usunięte z Xamarin.Formsprogramu .
  • MasterDetailPage zmieniono nazwę na FlyoutPage. MasterBehavior Podobnie nazwa wyliczenia została zmieniona na FlyoutLayoutBehavior.
  • Odwołania do UIWebView zostały usunięte z Xamarin.Forms systemu iOS.
  • Obsługa programu Visual Studio 2017 została usunięta.
  • Plik XFCorePostProcessor.Tasks został usunięty. Ten projekt wstrzyknął IL, aby zachować Xamarin.Forms zgodność 2.5.

Ponadto projekty systemu Android i platformy UWP utworzone przy Xamarin.Forms użyciu wersji 5.0 będą wymagały aktualizacji.

Ważne

Podczas aktualizowania aplikacji do Xamarin.Forms wersji 5.0 upewnij się, że aktualizujesz każdy projekt odwołujący Xamarin.Forms się do pakietu NuGet do identycznej wersji.

Android

Projekty systemu Android utworzone przy Xamarin.Forms użyciu wersji 5.0 wymagają zainstalowania platformy AndroidX (Android 10.0) w środowisku projektowym. Można to zrobić za pomocą menedżera zestawu SDK systemu Android. Aby uzyskać więcej informacji na temat systemu AndroidX, zobacz Temat AndroidX migration in Xamarin.Forms.

Projekty systemu Android będą następnie wymagały kilku aktualizacji w celu poprawnego skompilowania.

Minimalna wersja elementu TargetFrameworkVersion

Xamarin.Forms Wersja 5.0 wymaga minimalnej wersji platformy docelowej 10.0 (AndroidX) dla projektów systemu Android. Wersję platformy docelowej można ustawić w programie Visual Studio lub w pliku csproj systemu Android:

<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>

Jeśli to minimalne wymaganie nie zostanie spełnione, zostanie wygenerowany błąd kompilacji:

error XF005: The $(TargetFrameworkVersion) for MyProject.Android (v9.0) is less than the minimum required $(TargetFrameworkVersion) for Xamarin.Forms (10.0). You need to increase the $(TargetFrameworkVersion) for MyProject.Android.

Minimalna wartość TargetSDKVersion

System AndroidX wymaga, aby manifest systemu Android ustawiał targetSdkVersion wartość 29+:

<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" />

Nie można tego zrobić, co spowoduje targetSdkVersion ustawienie parametru minSdkVersionna . Ponadto w niektórych okolicznościach zostanie wygenerowana wartość , Android.Views.InflateException jeśli targetSdkVersion parametr nie zostanie poprawnie ustawiony:

Android.View.InflateException has been thrown.

Binary XML file line #1 in com.companyname.myproject:layout/toolbar: Binary XML file line #1 in com.companyname.myproject:/layout/toolbar: Error inflating class android.support.v7.widget.Toolbar

Uwaga

W programie Visual Studio 2019 manifest systemu Android zostanie automatycznie zaktualizowany w celu określenia targetSdkVersion interfejsu API 29 po ustawieniu wersji docelowej platformy na 10.0.

Automatyczna migracja do systemu AndroidX

Jeśli projekt systemu Android odwołuje się do dowolnych bibliotek obsługi systemu Android, jako zależności bezpośrednie lub zależności przechodnie, te zależności biblioteki obsługi i powiązania są automatycznie zamieniane na zależności AndroidX podczas procesu kompilacji. Aby uzyskać więcej informacji na temat automatycznej migracji systemu AndroidX, zobacz Automatyczna migracja w systemie Xamarin.Forms.

Ręczna migracja do systemu AndroidX

Jeśli projekt systemu Android nie ma bezpośrednich lub przejściowych zależności od bibliotek obsługi systemu Android, ale nadal próbuje korzystać z typów bibliotek obsługi za pomocą kodu, musisz ręcznie zmigrować aplikację do systemu AndroidX. Można to zrobić za pomocą typów AndroidX i usuwając wszystkie pliki AXML, które nie zostały dostosowane.

Napiwek

Ręczna migracja do systemu AndroidX spowoduje najszybszy proces kompilacji aplikacji.

Korzystanie z typów AndroidX

AndroidX zastępuje biblioteki obsługi systemu Android i dlatego wszelkie odwołania do typów bibliotek obsługi systemu Android muszą zostać zastąpione odwołaniami do typów AndroidX.

Można to osiągnąć, aktualizując using instrukcje tak, aby używały AndroidX przestrzeni nazw, a nie Android.Support przestrzeni nazw. W poniższej tabeli wymieniono niektóre typowe zmiany przestrzeni nazw podczas przechodzenia z bibliotek obsługi systemu Android do systemu AndroidX:

Przestrzeń nazw biblioteki obsługi systemu Android Przestrzeń nazw AndroidX
Android.Support.V4.App AndroidX.Core.App
Android.Support.V4.Content AndroidX.Core.Content
Android.Support.V4.App AndroidX.Fragment.App
Android.Support.V7.App AndroidX.AppCompat.App
Android.Support.V7.Widget AndroidX.AppCompat.Widget

Aby uzyskać pełną listę mapowań klas z bibliotek pomocy technicznej na AndroidX, zobacz Mapowania klas AndroidX na github.com. Aby uzyskać pełną listę mapowań zestawów z bibliotek pomocy technicznej do systemu AndroidX, zobacz Zestawy AndroidX w github.com

Usuwanie plików AXML

Należy usunąć wszystkie pliki AXML z projektu systemu Android, pod warunkiem, że nie używa dostosowanych plików AXML. Po usunięciu z klasy powinny zostać usunięte MainActivity następujące wiersze:

TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;

Ważne

Projekty systemu Android z dostosowanymi plikami AXML powinny być aktualizowane tak, aby te pliki używały typów AndroidX.

Platforma UWP

Xamarin.Forms 5.0 zaleca docelową wersję >platformy = 10.0.18362.0 dla projektów platformy UWP. Wersję platformy docelowej można ustawić w programie Visual Studio lub w pliku csproj platformy UWP:

<TargetPlatformVersion Condition=" '$(TargetPlatformVersion)' == '' ">10.0.18362.0</TargetPlatformVersion>

Jeśli projekt platformy UWP używa niższej wersji platformy docelowej, zostanie wygenerowane ostrzeżenie kompilacji.