为什么会有AndroidX和android.support.*支持库?
在开发支持多个 API 版本的应用时,您可能需要一种标准的方法,以便对早期版本的 Android 系统提供新功能,或者优雅地回退到等效的功能。您可以利用这些库提供相应的兼容性层,而无需编译代码来处理早期版本的平台。此外,支持库还提供标准 Framework API 中未提供的额外的工具类和功能,使您能更轻松地面向更多设备进行开发和提供支持。
Android 支持库最初是适用于各种应用的单个二进制库,如今它已经发展为一套用于应用开发的库。现在,其中很多库在应用开发过程中即使不是必需的,我们也强烈推荐使用。
AndroidX是什么?
androidx 命名空间中的工件包含 Android Jetpack 库。与支持库一样,androidx 命名空间中的库与 Android 平台分开提供,并向后兼容各个 Android 版本。
AndroidX 对原始 Android 支持库进行了重大改进,后者现在已不再维护。androidx 软件包完全取代了支持库,不仅提供同等的功能,而且提供了新的库。
AndroidX 将原始支持库 API 替换为 androidx
命名空间中的软件包。只有软件包和 Maven 工件名称发生了变化;类、方法和字段名称没有变化。
AndroidX 还包括以下功能
- AndroidX 中的所有软件包都使用一致的命名空间,以字符串 androidx 开头。支持库软件包已映射到对应的 androidx.* 软件包。
- 与支持库不同,androidx 软件包会单独维护和更新。从版本 1.0.0 开始,androidx 软件包使用严格的语义版本控制。您可以单独更新项目中的各个 AndroidX 库。
- 版本 28.0.0 是支持库的最后一个版本。我们将不再发布 android.support 库版本。所有新功能都将在 androidx 命名空间中开发。
注意事项:
- 执行迁移之前,请先将应用更新到最新版本。我们建议您将项目更新为使用支持库的最终版本:版本 28.0.0。这是因为,1.0.0 版本的 AndroidX 工件是与支持库 28.0.0 工件等效的二进制文件。
- Android 9.0(API 级别 28)发布后,新版支持库 AndroidX 也随之诞生,它属于 Jetpack。除了现有的支持库,AndroidX 库还包含最新的 Jetpack 组件。
- 您可以继续使用此支持库以往的工件(这里指的是版本 27 及更早版本,且已打包为 android.support.*)在 Google Maven 中仍然可用。不过,所有新库的开发都将在 AndroidX 库中进行。
为什么将支持库android.support.*替换为AndroidX?
(android.support.*)部分支持库软件包的名称会指示其最初支持的最低 API 级别。这些名称使用 v# 表示法,例如 support-v4 软件包。从支持库版本 26.0.0(2017 年 7 月发布)开始,所有支持库软件包所支持的最低 API 级别已更改为 Android 4.0(API 级别 14)。
因此,在使用任何最新版本的支持库时,您不应假设 v# 软件包表示法会指示最低 API 支持级别。最新版本中的这项更改还意味着,名称为 v4 和 v7 的库软件包与其支持的最低 API 级别本质上等效。例如,对于 26.0.0 及更高版本的支持库,support-v4 和 support-v7 软件包支持的最低 API 级别均为 14。
那么很明显,Android团队也意识到这种命名已经非常不合适了,于是对这些API的架构进行了一次重新的划分,推出了AndroidX。因此,AndroidX本质上其实就是对Android Support Library进行的一次升级,升级内容主要在于以下两个方面。
第一,包名。之前Android Support Library中的API,它们的包名都是在android.support.*下面的,而AndroidX库中所有API的包名都变成了在androidx.*下面。这是一个很大的变化,意味着以后凡是android.*包下面的API都是随着Android操作系统发布的,而androidx.*包下面的API都是随着扩展库发布的,这些API基本不会依赖于操作系统的具体版本。
第二,命名规则。吸取了之前命名规则的弊端,AndroidX所有库的命名规则里都不会再包含具体操作系统API的版本号了。比如,像appcompat-v7库,在AndroidX中就变成了appcompat库。
一个AndroidX完整的依赖库格式如下所示:
implementation 'androidx.appcompat:appcompat:1.0.2'
支持库的用途
支持库有一些独特的用途,而针对平台早期版本的向后兼容性类只是其中之一。下表完整列出了支持库在应用中的用途:
- 新版 API 的向后兼容性 - 大量的支持库都为较新的框架类和方法提供向后兼容性。例如,Fragment 支持类为搭载 Android 3.0(API 级别 11)之前版本的设备中的 Fragment 提供支持。
- 工具类和辅助类 - 支持库提供了很多辅助类,特别是针对界面开发。例如,RecyclerView 类提供了一个界面微件,用于显示和管理超长列表,并可在 API 级别 7 及更高版本的 Android 系统中使用。
- 调试和实用工具 - 很多功能可以提供您集成到应用中的代码所不具备的实用工具,包括 support-annotations 库,它改进了对方法输入进行的代码 Lint 检查;以及多 dex 处理支持,用于通过 65536 种以上的方法配置和分发应用。
参考:
AndroidX概览
https://developer.android.google.cn/jetpack/androidx
迁移到 AndroidX
https://developer.android.google.cn/jetpack/androidx/migrate
其他
https://blog.youkuaiyun.com/guolin_blog/article/details/97142065