Xamarin.Forms 中的 AndroidX 迁移

AndroidX 取代了 Android 支持库。 本文介绍 AndroidX 存在的原因、其对 Xamarin.Forms 的影响以及如何迁移应用程序以使用 AndroidX 库。

重要

如果要将应用迁移到 Xamarin.Forms 5.0,请参阅如何将应用迁移到 Xamarin.Forms 5.0

AndroidX 的历史

已创建 Android 支持库,以在较旧版本的 Android 上提供较新的功能。 它是一个兼容性层,使开发人员能够使用所有版本的 Android 操作系统上可能不存在的功能,并可在较旧版本上正常回退。 支持库还包括便利类和帮助程序类、调试和实用工具,以及依赖于其他支持库类才能正常运行的复杂类。

虽然支持库最初是一个二进制文件,但它已经发展并演变成一套库,这对新式应用的开发来说几乎是必不可少的。 以下是支持库中的一些常用功能:

  • Fragment 支持类。
  • 用于管理长列表的 RecyclerView
  • 对具有超过 65,536 种方法的应用的多索引支持。
  • ActivityCompat 类。

AndroidX 是支持库的替代版本,支持库不再得到维护,所有新库的开发都将在 AndroidX 库中进行。 AndroidX 是一个重新设计的库,它使用语义版本控制,提供更清晰的包名称,可更好地支持常见应用程序体系结构模式。 AndroidX 版本 1.0.0 是等效于支持库版本 28.0.0 的二进制文件。 有关从支持库到 AndroidX 的类映射的完整列表,请参阅 developer.android.com 上的支持库类映射

Google 使用 AndroidX 创建了名为 Jetifier 的迁移过程。 Jetifier 将在生成过程中检查 jar 字节码,并会将应用代码和依赖项中的支持库引用重新映射到其 AndroidX 等效项。

正如在 Android Java 应用中一样,在 Xamarin.Forms 应用中,jar 依赖项也必须迁移到 AndroidX。 但是,还必须迁移 Xamarin 绑定以指向正确的基础 jar 文件。 Xamarin.Forms 添加了对版本 4.5 中自动 AndroidX 迁移的支持。

有关 AndroidX 的详细信息,请参阅 developer.android.com 的 AndroidX 概述

Xamarin.Forms 中的自动迁移

若要自动迁移到 AndroidX,Xamarin.Forms Android 平台项目必须:

  • 面向 Android API 版本 29 或更高版本。
  • 使用 Xamarin.Forms 版本 4.5 或更高版本
  • 在 Android 支持库中具有直接依赖项或可传递依赖项。

在项目中确认这些设置后,接下来即可在 Visual Studio 2019 中生成 Android 应用。 在生成过程中,将检查中间语言 (IL),并使用 AndroidX 依赖项交换支持库依赖项和绑定。 如果应用程序具有生成所需的所有 AndroidX 依赖项,则生成过程中不会有任何差异。

重要

手动迁移到 AndroidX 可最快实现应用的生成过程,因此是建议的 AndroidX 迁移方法。 此方法涉及将支持库依赖项替换为 AndroidX 依赖项,以及更新代码以使用 AndroidX 类型。 有关详细信息,请参阅使用 AndroidX 类型

如果检测到 AndroidX 依赖项不属于项目,则会报告生成错误,指示缺少哪些 AndroidX 包。 下面显示了一个生成错误示例:

Could not find 37 AndroidX assemblies, make sure to install the following NuGet packages:
- Xamarin.AndroidX.Lifecycle.LiveData
- Xamarin.AndroidX.Browser
- Xamarin.Google.Android.Material
- Xamarin.AndroidX.Legacy.Supportv4
You can also copy and paste the following snippit into your .csproj file:
 <PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.1.0-rc1" />
 <PackageReference Include="Xamarin.AndroidX.Browser" Version="1.0.0-rc1" />
 <PackageReference Include="Xamarin.Google.Android.Material" Version="1.0.0-rc1" />
 <PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0-rc1" />

缺少的 NuGet 包可通过两种方法进行安装,第一种是通过 Visual Studio 中的 NuGet 包管理器,另一种是通过编辑 Android .csproj 文件,使其包含错误中列出的 PackageReference XML 项。

解决缺少的包后,重新生成项目时就会加载缺失的包,并使用 AndroidX 依赖项而不是支持库依赖项编译项目。

注意

如果项目和项目依赖项未引用 Android 支持库,则迁移过程不会执行任何操作,并且也不会执行。