如何将我的应用迁移到 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 项目使用较低的目标平台版本,则会生成生成警告。