什么是AndroidX?

310

我正在阅读有关Android的room库。我看到他们把包android改成了androidx。我不理解这一点。能有人解释一下吗?

implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"

甚至在 android 包中也可以使用此功能。

implementation "android.arch.persistence.room:runtime:$room_version"
annotationProcessor "android.arch.persistence.room:compiler:$room_version"
  • 为什么需要将新的支持库打包进androidx而不是android
  • 现有项目中的使用情况和影响因素。

5
阅读 https://developer.android.com/topic/libraries/support-library/androidx-rn。`androidx.*`是支持库的包层次结构。随着我们进入“androidx”时代(如架构组件、其他支持库),它们都将归于同一包中。 - ADM
3
你到底没有理解什么?为什么他们改变了这个包装? - Rohit5k2
1
@ADM 为什么他们从 android 核心包转换到 androidx 包? - Khemraj Sharma
2
他们只是为了简化而重新设计了软件包结构。如果你想看的话,这也在2018年IO大会上宣布了。谢谢。 - ADM
10个回答

385

AndroidX - Android扩展库

引用自AndroidX文档

我们正在推出一个新的包结构,以使与Android操作系统捆绑的包和与您的应用程序的APK打包的包更清晰。未来,android.*包层次结构将保留用于随操作系统一起提供的Android软件包。其他包将作为AndroidX库的一部分发行在新的androidx.*包层次结构中。

AndroidX的必要性

AndroidX是一个重新设计的库,以使包名称更加清晰。从现在开始,android层次结构仅用于Android操作系统自带的android默认类,而其他库/依赖项将成为androidx的一部分(更有意义)。因此,所有新的开发都将在androidx中更新。

com.android.support.** : androidx.
com.android.support:appcompat-v7 : androidx.appcompat:appcompat com.android.support:recyclerview-v7 : androidx.recyclerview:recyclerview com.android.support:design : com.google.android.material:material

完整的AndroidX包映射

AndroidX使用语义化版本

以前,support library使用SDK版本,但AndroidX使用语义化版本。它将从28.0.0重新版本为1.0.0。

如何迁移现有项目

在Android Studio 3.2(2018年9月)中,有一个直接将现有项目迁移到AndroidX的选项。这会自动重构所有包。

在迁移之前,强烈建议备份您的项目。

现有项目

  • Android Studio > Refactor菜单 > 迁移到AndroidX...
  • 它将分析并打开底部的Refactor窗口。接受要执行的更改。

image

新项目

将以下标志放入您的gradle.properties

android.enableJetifier=true
android.useAndroidX=true

查看 @库映射以获得相等的 AndroidX 包

查看 @迁移到 AndroidX 的官方页面

Jetifier 是什么?

迁移中的问题

  • 如果你构建应用程序,在迁移后发现一些错误,则需要修复这些次要错误。你不会被卡住,因为这很容易修复。
  • 第三方库在目录中没有转换为 AndroidX,但是它们在运行时由Jetifier转换,因此不要担心编译时错误,你的应用程序将完美运行。

Support 28.0.0 是最后一个版本吗?

来自Android Support Revision 28.0.0

这将是 android.support 打包下的最后一个功能发布版本,鼓励开发人员迁移到 AndroidX 1.0.0

所以选择 AndroidX,因为从现在开始 Android 只会更新 androidx 包。

进一步阅读

https://developer.android.com/topic/libraries/support-library/androidx-overview

https://android-developers.googleblog.com/2018/05/hello-world-androidx.html


2
@androidmalin 很高兴收到你的来信 - 这些信息对你有所帮助 :) - Khemraj Sharma
1
@Mark enableJetifier=false 是默认值。当你不设置它时,它的值为false。这意味着你的库将不会被重写为AndroidX。 - Khemraj Sharma
4
Android Studio的迁移工具运作不佳,我需要手动修复数百个文件...由于Google工具的更改,我花费了比实际编写代码更多的时间来解决问题...唉。 - LearningPath
我先在每个文件中导入和引用androidx和com.google.android,然后进行了这项操作。在mob hustle之后,所有问题都得到了解决,我的项目成功编译。 - Neri
1
现在(3.3)它被称为“迁移到AndroidX” - Dale
显示剩余5条评论

34

根据文档

androidx是一种新的包结构,以使捆绑在Android操作系统中的软件包和打包在您的应用程序APK中的软件包更清晰。未来,android.*包层次结构将保留Android与操作系统一起发货的软件包;其他软件包将在新的androidx.*包层次结构中发布。

重新设计的包结构旨在鼓励制作较小且重点更为集中的库。有关工件映射的详细信息,请参见此处

当支持的最小SDK级别为14时,存在名为“v7”的支持库(包含向后兼容的组件和软件包)。新的命名使人们更清楚地了解平台捆绑API和应用程序开发人员使用的适用于不同Android版本的库之间的区别。有关详细信息,请参考官方公告


32

AndroidX是安卓团队用来开发、测试、打包、版本控制以及发布Jetpack库的开源项目。

AndroidX是对原始Android Support Library的重大改进。与Support Library一样,AndroidX是独立于安卓操作系统的,并且提供跨安卓版本的向后兼容性。 AndroidX通过提供功能平等和新的库完全替换Support Library。

