官方中文文档地址:https://developer.android.google.cn/jetpack/androidx

我们在更新Android Studio的时候发现,我们之前的com.android.supper包都变成了androidx的前缀了,并且伴随着一些以前没见过的错误出现,那么这个时候就要去寻找AndroidX的一些根源所在,那么本文就是结合Google官方文档来全面介绍AndroidX.

AndroidX 是 Android 团队用于在 Jetpack 中开发、测试、打包和发布库以及对其进行版本控制的开源项目。

Jetpack 可以查阅:https://developer.android.google.cn/jetpack

Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。

Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。

这里暂时先不讲Jetpack ,有兴趣的我下一篇再详细讲解。

根据官方说法,AndroidX 是整理 之前的 com.android.supper 的一个整合项目,我们都知道,在我们创建项目的时候,默认会给我们集成一些依赖:

implementation 'com.android.support:appcompat-v7:28.0.0'

implementation 'com.android.support.constraint:constraint-layout:1.1.3

但是按照Google的说法,后续会逐渐弃用 乱七八糟的 supper包而统一维护AndroidX,这都是很久远的事情了,但是我们必须先熟悉他,了解他,爱上他。

Google也建议,如果你是新的项目,那么你可以按照如下的方式去部署AndroidX:

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

1.android.useAndroidX:如果设置为 true,Android 插件会使用相应的 AndroidX 库,而非支持库。如果未指定,则该标记默认为 false。

2.android.enableJetifier:如果设置为 true,Android 插件会重写其二进制文件,自动迁移现有的第三方库以使用 AndroidX。如果未指定,则该标记默认为 false。

当打开着两个插件以后,你的build.gradle其实没有变化的,但是你所引用的包就会出现androidx的包名了,如图:




Android Studio 设置创建新项目使用指定的Gradle 版本 android studio创建新项目出错_android


可以看到AppCompatActivity的包名发生了改变android.support.v7.app.AppCompatActivity

androidx.appcompat.app.AppCompatActivity

在布局中也可以看到,我们的ConstraintLayout包名发生的改变

android.support.constraint.ConstraintLayout

androidx.constraintlayout.widget.ConstraintLayout

不仅如此哦,你全局的项目包名都需要改变哦,至于哪些package是支持AndroidX的,这个我们下面在迁移到AndroidX中讲解。

这是一个新的项目,开启这两个插件后则需要改动,那么老的项目,想象一下多痛苦,Google给我们一个迁移到AndroidX的教程,但是只能说坑也多~

迁移到AndroidX

官方中文文档:https://developer.android.google.cn/jetpack/androidx/migrate

首先是借助Android Studio 迁移现有项目, 这里要注意必须使用3.2 及更高版本才行,您可以通过从菜单栏中依次选择 Refactor > Migrate to AndroidX,快速迁移现有项目以使用 AndroidX。

当然,老的项目也是要打开useAndroidX和enableJetifier这两个插件,为了避免你尚未迁移至 AndroidX 命名空间的 Maven 依赖项,

要迁移未使用任何第三方库但带有需要转换的依赖项的现有项目,可以将 android.useAndroidX 标记设置为 true,并将 android.enableJetifier 标记设置为 false。

接着对依赖进行一下修改,这里的映射大家自己去拿表来对照,我们这里的v7和constraint-layout是需要更改的

这里我根据官网的映射表进行了一番修改:


Android Studio 设置创建新项目使用指定的Gradle 版本 android studio创建新项目出错_ide_02


这样,我们就迁移成功了,不过这也只是理论上的迁移成功,我们还有很多工作是需要做的,比如包名的修改,由于这是一个老工程,那么对应的com.android.supper也是要对应的修改成androidx,包括一些其他的依赖,对照映射表修改。

至于其他的一些第三方依赖的错误,就要根据情况来解决了。

注意:如果您使用的是 Android KTX 模块,请务必更新依赖项以避免出现迁移问题。如需了解每个模块的最新版本,请参阅 Android KTX:https://developer.android.google.cn/kotlin/ktx;

附录:映射表

