目录
1. AndroidX的变化
1.1)常用依赖库的对比
1.2)常用支持库类对比
2. AndroidX的手动迁移
2.1)更新升级插件
2.2)开始迁移AndroidX
2.3)替换依赖库
2.4)修改Java和Xml文件中的支持库类
2.4.1) 修改方式一:逐类替换
2.4.2) 修改方式二:批量替换
3. AndroidX的自动迁移
Android Support支持库升级AndroidX
Google 2018 IO 大会推出了 Android新的扩展库 AndroidX,用于替换原来的 Android扩展库,将原来的android.*替换成androidx.*;
AndroidX 会将原始支持库 API 软件包映射到 AndroidX 命名空间。只有软件包和 Maven 工件名称发生了变化;类、方法和字段名称没有改变。
Old Build Artifact | AndroidX Build Artifact | |
20 | com.android.support:appcompat-v7 | androidx.appcompat:appcompat |
18 | com.android.support.constraint:constraint-layout | androidx.constraintlayout:constraintlayout |
18 | com.android.support.test.espresso:espresso-core | androidx.test.espresso:espresso-core |
10 | com.android.support:design | com.google.android.material:material |
8 | com.android.support:recyclerview-v7 | androidx.recyclerview:recyclerview |
4 | com.android.support:cardview-v7 | androidx.cardview:cardview |
3 | com.android.support:support-v4 | androidx.legacy:legacy-support-v4 |
1 | com.android.support:support-vector-drawable | androidx.vectordrawable:vectordrawable |
1 | com.android.support:gridlayout-v7 | androidx.gridlayout:gridlayout |
1 | com.android.support:multidex | androidx.multidex:multidex |
1 | com.android.support:percent | androidx.percentlayout:percentlayout |
1 | com.android.support:support-annotations | androidx.annotation:annotation |
1 | com.android.support:support-compat | androidx.core:core |
1 | com.android.support:support-v13 | androidx.legacy:legacy-support-v13 |
更详细内容可参考文章:#【AS-AndroidX】AndroidX迁移-支持依赖库前后对比 #
或从官网下载最新映射文件:在这里下载CSV格式映射文件。
Support Library Class | AndroidX Class | |
113 | android.support.v7.app.AppCompatActivity | androidx.appcompat.app.AppCompatActivity |
82 | android.support.v4.app.Fragment | androidx.fragment.app.Fragment |
73 | android.support.annotation.NonNull | androidx.annotation.NonNull |
71 | android.support.annotation.Nullable | androidx.annotation.Nullable |
67 | android.support.v7.widget.RecyclerView | androidx.recyclerview.widget.RecyclerView |
28 | android.support.v7.widget.LinearLayoutManager | androidx.recyclerview.widget.LinearLayoutManager |
26 | android.support.v4.view.ViewPager | androidx.viewpager.widget.ViewPager |
26 | android.support.constraint.ConstraintLayout | androidx.constraintlayout.widget.ConstraintLayout |
23 | android.support.v7.app.ActionBar | androidx.appcompat.app.ActionBar |
20 | android.support.v7.widget.Toolbar | androidx.appcompat.widget.Toolbar |
18 | android.support.v4.app.ActivityCompat | androidx.core.app.ActivityCompat |
17 | android.support.v4.content.ContextCompat | androidx.core.content.ContextCompat |
15 | android.support.v4.app.FragmentManager | androidx.fragment.app.FragmentManager |
15 | android.support.v7.app.AlertDialog | androidx.appcompat.app.AlertDialog |
12 | android.support.v4.app.FragmentPagerAdapter | androidx.fragment.app.FragmentPagerAdapter |
10 | android.support.design.widget.FloatingActionButton | com.google.android.material.floatingactionbutton.FloatingActionButton |
8 | android.support.v7.widget.GridLayoutManager | androidx.recyclerview.widget.GridLayoutManager |
7 | android.support.v4.widget.SwipeRefreshLayout | androidx.swiperefreshlayout.widget.SwipeRefreshLayout |
7 | android.support.v4.content.FileProvider | androidx.core.content.FileProvider |
6 | android.support.annotation.RequiresApi | androidx.annotation.RequiresApi |
5 | android.support.v4.app.FragmentActivity | androidx.fragment.app.FragmentActivity |
更详细内容可参考文章:#【AS-AndroidX】AndroidX迁移-常用控件和常用类前后对比 #
或从官网下载最新映射文件:在这里下载CSV格式映射文件。
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip // 4.6及以上
android {
compileSdkVersion 29 // 28及以上
buildToolsVersion "29.0.2" // 28.0.2及以上
defaultConfig {
applicationId "com.example.hello.androidx"
minSdkVersion 19
targetSdkVersion 29
...
}
}
android.useAndroidX=true
android.enableJetifier=true
表示项目启用 AndroidX 并迁移到 AndroidX。
形式如下,具体可参照1.1部分的映射表:
implementation 'com.android.support:appcompat-v7:28.0.2' → implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'com.android.support:design:28.0.2' → implementation 'com.google.android.material:material:1.0.0'
...
形式如下,具体可参照1.2部分映射表:
import android.support.v7.app.AppCompatActivity; → import androidx.appcompat.app.AppCompatActivity;
...
注意:XML文件中的控件也需要修改。
前提:需先完成步骤2.2属性配置和步骤2.3依赖库迁移这两个步骤
适用:适用于项目小类少的情况
操作:
①先分别进入到每个Java类中,删除报错的旧支持库;
②重新在代码中报错类处使用导包快捷键【Alt+Enter】导入AndroidX的新类包;
③再分别进入每个XML文件中依据1.2部分映射表替换旧版支持库的控件为新版AndroidX库的控件。
适用:适用于巨大工程超多类的情况
操作:使用全局搜索替换快捷键【Ctrl+Shift+R】或【Edit > Find > Replace in path..】并依据1.2部分映射表分别替换Java类中的导包和XML布局文件中的控件。
注意:
①全局搜索替换的时候一定注意只替换自己写的代码的类中的导包。对于搜到的Android系统源码或一些采用反射原理的第三方库或插件产生的编译码或IDE程序自己迁移AndroidX的映射表和其他非自己本工程中的类,不要替换。否则会影响步骤2.5或编译过程。
②全局搜索替换的时候区分Java类中的导包和XML文件中的控件。不要弄错弄混,导致编译时通过,但运行时出现控件的ClassNotFoundException异常。
Android Studio 3.2 及以上版本提供了更加方便快捷的方法一键迁移到 AndroidX。
操作:菜单栏【Refactor > Migrate to AndroidXRefactor】—— 风险备份代码(可选) —— Migrate
注意①:如果你的项目compileSdkVersion 低于28,点击Refactor to AndroidX...会提示如下:
提示需使用不低于28的SDK,升级最新SDK,然后点击 Migrate to AndroidX...,AS就会自动将项目重构并使用AndroidX库。
You need to have at least have compileSdk 28 set in your module build.gradle to refactor to androidx
注意②:如果迁移失败,就需要重复上面步骤2.1~2.4手动去修改迁移。
注意③:使用自动迁移完毕之后,编译报错,则可能是自动迁移时Android Studio内置映射表识别错误。
对于各类因迁移至AndroidX产生的错误,可
参考文章:https://blog.csdn.net/dandelionela/article/details/103026690 #【AS-AndroidX】迁移AndroidX带来的问题 #
---------------------------------------------------------------------
参考原文:https://www.jianshu.com/p/7dc111353328 # Android AndroidX的迁移 #
AndroidX官方迁移文档:https://developer.android.google.cn/jetpack/androidx/migrate # 迁移到 AndroidX #