AndroidX 简介
AndroidX 是 Android 团队用于在 Jetpack 中开发,测试,打包,版本和发布库的开源项目 。
AndroidX 是对原始 Android Support Library的重大改进 。与支持库一样,AndroidX 与 Android 操作系统分开提供,并提供跨 Android 版本的向后兼容性。AndroidX 通过提供功能奇偶校验和新库完全取代了支持库。此外,AndroidX 还包括以下功能:
- AndroidX 中的所有软件包都以字符串开头,位于一致的命名空间中
androidx
。支持库包已映射到相应的androidx.*
包中。有关所有旧类和构建组件的完整映射到新构件。 - 与支持库不同,AndroidX 软件包是单独维护和更新的。这些
androidx
包使用从版本 1.0.0 开始的严格语义版本控制。开发者可以单独更新项目中的 AndroidX 库。 - 所有新的支持库开发都将在 AndroidX 库中进行。这包括维护原始支持库组件和引入新的 Jetpack 组件。
使用 AndroidX
如果要在新项目中使用 AndroidX,则需要一下条件:
- 使用
Android Studio 3.2 及更高版本
- 将
compileSdkVersion
设置为28(Android 9.0)或更高版本
- 将
gradle-wrapper.properties
文件中的 Gradle 版本改为4.6或更高版本
- 在
gradle.properties
文件中将以下两个 Android Gradle 插件标志设置true
:android.useAndroidX:
设置 true 为时,Android 插件使用相应的 AndroidX 库而不是支持库,默认为 false。android.enableJetifier:
设置 true 为时,Android 插件会自动迁移现有的第三方库,通过重写其二进制文件来使用 AndroidX,默认为 false。
迁移到 AndroidX
AndroidX 将原始支持库 API 包映射到 androidx
命名空间。只有包和 Maven 组件名称发生了变化; 类、方法和字段名称没有改变。
使用 Android Studio 3.2 及更高版本,您可以通过从菜单栏中选择 Refactor> Migrate to AndroidX 快速迁移现有项目以使用 AndroidX 。
如果您有任何尚未迁移到 AndroidX 名称空间的 Maven 依赖项,那么当您将 gradle.properties
文件中以下两个 Android Gradle 插件标志设置 true
,Android Studio 构建系统也会为您迁移这些依赖项:
android.useAndroidX=true
android.enableJetifier=true
要迁移不使用任何需要转换的依赖项的第三方库的现有项目,可以将 android.useAndroidX
标志设置为 true
,将 android.enableJetifier
标志设置为 false
。
组件映射
下表列出了从旧组件到新组件的当前映射,也可以下载CSV格式映射文件:
旧构建组件 | AndroidX 构建组件 |
---|---|
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 |
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 |
类映射
下表列出了部分常用的从旧命名空间到新 androidx
包的当前映射,也可以下载CSV格式映射文件:
支持库类 | AndroidX 类 |
---|---|
android.support.multidex.MultiDex | androidx.multidex.MultiDex |
android.support.v4.app.ActivityCompat | androidx.core.app.ActivityCompat |
android.support.v4.app.ActivityManagerCompat | androidx.core.app.ActivityManagerCompat |
android.support.v4.app.ActivityOptionsCompat | androidx.core.app.ActivityOptionsCompat |
android.support.v4.app.AlarmManagerCompat | androidx.core.app.AlarmManagerCompat |
android.support.v4.app.BundleCompat | androidx.core.app.BundleCompat |
android.support.v4.app.DialogFragment | androidx.fragment.app.DialogFragment |
android.support.v4.app.Fragment | androidx.fragment.app.Fragment |
android.support.v4.app.FragmentActivity | androidx.fragment.app.FragmentActivity |
android.support.v4.app.FragmentManager | androidx.fragment.app.FragmentManager |
android.support.v4.app.ListFragment | androidx.fragment.app.ListFragment |
android.support.v4.app.LoaderManager | androidx.loader.app.LoaderManager |
android.support.v4.app.NotificationCompat | androidx.core.app.NotificationCompat |
android.support.v4.app.NotificationCompatBuilder | androidx.core.app.NotificationCompatBuilder |
android.support.v4.app.NotificationManagerCompat | androidx.core.app.NotificationManagerCompat |
android.support.v4.content.ContextCompat | androidx.core.content.ContextCompat |
android.support.v4.content.CursorLoader | androidx.loader.content.CursorLoader |
android.support.v4.content.FileProvider | androidx.core.content.FileProvider |
android.support.v4.graphics.BitmapCompat | androidx.core.graphics.BitmapCompat |
android.support.v4.graphics.ColorUtils | androidx.core.graphics.ColorUtils |
android.support.v4.graphics.PaintCompat | androidx.core.graphics.PaintCompat |
android.support.v4.graphics.PathParser | androidx.core.graphics.PathParser |
android.support.v4.math.MathUtils | androidx.core.math.MathUtils |
android.support.v4.util.LruCache | androidx.collection.LruCache |
android.support.v4.util.Pair | androidx.core.util.Pair |
android.support.v4.util.TimeUtils | androidx.core.util.TimeUtils |
android.support.v4.widget.AutoScrollHelper | androidx.core.widget.AutoScrollHelper |
android.support.v4.widget.AutoSizeableTextView | androidx.core.widget.AutoSizeableTextView |
android.support.v4.widget.CircleImageView | androidx.swiperefreshlayout.widget.CircleImageView |
android.support.v4.widget.DrawerLayout | androidx.drawerlayout.widget.DrawerLayout |
android.support.v7.app.AlertDialog | androidx.appcompat.app.AlertDialog |
android.support.v7.app.AppCompatActivity | androidx.appcompat.app.AppCompatActivity |
android.support.v7.app.AppCompatDialog | androidx.appcompat.app.AppCompatDialog |
android.support.v7.widget.CardView | androidx.cardview.widget.CardView |
android.support.v7.widget.GridLayout | androidx.gridlayout.widget.GridLayout |
android.support.v7.widget.GridLayoutManager | androidx.recyclerview.widget.GridLayoutManager |
AndroidX 影响
官方博客中有说道,为了给开发者一定迁移的时间,所以 28.0.0
的稳定版本还是采用 android.support
,但是所有后续的功能版本都将采用 androidx
。
其实目前对于我们影响也不是很大,我们可以选择不使用,毕竟不是强制的。但长远看来还是有好处的。AndroidX 重新设计了包结构,旨在鼓励库的小型化,支持库和架构组件包的名字也都简化了;而且也是减轻 Android 生态系统碎片化的有效方式。