什么是安卓X?
Posted
技术标签:
【中文标题】什么是安卓X?【英文标题】:What is AndroidX? 【发布时间】: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 中宣布的。谢谢
【参考方案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? @MarkenableJetifier=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
-
正如@KhemRaj 在惊人的回答中所说,
根据当前的命名约定,不清楚哪些软件包与 Android 操作系统 捆绑在一起,哪些与您的应用程序的 APK 打包在一起(Android Package Kit )。为了消除这种混乱,所有未捆绑的库都将移至 AndroidX 的 androidx.* 命名空间,而 android.* 包层次结构将保留给 Android 操作系统附带的包。
除此之外,
最初,每个包的名称表示该包支持的最低 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 的。总结是-
-
不再支持库: Google 永远不会在支持库命名空间下维护 android 支持库。因此,如果您想在支持库中找到错误的修复,您必须在 AndroidX 中迁移您的项目
更好的包管理:用于标准化和独立的版本控制。因为以前的支持库版本控制太混乱了。它会让你摆脱“所有 com.android.support 库必须使用完全相同的版本规范”消息的痛苦。
其他优秀的库已迁移到 AndroidX:Google play 服务、Firebase、Mockito 2 等已迁移到 AndroidX。
新库将使用 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。
【讨论】:
以上是关于什么是安卓X?的主要内容,如果未能解决你的问题,请参考以下文章