【问题标题】:What is AndroidX?什么是安卓X?
【发布时间】:2018-12-19 04:14:27
【问题描述】:

我正在阅读有关 Android 房间库的信息。我看到他们将包 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 中打包新的支持库?
  • 现有项目中的用例和影响因素。

【问题讨论】:

  • 阅读developer.android.com/topic/libraries/support-library/…androidx.* 是支持库的包层次结构。它们都将使用与我们进入 androidx 时代相同的软件包(如架构组件,其他支持库)。
  • 你不明白什么?为什么他们改变了包装?
  • @ADM 为什么他们从 CORE android 切换到 androidx 包。
  • 为了简单起见,他们只是重新设计了包结构。如果您想看看,这也是在 IO 2018 中宣布的。谢谢

标签: android android-architecture-components android-jetpack androidx


【解决方案1】:

AndroidX - Android 扩展库

来自AndroidX documentation

我们正在推出一种新的包结构,以便更清楚地说明哪个 软件包与 Android 操作系统捆绑在一起,它们是 与您应用的 APK 打包在一起。展望未来,android.* 包 层次结构将保留给附带的 Android 软件包 操作系统。其他包将在新的androidx中发布。* 包层次结构作为 AndroidX 库的一部分。

需要AndroidX

AndroidX 是一个重新设计的库,使包名称更加清晰。因此,从现在开始,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

Complete Artifact mappings for AndroidX packages

AndroidX 使用Semantic-version

以前,support library 使用 SDK 版本,但 AndroidX 使用 Semantic-version。它将从 28.0.0 → 1.0.0 重新版本。

如何迁移当前项目

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

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

现有项目

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

新项目

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

android.enableJetifier=true
android.useAndroidX=true

检查@Library mappings for equal AndroidX package

检查@Official page of Migrate to AndroidX

What is Jetifier?

迁移的错误

  • 如果您构建应用程序,并在迁移后发现一些错误,那么您需要修复这些小错误。您不会卡在那里,因为这很容易解决。
  • 第三方库不会在目录中转换为 AndroidX,而是在运行时通过Jetifier 进行转换,所以不用担心编译时错误,您的应用会完美运行。

支持 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

【讨论】:

  • @androidmalin 很高兴收到您的来信 - 此信息对您有所帮助 :)
  • 在什么情况下可以/应该将 enableJetifier 设置为 false?
  • @Mark enableJetifier=false 是默认值。不设置时为假。这意味着您的任何库都不会被重写到 AndroidX。
  • android studio 迁移效果不佳。我不得不手动修复数百个文件......由于谷歌工具的变化,我花更多的时间来修复代码,而不是实际编写重要的代码......叹息
  • 现在 (3.3) 被称为 Migrate to AndroidX
【解决方案2】:

基于documentation

androidx 是新的包结构,让哪些包更清晰 与Android操作系统捆绑在一起,并打包 使用您应用的 APK。展望未来,android.* 包层次结构 将保留给与操作系统一起提供的 Android 软件包 系统;其他包将在新的 androidx.* 包中发布 层次结构。

重新设计的包结构是为了鼓励更小、更专注的库。您可以找到有关工件映射的详细信息 here

当支持的最低 SDK 级别为 14 时,有名为“v7”的支持库(包含向后兼容的组件和包),新的命名清楚地说明了与平台捆绑的 API 和应用程序开发人员库之间的划分用于不同版本的Android。详情可参考official announcement

【讨论】:

    【解决方案3】:

    AndroidX 是 Android 团队用于在 Jetpack 内开发、测试、打包、版本和发布库的开源项目。

    AndroidX 是对原始 Android Support Library 的重大改进。与支持库一样,AndroidX 与 Android 操作系统分开发布,并提供跨 Android 版本的向后兼容性。 AndroidX 通过提供功能奇偶校验和新库完全取代了支持库。

    AndroidX 包括以下功能:

    • AndroidX 中的所有包都位于以字符串 androidx 开头的一致命名空间中。支持库包已映射 到相应的 androidx.* 包中。对于所有的完整映射 旧类并为新类构建工件,请参阅包 重构页面。

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

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

    使用 AndroidX

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

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

    • android.useAndroidX:设置为 true 时,Android 插件使用适当的 AndroidX 库而不是支持库。国旗 如果不指定,默认为false。

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

    对于工件映射,请参阅this

    【讨论】:

      【解决方案4】:

      这篇文章Android Jetpack: What do the recent announcements mean for Android’s Support Library?解释得很好

      如今,许多人认为支持库是 Android 应用开发的重要组成部分,以至于 Google Play 商店中 99% 的应用都在使用它。然而,随着支持库的发展,围绕库的命名约定出现了不一致。

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

      为了消除这种困惑,Google 目前正在将支持库重构为新的 Android 扩展库 (AndroidX) 包结构。 AndroidX 将采用简化的包名称以及 Maven groupIds 和 artifactIds,以更好地反映每个包的内容及其支持的 API 级别。

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

      【讨论】:

        【解决方案5】:

        我对所有可用答案仅添加了一些内容

        需要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 包都具有 14 的最低 API 时,很容易理解为什么人们会感到困惑!。所以现在有了 AndroidX,就不再依赖 API 级别了。

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

        【讨论】:

          【解决方案6】:

          我是通过Android Dev Summit video 了解 AndroidX 的。总结是-

          1. 不再支持库: Google 永远不会在支持库命名空间下维护 android 支持库。因此,如果您想在支持库中找到错误的修复,您必须在 AndroidX 中迁移您的项目
          2. 更好的包管理:用于标准化和独立的版本控制。因为以前的支持库版本控制太混乱了。它会让你摆脱“所有 com.android.support 库必须使用完全相同的版本规范”消息的痛苦。
          3. 其他优秀的库已迁移到 AndroidX:Google play 服务、Firebase、Mockito 2 等已迁移到 AndroidX。
          4. 新库将使用 AndroidX 工件发布:所有库都将位于 AndroidX 命名空间中,例如 Android Jetpack

          【讨论】:

            【解决方案7】:

            它与 AppCompat 版本的支持相同,但它的 v4 和 v7 版本的混乱更少,因此它对使用 android XML 元素的不同组件有很大帮助。

            【讨论】:

              【解决方案8】:

              androidx 将在 28.0.0 之后替换 support library。您应该迁移您的项目以使用它。 androidx 使用 Semantic Versioning。使用AndroidX 不会被库名称和包名称中显示的版本混淆。生活变得更轻松

              [AndroidX and support compatibility]

              【讨论】:

                【解决方案9】:

                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

                【讨论】:

                  【解决方案10】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2022-01-09
                    • 1970-01-01
                    • 2016-06-26
                    • 1970-01-01
                    相关资源
                    最近更新 更多