什么是AndroidX?


255

我正在阅读有关Android房间库的信息。我看到他们将软件包更改androidandroidx。我不明白。有人可以解释一下吗?

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
  • 现有项目中的用例和影响因素。

4
阅读developer.android.com/topic/libraries/support-library/…androidx.*是支持库的程序包层次结构。它们都将与我们进入时代androidx(如体系结构组件,其他支持库)提供相同的软件包。
ADM

3
你到底不明白什么 他们为什么更改包裹?
Rohit5k2 '18年

@ADM为什么他们androidx从CORE 切换到软件包android
Khemraj

2
为了简单起见,他们只是重新设计了包装结构。如果您想看看,这也在IO 2018中宣布。Thx
ADM

Answers:


334

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:程序兼容性 com.android.support:recyclerview-v7:androidx.recyclerview:recyclerview com.android.support:design:com.google.android.material:材料

适用于AndroidX软件包的完整工件映射

AndroidX的用途 语义版本

以前support library使用SDK版本,但AndroidX使用Semantic-version。它将从28.0.0→1.0.0进行版本转换。

如何迁移当前项目

在Android Studio 3.2(2018年9月)中,可以直接选择将现有项目迁移到 AndroidX。这将自动重构所有软件包。

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

现有项目

  • Android Studio>重构菜单>迁移到AndroidX ...
  • 它将分析并在底部打开“折射器”窗口。接受要完成的更改。

图片

新项目

将这些标志放在您的 gradle.properties

android.enableJetifier=true
android.useAndroidX=true

检查@ Library映射是否有相等的AndroidX软件包

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

什么是Jetifier?

迁移错误

  • 如果您构建应用程序,并且在迁移后发现一些错误,则需要修复这些小错误。您不会被困在那里,因为可以轻松解决。
  • 第三方库不会在目录中转换为AndroidX,但会在运行时由Jetifier进行转换,因此不必担心编译时错误,您的应用将完美运行。

支持28.0.0是最新版本?

来自Android支持修订版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很高兴收到您的
来信

在什么情况下可以/应该将enableJetifier设置为false?
标记

1
@Mark enableJetifier=false是默认值。如果不设置,则为假。这意味着您的所有库都不会被重写为AndroidX。
Khemraj '18

4
android studio的迁移效果不佳。我必须手动修复数百个文件...由于Google工具的更改,我花了更多的时间来修复代码,而不是实际编写重要的代码...叹气
LearningPath

1
现在叫(3.3)Migrate to AndroidX
戴尔

32

根据文档

androidx是新的程序包结构,可让您更清楚地了解哪些程序包与Android操作系统捆绑在一起,以及哪些程序包与您应用的APK打包在一起。展望未来,android。*包层次结构将保留给操作系统随附的Android包;其他包将在新的androidx。*包层次结构中发布。

重新设计的程序包结构是为了鼓励更小,更集中的库。您可以在此处找到有关工件映射的详细信息。

当支持的最低SDK级别为14时,将有一个名为“ v7”的支持库(包含用于向后兼容的组件和软件包),新的命名使您可以清楚地了解与平台捆绑的API与所使用的应用程序开发人员库之间的区别。在不同版本的Android上。您可以参考官方公告以获取更多详细信息。


22

AndroidX是Android团队用来在Jetpack中开发,测试,打包,版本和发布库的开源项目

AndroidX是对原始Android支持库的重大改进。像支持库一样,AndroidX与Android OS分开提供,并在各个Android版本之间提供向后兼容性。AndroidX通过提供功能奇偶校验和新库来完全替代支持库。

AndroidX包含以下功能:

  • AndroidX中的所有程序包都位于以字符串androidx开头的一致名称空间中。支持库包已映射到相应的androidx。*包中。有关所有旧类和构建构件到新构件的完整映射,请参见Package Refactoring页面。

  • 与支持库不同,AndroidX软件包是分别维护和更新的。androidx软件包Semantic Versioning从1.0.0版开始使用严格的版本。您可以在项目中独立更新AndroidX库。

  • 所有新的支持库开发都将在AndroidX库中进行。这包括维护原始支持库工件和引入新的Jetpack组件。