Old build artifact
AndroidX build artifact
android.arch.core:common
androidx.arch.core:core-common:2.0.0-rc01
android.arch.core:core
androidx.arch.core:core:2.0.0-rc01
android.arch.core:core-testing
androidx.arch.core:core-testing:2.0.0-rc01
android.arch.core:runtime
androidx.arch.core:core-runtime:2.0.0-rc01
android.arch.lifecycle:common
androidx.lifecycle:lifecycle-common:2.0.0-rc01
android.arch.lifecycle:common-java8
androidx.lifecycle:lifecycle-common-java8:2.0.0-rc01
android.arch.lifecycle:compiler
androidx.lifecycle:lifecycle-compiler:2.0.0-rc01
android.arch.lifecycle:extensions
androidx.lifecycle:lifecycle-extensions:2.0.0-rc01
android.arch.lifecycle:livedata
androidx.lifecycle:lifecycle-livedata:2.0.0-rc01
android.arch.lifecycle:livedata-core
androidx.lifecycle:lifecycle-livedata-core:2.0.0-rc01
android.arch.lifecycle:reactivestreams
androidx.lifecycle:lifecycle-reactivestreams:2.0.0-rc01
android.arch.lifecycle:runtime
androidx.lifecycle:lifecycle-runtime:2.0.0-rc01
android.arch.lifecycle:viewmodel
androidx.lifecycle:lifecycle-viewmodel:2.0.0-rc01
android.arch.paging:common
androidx.paging:paging-common:2.0.0-rc01
android.arch.paging:runtime
androidx.paging:paging-runtime:2.0.0-rc01
android.arch.paging:rxjava2
androidx.paging:paging-rxjava2:2.0.0-rc01
android.arch.persistence.room:common
androidx.room:room-common:2.0.0-rc01
android.arch.persistence.room:compiler
androidx.room:room-compiler:2.0.0-rc01
android.arch.persistence.room:guava
androidx.room:room-guava:2.0.0-rc01
android.arch.persistence.room:migration
androidx.room:room-migration:2.0.0-rc01
android.arch.persistence.room:runtime
androidx.room:room-runtime:2.0.0-rc01
android.arch.persistence.room:rxjava2
androidx.room:room-rxjava2:2.0.0-rc01
android.arch.persistence.room:testing
androidx.room:room-testing:2.0.0-rc01
android.arch.persistence:db
androidx.sqlite:sqlite:2.0.0-rc01
android.arch.persistence:db-framework
androidx.sqlite:sqlite-framework:2.0.0-rc01
com.android.support.constraint:constraint-layout
androidx.constraintlayout:constraintlayout:1.1.2
com.android.support.constraint:constraint-layout-solver
androidx.constraintlayout:constraintlayout-solver:1.1.2
com.android.support.test.espresso.idling:idling-concurrent
androidx.test.espresso.idling:idling-concurrent:3.1.0
com.android.support.test.espresso.idling:idling-net
androidx.test.espresso.idling:idling-net:3.1.0
com.android.support.test.espresso:espresso-accessibility
androidx.test.espresso:espresso-accessibility:3.1.0
com.android.support.test.espresso:espresso-contrib
androidx.test.espresso:espresso-contrib:3.1.0
com.android.support.test.espresso:espresso-core
androidx.test.espresso:espresso-core:3.1.0
com.android.support.test.espresso:espresso-idling-resource
androidx.test.espresso:espresso-idling-resource:3.1.0
com.android.support.test.espresso:espresso-intents
androidx.test.espresso:espresso-intents:3.1.0
com.android.support.test.espresso:espresso-remote
androidx.test.espresso:espresso-remote:3.1.0
com.android.support.test.espresso:espresso-web
androidx.test.espresso:espresso-web:3.1.0
com.android.support.test.janktesthelper:janktesthelper
androidx.test.jank:janktesthelper:1.0.1
com.android.support.test.services:test-services
androidx.test:test-services:1.1.0
com.android.support.test.uiautomator:uiautomator
androidx.test.uiautomator:uiautomator:2.2.0
com.android.support.test:monitor
androidx.test:monitor:1.1.0
com.android.support.test:orchestrator
androidx.test:orchestrator:1.1.0
com.android.support.test:rules
androidx.test:rules:1.1.0
com.android.support.test:runner
androidx.test:runner:1.1.0
com.android.support:animated-vector-drawable
androidx.vectordrawable:vectordrawable-animated:1.0.0
com.android.support:appcompat-v7
androidx.appcompat:appcompat:1.0.0
com.android.support:asynclayoutinflater
androidx.asynclayoutinflater:asynclayoutinflater:1.0.0
com.android.support:car
androidx.car:car:1.0.0-alpha5
com.android.support:cardview-v7
androidx.cardview:cardview:1.0.0
com.android.support:collections
androidx.collection:collection:1.0.0
com.android.support:coordinatorlayout
androidx.coordinatorlayout:coordinatorlayout:1.0.0
com.android.support:cursoradapter
androidx.cursoradapter:cursoradapter:1.0.0
com.android.support:customtabs
androidx.browser:browser:1.0.0
com.android.support:customview
androidx.customview:customview:1.0.0
com.android.support:design
com.google.android.material:material:1.0.0-rc01
com.android.support:documentfile
androidx.documentfile:documentfile:1.0.0
com.android.support:drawerlayout
androidx.drawerlayout:drawerlayout:1.0.0
com.android.support:exifinterface
androidx.exifinterface:exifinterface:1.0.0
com.android.support:gridlayout-v7
androidx.gridlayout:gridlayout:1.0.0
com.android.support:heifwriter
androidx.heifwriter:heifwriter:1.0.0
com.android.support:interpolator
androidx.interpolator:interpolator:1.0.0
com.android.support:leanback-v17
androidx.leanback:leanback:1.0.0
com.android.support:loader
androidx.loader:loader:1.0.0
com.android.support:localbroadcastmanager
androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
com.android.support:media2
androidx.media2:media2:1.0.0-alpha03
com.android.support:media2-exoplayer
androidx.media2:media2-exoplayer:1.0.0-alpha01
com.android.support:mediarouter-v7
androidx.mediarouter:mediarouter:1.0.0
com.android.support:multidex
androidx.multidex:multidex:2.0.0
com.android.support:multidex-instrumentation
androidx.multidex:multidex-instrumentation:2.0.0
com.android.support:palette-v7
androidx.palette:palette:1.0.0
com.android.support:percent
androidx.percentlayout:percentlayout:1.0.0
com.android.support:preference-leanback-v17
androidx.leanback:leanback-preference:1.0.0
com.android.support:preference-v14
androidx.legacy:legacy-preference-v14:1.0.0
com.android.support:preference-v7
androidx.preference:preference:1.0.0
com.android.support:print
androidx.print:print:1.0.0
com.android.support:recommendation
androidx.recommendation:recommendation:1.0.0
com.android.support:recyclerview-selection
androidx.recyclerview:recyclerview-selection:1.0.0
com.android.support:recyclerview-v7
androidx.recyclerview:recyclerview:1.0.0
com.android.support:slices-builders
androidx.slice:slice-builders:1.0.0
com.android.support:slices-core
androidx.slice:slice-core:1.0.0
com.android.support:slices-view
androidx.slice:slice-view:1.0.0
com.android.support:slidingpanelayout
androidx.slidingpanelayout:slidingpanelayout:1.0.0
com.android.support:support-annotations
androidx.annotation:annotation:1.0.0
com.android.support:support-compat
androidx.core:core:1.0.0
com.android.support:support-content
androidx.contentpager:contentpager:1.0.0
com.android.support:support-core-ui
androidx.legacy:legacy-support-core-ui:1.0.0
com.android.support:support-core-utils
androidx.legacy:legacy-support-core-utils:1.0.0
com.android.support:support-dynamic-animation
androidx.dynamicanimation:dynamicanimation:1.0.0
com.android.support:support-emoji
androidx.emoji:emoji:1.0.0
com.android.support:support-emoji-appcompat
androidx.emoji:emoji-appcompat:1.0.0
com.android.support:support-emoji-bundled
androidx.emoji:emoji-bundled:1.0.0
com.android.support:support-fragment
androidx.fragment:fragment:1.0.0
com.android.support:support-media-compat
androidx.media:media:1.0.0
com.android.support:support-tv-provider
androidx.tvprovider:tvprovider:1.0.0
com.android.support:support-v13
androidx.legacy:legacy-support-v13:1.0.0
com.android.support:support-v4
androidx.legacy:legacy-support-v4:1.0.0
com.android.support:support-vector-drawable
androidx.vectordrawable:vectordrawable:1.0.0
com.android.support:swiperefreshlayout
androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
com.android.support:textclassifier
androidx.textclassifier:textclassifier:1.0.0
com.android.support:transition
androidx.transition:transition:1.0.0
com.android.support:versionedparcelable
androidx.versionedparcelable:versionedparcelable:1.0.0
com.android.support:viewpager
androidx.viewpager:viewpager:1.0.0
com.android.support:wear
androidx.wear:wear:1.0.0
com.android.support:webkit
androidx.webkit:webkit:1.0.0