androidx和com.android.support的区别

41

我在项目中想要使用约束布局,但发现有两个不同的依赖项可供选择:

  • com.android.support.constraint:constraint-layout
  • androidx.constraintlayout:constraintlayout

这两个有什么区别,或者有什么推荐的选择吗?

编辑

谷歌停止支持com.android.support,并提示用户迁移到新的androidx相应版本。

注意:随着 Android 9.0(API level 28)的发布,出现了一个名为 AndroidX 的支持库的新版本,它是 Jetpack 的一部分。AndroidX 库包含现有的支持库,并包括最新的 Jetpack 组件。

您可以继续使用支持库。历史遗留物品(版本为 27 及更早版本,并打包为 android.support.*)将继续在 Google Maven 上提供。但所有新的库开发将在 AndroidX 库中进行。

我们建议在所有新项目中使用 AndroidX 库。您还应考虑将现有项目迁移到 AndroidX。

这里是官方的迁移指南和相应的库版本。


如果你想知道 Android 和 AndroidX 之间的区别,请查阅 Android Jetpack。它们是相同的。 - Tim
4个回答

33

所有的支持库都放弃了v4 v7 v12 v13等标签,所有东西都被重构成androidx包。

它们本质上是相同的,但为了将来的参考,我们应该在我们的应用程序中使用androidx库。

本周(2018年5月14日那周)发布的Android Studio 3.2 Canary版本将具备工具,允许自动重构到androidx包。在Google I/O 2018大会上曾有公告提及此事。


什么是捆绑和未捆绑的软件包? - blackHawk

19

AndroidX与Support库之间的一个区别是,使用Support库时,所有Support库必须是相同的版本,但在AndroidX中不存在这种情况。

另一个区别是,在Support库中,大多数情况下,当您需要应用程序中的组件时,您必须添加具有许多其他不需要的内容的依赖项。但在AndroidX中,您只需添加所需的依赖项,而不再添加其他内容。


6

以下内容或许可以帮到您:

现在有一些不同之处:

  1. 当前的命名规则并不清楚哪些包是随Android操作系统捆绑的,哪些包是打包在应用程序的APK(Android Package Kit)中的。为了消除这种混淆,所有未捆绑的库都将移动到AndroidX的androidx.*命名空间中,而android.*包层次结构将保留用于随Android操作系统一起发布的包。例如:android.content.Intent; 是依赖于Android OS的,而 androidx.fragment.app.Fragment; 则是与APK一起发布。

  2. 最初,每个软件包的名称表示该软件包支持的最低API级别,例如support-v4。然而,Support Library的版本26.0.0将最低API提高到14,因此今天许多软件包的名称与最低支持的API级别无关。当support-v4和support-v7包的最低API均为14时,很容易理解为什么人们会感到困惑!所以现在有了AndroidX,不再依赖API级别。

  3. 这只是第2点的补充,另一个重要的变化是,AndroidX工件将独立更新,因此您将能够在项目中更新单个AndroidX库,而不必一次更改所有依赖关系。这些令人沮丧的“所有com.android.support库必须使用完全相同的版本规范”的消息应该成为过去式了!

1
如上所述和 迁移到 AndroidX 中提到的,您可以在 AS 中轻松进行迁移:

使用 Android Studio 3.2 及更高版本,您可以通过从菜单栏中选择 重构 > 迁移到AndroidX 快速将现有项目迁移到 AndroidX。

关于差异(TLDR:没有损害,强调我的)

AndroidX 将原始支持库 API 包映射到 androidx 命名空间。只有包和 Maven 构件名称发生了变化;类、方法和字段名称没有变化


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接