AndroidX是什么?

我正在阅读关于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中打包新的支持库?
  • 现有项目中的用例和影响因素。
193489 次浏览

基于文档:

androidx是新的包结构,使它更清楚哪些包 都是与Android操作系统捆绑的,哪些是打包的 你的应用的APK。展望未来,机器人。*包层次结构 将保留给随操作系统一起发布的Android包 系统;其他软件包将在新的androidx中发布。*包 层次结构。< / p >

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

当支持的最小SDK级别为14时,有命名为“v7”的支持库(包含向后兼容的组件和包),新的命名清楚地理解了平台绑定的api和应用程序开发人员在不同版本的Android上使用的库之间的划分。你可以参考官方声明获取更多细节。

AndroidX - Android扩展库

AndroidX文档

我们正在推出一个新的包结构,以使其更清楚 这些软件包都是与Android操作系统捆绑在一起的 与你的应用的APK打包。展望未来,机器人。*包 层次结构将保留给附带的Android包 操作系统。其他软件包将在新的androidx.*中发布

.包层次结构作为AndroidX库的一部分

需要AndroidX

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

< p > com.android.support。**: androidx。
com.android。支持:appcompat-v7: androidx.appcompat: appcompat com.android。支持:recyclerview-v7: androidx.recyclerview: recyclerview com.android。support:design: com.google.android.material:物质

完整的AndroidX包的Artifact映射

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…
  • 它将分析并在底部打开折射窗口。接受要完成的更改。

image

新项目

把这些标志放在你的gradle.properties

android.enableJetifier=true
android.useAndroidX=true

检查@AndroidX包的库映射

检查@迁移到AndroidX官方页面

Jetifier是什么?< / >

迁移的bug

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

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

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

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

AndroidX包含以下特性:

  • AndroidX中的所有包都位于以字符串AndroidX开头的一致命名空间中。支持库包已经映射 进入相应的androidx。*包。对于所有的完整映射 旧类和构建新类的构件,请参阅包 李页面重构。< / p > < / > 与支持库不同,AndroidX包是单独维护和更新的。androidx包从1.0.0版本开始严格使用Semantic Versioning。你可以更新AndroidX

  • 所有新的支持库开发都将在AndroidX库中进行。这包括对原始支持库的维护

使用AndroidX

参见迁移到AndroidX了解如何迁移现有项目。

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

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

  • android.enableJetifier:当设置为true时,Android插件会自动迁移现有的第三方库,通过重写它们的二进制文件来使用AndroidX。缺省情况下,该标志为false 李不指定。< / p > < / >

关于工件的映射,请参见< >强这< / >强

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

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

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

为了消除这种混淆,谷歌目前正在将支持库重构为一个新的Android扩展库 (AndroidX)包结构。AndroidX将具有简化的包名,以及Maven groupid和artifactid,以更好地反映每个包的内容及其支持的API级别。

根据当前的命名约定,也不清楚哪些包与Android操作系统捆绑,哪些包与应用程序的APK (Android软件包)捆绑。为了消除这种困惑,所有未捆绑的库将被转移到AndroidX的AndroidX上。*命名空间,而android。*包层次结构将保留给随Android操作系统. xml文件一起发布的包。

只是从我的角度对所有可用的答案进行了一些补充

需要AndroidX

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

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

  1. 除此之外,

    最初,每个包的名称表示该包支持的最低API级别,例如support-v4。然而,支持库的26.0.0版本增加了最低空气污染指数至14,因此今天许多包的名称与受支持的最低API级别无关。当support-v4和support-v7包的最小API都是14时,很容易理解为什么人们会感到困惑!所以现在有了AndroidX,就不再依赖于API级别了。

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

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

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

[AndroidX和支持兼容性] .

我从这个Android开发峰会视频开始了解AndroidX。总结是-

  1. android支持库将永远不会由谷歌在支持库命名空间下维护。所以如果你想在支持库中找到bug的修复,你必须将你的项目迁移到AndroidX中
  2. 更好的包管理:用于标准化和独立的版本。因为以前的支持库版本太混乱了。它将释放你"所有com.android.support库必须使用完全相同的版本规范"消息的痛苦。
  3. 其他优秀的库已经迁移到AndroidX:谷歌播放服务,Firebase, Mockito 2等迁移到AndroidX。
  4. 新的库将使用AndroidX artifact发布:所有的库都将在AndroidX命名空间中,如Android喷气背包

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