使用AndroidX

请参阅迁移到AndroidX,以了解如何迁移现有项目。

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

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

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

对于工件映射,请参阅


14

本文Android Jetpack:最近的公告对Android的支持库意味着什么?讲得很好

如今,许多人认为支持库是Android应用程序开发的重要组成部分,以至于Google Play商店中99%的应用程序都在使用它。但是,随着支持库的增长,围绕该库的命名约定的不一致性逐渐蔓延。

最初,每个软件包的名称表示该软件包支持的最低API级别,例如support-v4。但是,26.0.0支持库的版本将最低API增加到14,因此今天许多软件包名称与最低支持API级别无关。当支持-v4和support-v7软件包的最小API均为14时,很容易看出人们为什么感到困惑!

为了消除这种混乱,Google目前正在将支持库重构为新的Android扩展库(AndroidX)包结构。AndroidX将具有简化的程序包名称,以及Maven groupId和artifactsId,它们可以更好地反映每个程序包的内容及其支持的API级别。

根据当前的命名约定,还不清楚哪些软件包与Android操作系统捆绑在一起,哪些软件包与应用程序的APK (Android Package Kit)打包在一起。为了消除这种混乱,所有未捆绑的库都将移至AndroidX的androidx。*名称空间,而android。*包层次结构将保留给Android操作系统随附的包。


12

我这边只是所有可用答案的补充

需要AndroidX

  1. 正如@KhemRaj的惊人回答所说,

根据当前的命名约定,目前尚不清楚哪些软件包与Android操作系统捆绑在一起,哪些软件包与应用程序的APK(Android Package Kit)打包在一起。为了消除这种混乱,所有未捆绑的库都将移至AndroidX的androidx。*名称空间,而android。*软件包层次结构将保留给Android操作系统随附的软件包。

  1. 除了这个,

    最初,每个软件包的名称表示该软件包支持的最低API级别,例如support-v4。但是,支持库的版本26.0.0最低API增加到14,因此今天,许多软件包名称都与最低支持的API级别无关。当support-v4和support-v7软件包的最小API均为14时,很容易看出人们为什么感到困惑!因此,现在有了AndroidX,就不再依赖于API级别了。

另一个重要的变化是AndroidX工件将独立更新,因此您将能够更新项目中的各个AndroidX库,而不必一次更改每个依赖关系。那些令人沮丧的“ 所有com.android.support库必须使用完全相同的版本规范 ”消息已成为过去!


7

我从这段Android Dev Summit视频中了解了AndroidX 。总结是-

  1. 没有更多的支持库: Google永远不会在支持库名称空间下维护android支持库。因此,如果您想在支持库中查找错误的修复程序,则必须在AndroidX中迁移项目
  2. 更好的软件包管理:标准化和独立的版本控制。因为以前的支持库版本控制太混乱了。这将使您 摆脱“所有com.android.support库必须使用完全相同的版本规范”的烦恼。
  3. 其他God库也已迁移到AndroidX:Google Play服务,Firebase,Mockito 2等已迁移到AndroidX。
  4. 新的库将使用AndroidX工件发布: 所有库都将在AndroidX命名空间中,例如Android Jetpack

4

它与AppCompat版本的支持相同,但是v4和v7版本的混乱程度较小,因此,使用android XML元素的不同组件将为您带来很大帮助。



3

AndroidX是Android团队用来在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上进行迁移时,app / gradle文件会使用标准库中的更正库实现自动更新

参考: https //developer.android.com/jetpack/androidx/migrate


0

Android提供了几个不同的库集。一个叫做Android支持库,另一个叫做AndroidX。选择“使用android。*工件”表示我们要使用AndroidX。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.