291

我正在阅读有关 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

10 回答 10

367

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 使用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 映射以获取相等的 AndroidX 包

查看@Migrate to AndroidX官方页面

什么是喷射器?

迁移的错误

  • 如果您构建应用程序,并在迁移后发现一些错误,那么您需要修复这些小错误。你不会被困在那里,因为这很容易解决。
  • 3rd 方库不会在目录中转换为 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

于 2018-09-26T12:28:14.040 回答
34

根据文档

androidx 是一种新的包结构,可以更清楚地显示哪些包与 Android 操作系统捆绑在一起,哪些包与您的应用的 APK 打包在一起。今后,android.* 包层次结构将保留给操作系统附带的 Android 包;其他包将在新的 androidx.* 包层次结构中发布。

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

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

于 2018-07-11T08:04:14.943 回答
30

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

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

AndroidX 包括以下功能:

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

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

  • 所有新的支持库开发都将在 AndroidX 库中进行。这包括维护原始支持库工件和引入新的 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。

对于工件映射,请参阅

于 2019-04-25T12:10:33.240 回答
19

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

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

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

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

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

于 2019-07-02T13:57:40.803 回答
14

只是从我这边添加到所有可用的答案

需要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 库,而不必一次更改每个依赖项。那些令人沮丧的“<strong>所有 com.android.support 库必须使用完全相同的版本规范”消息应该成为过去!

于 2019-07-30T07:39:38.710 回答
10
于 2019-12-22T06:14:10.187 回答
5

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

于 2019-03-06T06:32:12.867 回答
5

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

[AndroidX 和支持兼容性]

于 2019-10-25T11:23:09.823 回答
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

于 2019-09-27T12:35:23.140 回答
0

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

于 2020-05-21T00:18:47.333 回答