切分支
为防止迁移失败,在分支中进行升级操作,升级成功后合并到主干
修改相关build.gradle
将项目所有module 中builde.gradle中相关android.support 相关类版本号统一改为28.0.0。包含appcompat 相关 、constraintlayout相关、multidex、recyclerview 等;
修改根目录中 gradle.properties 文件
添加一下代码
# 表示使用 androidx
android.useAndroidX=true
# 表示将第三方库迁移到 androidx
android.enableJetifier=true
执行migrater to androidx
在Android studio(要求3.2或更高版本)中执行 工具栏 -> Refactor -> Migrate to AndroidX...
执行该操作时会提示
手动修改
执行 Migrate to AndroidX
成功后,项目中部分控件路径需要手动修改,包括java和xml文件
迁移之后 部分控件会使用错误的包名androidx.core.weight.*
,需要手动修改
控件或注解 | 参修改前 | 修改后 |
---|---|---|
NonNull | android.support.annotation.NonNull |
androidx.annotation.NonNull |
Nullable | android.support.annotation.Nullable |
androidx.annotation.Nullable |
RequiresApi | android.support.annotation.RequiresApi |
androidx.annotation.RequiresApi |
ViewPager | android.support.v4.view.ViewPager |
androidx.viewpager.widget.ViewPager |
TabLayout | android.support.design.widget.TabLayout |
com.google.android.material.tabs.TabLayout |
RecyclerView | android.support.v7.widget.RecyclerView |
androidx.recyclerview.widget.LinearLayoutManager |
LinearLayoutManager | android.support.v7.widget.LinearLayoutManager |
androidx.recyclerview.widget.RecyclerView |
DialogFragment | android.support.v4.app.DialogFragment |
androidx.fragment.app.DialogFragment |
FragmentManager | android.support.v4.app.FragmentManager |
androidx.fragment.app.FragmentManager |
FragmentTransaction | android.support.v4.app.FragmentTransaction |
androidx.fragment.app.FragmentTransaction |
AppCompatActivity | android.support.v7.app.AppCompatActivity |
androidx.appcompat.app.AppCompatActivity |
butterknife 相关
修改完成后 编译 提示 butterknife报错:
The given artifact contains a string literal with a package reference
android.support.v4.content that cannot be safely rewritten.
Libraries using reflection such as annotation processors need to be
updated manually to add support for androidx.
buide.gralde 文件中修改
implementation 'com.jakewharton:butterknife:10.2.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1'
增加
android {
compileSdkVersion 28
//添加以下
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig { }
}
执行 File-Invalidate caches / restart
,重启后程序完美运行,整个过程比较顺利,没有遇到其他坑。