迁移到AndroidX

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Utzw0p0985/article/details/98805770

640?wx_fmt=png

官方中文文档地址

https://developer.android.google.cn/jetpack/androidx

我们在更新AndroidStudio的时候发现,我们之前的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 的一个整合项目,我们都知道,在我们创建项目的时候,默认会给我们集成一些依赖:

640?wx_fmt=png

但是按照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的包名了,如图:

       640?wx_fmt=png

可以看到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是需要更改的

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

       640?wx_fmt=png      

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

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

注意:如果您使用的是 Android KTX 模块,请务必更新依赖项以避免出现迁移问题。如需了解每个模块的最新版本,请参阅 AndroidKTX:

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

有兴趣的可以加入我的知识星球哦,只要点击阅读原文即可哦~

关于知识星球的介绍可以在公众号点击右下角的【和我学习】或者公众号发送【Hi Android】【知识星球】都可以

猜你喜欢

转载自blog.csdn.net/Utzw0p0985/article/details/98805770