AndroidX包括以下特点:

  • AndroidX中的所有包都在一个统一的命名空间下,以字符串androidx开头。 Support Library 包已映射到相应的androidx.*包中。要查看所有旧类和构建成果物到新内容的完整映射,请参阅包重构页面。

  • 与Support Library不同,AndroidX包是分别维护和更新的。Androidx包采用从1.0.0版本开始的严格语义化版本控制。您可以独立更新项目中的AndroidX库。

  • 所有新的Support Library开发将在AndroidX库中进行。这包括原始Support Library的维护。

工件和新 Jetpack 组件的介绍。

使用 AndroidX

请参阅迁移至 AndroidX了解如何迁移现有项目。

如果您想在新项目中使用 AndroidX,则需要将编译 SDK 设置为 Android 9.0(API 级别 28)或更高,并在 gradle.properties 文件中将以下两个 Android Gradle 插件标志都设置为 true。

  • android.useAndroidX:当设置为 true 时,Android 插件将使用适当的 AndroidX 库而不是支持库。如果未指定该标志,则默认情况下该标志为 false。

  • android.enableJetifier:当设置为 true 时,Android 插件会通过重写其二进制文件自动迁移现有第三方库以使用 AndroidX。如果未指定该标志,则默认情况下该标志为 false。

有关工件映射,请参见此处


19
这篇文章《Android Jetpack:最近的公告对于Android Support Library意味着什么?》详细解释了这一点。
如今,许多人认为Support Library是Android应用程序开发的重要组成部分,以至于Google Play商店中99%的应用程序都使用它。然而,随着Support Library的增长,围绕库命名约定出现了不一致。
最初,每个包的名称指示该包支持的最小API级别,例如support-v4。但是,Support Library的26.0.0版本将最小API提高到14,因此今天许多软件包名称与最小支持的API级别无关。当support-v4和support-v7包都具有14的最小API时,很容易理解为什么人们会感到困惑!
为了消除这种混淆,Google目前正在将Support Library重构为一个新的Android扩展库(AndroidX)包结构。 AndroidX将采用简化的软件包名称,以及更好地反映每个软件包内容及其支持的API级别的Maven groupId和artifactId。

按照当前的命名约定,也不清楚哪些包是与Android操作系统捆绑在一起的,哪些是打包到您的应用程序的APK (Android Package Kit)中的。为了消除这种混淆,所有未捆绑的库都将移动到AndroidX的androidx.*名称空间,而android.*软件包层次结构将保留用于与 Android操作系统一起提供的软件包。


14

对所有可用答案进行一些补充

AndroidX的必要性

  1. 如@KhemRaj提供的精彩答案所述,

按照当前的命名约定,不清楚哪些包捆绑在Android操作系统中,哪些包打包在您的应用程序的 Android Package Kit(APK)中。为了消除这种混淆,所有未捆绑的库将移至AndroidX的androidx.* 命名空间,而android.* 包层次结构将保留用于随Android操作系统一起发行的包。

  1. 除此之外,

    最初,每个软件包的名称指示该软件包支持的最低API级别,例如support-v4。然而,Support Library版本26.0.0最小API提高到14,因此今天许多软件包名称与最小支持的API级别毫无关系。当support-v4和support-v7软件包都具有最小API 14时,人们很容易感到困惑!因此,现在使用AndroidX时不再依赖API级别。

另一个重要的变化是AndroidX构件将独立更新,因此您将能够在项目中更新单个AndroidX库,而不必一次更改所有依赖项。这意味着让人沮丧的“All com.android.support libraries must use the exact same version specification”消息将成为过去!


11

我是通过这个Android Dev Summit视频了解到AndroidX的。简而言之,它有以下特点:

  1. 不再支持旧版支持库:谷歌将不再在支持库命名空间下维护Android支持库。所以,如果你想找到一个支持库中的问题修复,就必须将你的项目迁移到AndroidX。
  2. 更好的包管理:为了统一和独立的版本控制,因为之前的支持库版本控制过于混乱。它会解决“所有 com.android.support 库必须使用完全相同的版本规范”信息带来的烦恼。
  3. 其他优秀的库已迁移到AndroidX:Google Play服务、Firebase、Mockito 2等都已经迁移到AndroidX。
  4. 新库将使用AndroidX构件发布: 所有库都将在AndroidX命名空间中,如Android Jetpack

5
在版本28.0.0之后,androidx会取代support library。您应该迁移项目以使用它。 androidx使用Semantic Versioning。使用AndroidX将不被库名称和包名称中呈现的版本所混淆。使用它可以让生活变得更加容易。

[AndroidX 和支持兼容性]


5

它与支持库的AppCompat版本相同,但减少了v4和v7版本的混乱,因此在使用Android XML元素的不同组件方面非常有帮助。


3
AndroidX是安卓团队使用的开源项目,用于在Jetpack中开发、测试、打包、版本控制和发布库。
经过数小时的努力,我通过在app/build.gradle中包含以下内容解决了问题:
android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

将这些标志放入你的gradle.properties中

android.enableJetifier=true
android.useAndroidX=true

Changes in gradle:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha04'

当在Android Studio上进行迁移时,应用程序/gradle文件会自动更新,使用标准库中的修正库实现。
参考:https://developer.android.com/jetpack/androidx/migrate

0

Android 提供了几个不同的库集合。其中一个叫做 Android support Library,另一个叫做 AndroidX。选择“使用 android.* 工件”表示我们想要使用 AndroidX。


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