【AS-AndroidX】AndroidX的迁移

目录

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 工件名称发生了变化;类、方法和字段名称没有改变。

1. AndroidX的变化

1.1)常用依赖库的对比

  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格式映射文件。

 

1.2)常用支持库类对比

  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格式映射文件。

 

2. AndroidX的手动迁移

2.1)更新升级插件

  • 将Android Studio更新至 AS 3.2及以上
  • Gradle 插件版本改为 4.6及以上

【AS-AndroidX】AndroidX的迁移_第1张图片

  • 工程Project下 gradle/wrapper/gradle-wrapper.properties 文件中的 distributionUrl 改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip        // 4.6及以上
  • 模块Module下 build.gradle 文件中 compileSdkVersion 版本升级到 28及以上
  • 模块Module下 build.gradle 文件中 buildToolsVersion 版本改为 28.0.2及以上
android {
    compileSdkVersion 29                // 28及以上                           
    buildToolsVersion "29.0.2"          // 28.0.2及以上
    defaultConfig {
        applicationId "com.example.hello.androidx"
        minSdkVersion 19
        targetSdkVersion 29
        ...
    }

}

 

2.2)开始迁移AndroidX

  • 工程Project下 gradle.properties 文件里添加如下配置:
android.useAndroidX=true
android.enableJetifier=true

表示项目启用 AndroidX 并迁移到 AndroidX。

 

2.3)替换依赖库

  • 模块Module下 build.gradle 文件中 dependencies { }闭包 中的依赖库:

形式如下,具体可参照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'
...

 

2.4)修改Java和Xml文件中的支持库类

  • 将各个类中的支持库类导入包(import android.***)修改为AndroidX类(import androidx.***):

形式如下,具体可参照1.2部分映射表

import android.support.v7.app.AppCompatActivity;        →        import androidx.appcompat.app.AppCompatActivity;
...

注意:XML文件中的控件也需要修改。

2.4.1) 修改方式一:逐类替换

前提:需先完成步骤2.2属性配置步骤2.3依赖库迁移这两个步骤
适用:适用于项目小类少的情况
操作
①先分别进入到每个Java类中,删除报错的旧支持库;
②重新在代码中报错类处使用导包快捷键【Alt+Enter】导入AndroidX的新类包;
③再分别进入每个XML文件中依据1.2部分映射表替换旧版支持库的控件为新版AndroidX库的控件。

2.4.2) 修改方式二:批量替换

适用:适用于巨大工程超多类的情况
操作:使用全局搜索替换快捷键【Ctrl+Shift+R】【Edit > Find > Replace in path..】并依据1.2部分映射表分别替换Java类中的导包XML布局文件中的控件
注意
①全局搜索替换的时候一定注意只替换自己写的代码的类中的导包。对于搜到的Android系统源码一些采用反射原理的第三方库或插件产生的编译码IDE程序自己迁移AndroidX的映射表其他非自己本工程中的类,不要替换。否则会影响步骤2.5或编译过程。
②全局搜索替换的时候区分Java类中的导包和XML文件中的控件。不要弄错弄混,导致编译时通过,但运行时出现控件的ClassNotFoundException异常

 

3. AndroidX的自动迁移

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 #

你可能感兴趣的:(Android,Android,Studio,AndroidX)