如何将我的应用迁移到 Xamarin.Forms 5.0?

Xamarin.Forms 5.0 包含以下重大更改:

  • Expander 已移动到 Xamarin 社区工具包。 有关详细信息,请参阅从 Xamarin.Forms 中移动的功能
  • MediaElement 已移动到 Xamarin 社区工具包。 有关详细信息,请参阅从 Xamarin.Forms 中移动的功能
  • DataPages 和关联的项目已从 Xamarin.Forms 中删除。
  • MasterDetailPage 已重命名为 FlyoutPage。 同样,MasterBehavior 枚举已重命名为 FlyoutLayoutBehavior
  • 已从 iOS 上的 Xamarin.Forms 中删除对 UIWebView 的引用。
  • 已删除对 Visual Studio 2017 的支持。
  • XFCorePostProcessor.Tasks 已删除。 此项目注入了 IL,以保持 Xamarin.Forms 2.5 兼容性。

此外,使用 Xamarin.Forms 5.0 生成的 Android 和 UWP 项目将需要更新。

重要

将应用程序更新到 Xamarin.Forms 5.0 时,请确保将引用 Xamarin.Forms NuGet 包的每个项目更新为相同的版本。

Android

使用 Xamarin.Forms 5.0 生成的 Android 项目要求将 AndroidX (Android 10.0) 平台安装到开发环境。 这可以通过 Android SDK 管理器完成。 有关 AndroidX 的详细信息,请参阅 Xamarin.Forms 中的AndroidX 迁移

然后,Android 项目需要多个更新才能正确生成。

Minimum TargetFrameworkVersion

Xamarin.Forms 5.0 要求 Android 项目的最低目标框架版本为 10.0 (AndroidX)。 可以在 Visual Studio 或 Android .csproj 文件中设置目标框架版本:

<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>

如果未满足此最低要求,将生成错误:

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.

Minimum TargetSDKVersion

AndroidX 要求 Android 清单将 targetSdkVersion 设置为 29+:

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

未能执行此操作将导致 targetSdkVersion 设置为 minSdkVersion。 此外,在某些情况下,如果未正确设置 targetSdkVersion,将生成 Android.Views.InflateException

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

注意

在 Visual Studio 2019 中,当目标框架版本设置为 v10.0 时,Android 清单将自动更新,以指定 API 29 的 targetSdkVersion

自动迁移到 AndroidX

如果 Android 项目引用任何 Android 支持库(作为直接依赖项或可传递依赖项),这些支持库依赖项和绑定会在生成过程中自动与 AndroidX 依赖项交换。 有关自动 AndroidX 迁移的详细信息,请参阅 Xamarin.Forms 中的自动迁移

手动迁移到 AndroidX

如果 Android 项目对 Android 支持库没有直接或可传递依赖项,但仍尝试通过代码使用支持库类型,则必须手动将应用迁移到 AndroidX。 这可以通过使用 AndroidX 类型以及删除尚未自定义的任何 AXML 文件来实现。

提示

手动迁移到 AndroidX 将导致应用的生成过程最快。

使用 AndroidX 类型

AndroidX 取代了 Android 支持库,因此对 Android 支持库类型的任何引用都必须替换为对 AndroidX 类型的引用。

这可以通过更新 using 语句以使用 AndroidX 命名空间而不是 Android.Support 命名空间来实现。 下表列出了从 Android 支持库迁移到 AndroidX 时的一些常见命名空间更改:

Android 支持库命名空间 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

有关从支持库到 AndroidX 的类映射的完整列表,请参阅 github.com 上的 AndroidX 类映射。 有关从支持库到 AndroidX 的程序集映射的完整列表,请参阅 github.com 上的 AndroidX 程序集

删除 AXML 文件

应从 Android 项目中删除任何 AXML 文件,前提是它不使用自定义的 AXML 文件。 删除后,应从 MainActivity 类中删除以下行:

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

重要

应更新具有自定义 AXML 文件的 Android 项目,以便这些文件使用 AndroidX 类型。

UWP

Xamarin.Forms 5.0 建议将目标平台版本 >= 10.0.18362.0 用于 UWP 项目。 可以在 Visual Studio 或 UWP .csproj 文件中设置目标平台版本:

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

如果 UWP 项目使用较低的目标平台版本,则会生成生成警告。