欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

AndroidX 迁移步骤,一篇就够了

程序员文章站 2022-03-28 16:12:53
AndroidX 迁移2018 年 I/O 大会后,Google 宣布将 Support Lib 重构为 AndroidX 的计划,随后便在 Support Lib 28 上进行了重构。然而因为后续不会在 Support Lib 上修复 bug 或者发布新功能,而且 Support Lib 和 AndroidX Lib 在项目中会互相冲突,所以我们不可避免的要进行 AndroidX 迁移。此篇文章就是笔者进行 AndroidX 迁移时的步骤和踩过的坑,希望可以帮到你。新建分支或者备份项目因为 Andr...

AndroidX 迁移

2018 年 I/O 大会后,Google 宣布将 Support Lib 重构为 AndroidX 的计划,随后便在 Support Lib 28 上进行了重构。然而因为后续不会在 Support Lib 上修复 bug 或者发布新功能,而且 Support Lib 和 AndroidX Lib 在项目中会互相冲突,所以我们不可避免的要进行 AndroidX 迁移。此篇文章就是笔者进行 AndroidX 迁移时的步骤和踩过的坑,希望可以帮到你。

新建分支或者备份项目

因为 AndroidX 的迁移会导致大量文件的修改,所以笔者建议备份项目,或者使用 Git 等工具,在单独的分支进行迁移,以免出问题后影响较大。

升级 Support Lib 至 28

因为 Support Lib 版本需要与 compileSdkVersion 大版本一致,所以我们需要先将 compileSdkVersion 修改为 28,为什么要升级到 28 呢?因为 Support Lib 28 与 AndroidX 只有命名空间不同,提前升级到 28 可以使后续修改最少:

compileSdkVersion : 28

然后将所有 Support Lib 的版本修改为大版本为 28 的可用版本:

// 以 v7 为例,修改大版本到 28
implementation 'com.android.support:appcompat-v7:27.0.0'
// 修改后
implementation 'com.android.support:appcompat-v7:28.0.0'

并且保证编译通过进行下一步。

开启 Jetifier

在 gradle.properties 文件中加入以下开关:

android.useAndroidX = true
android.enableJetifier = true

将 Support 依赖改为 AndroidX

Android Studio 3.2 稳定版已经提供了迁移功能,建议升级到 Android Studio 3.2 及后续版本。在 Android Studio 中选择 Refactor -> Migrate to AndroidX:
AndroidX 迁移步骤,一篇就够了

点击 Migrate,等待并进行下一步。

解决依赖冲突

一般来说,进行 AndroidX 迁移时,都会发生依赖冲突,这里笔者的解决办法是:

  1. 将所有 build.gradle 中的依赖都升级到建议版本:
    AndroidX 迁移步骤,一篇就够了

    // 如上图示例,我们将 firebase 从 16.0.3 升级到 17.4.4
    api 'com.google.firebase:firebase-core:17.4.4'
    

    这样做完所有依赖升级的话可以将依赖冲突降到最小,当然我们还是会遇到以来冲突

  2. 如果发生依赖冲突,查看 build 日志,看是哪个库的哪两个版本发生了冲突。发生冲突一般有两种情况,一是两个地方依赖了两个不同版本,这种情况随便删除一出就是。二是依赖了 A 和 B,但是 A 里面包含了不同版本的 B,这种情况要不然删除依赖 B,要不然将 B 的版本改为 A 中一致。

替换不可用包名

我们在做上述迁移步骤时,Android Studio 会将我们把所有 support 包的导入改为 androidx 包的导入,但是它并不是完全智能的, 如下图:

AndroidX 迁移步骤,一篇就够了

Android Studio 自动替换的包名为 androidx.core.app.DialogFragment,但其实在 AndroidX 中,DialogFragment 在 androidx.fragment.app 包下,为了避免重复工作,我们使用全局替换 androidx.core.app.DialogFragment 为 androidx.fragment.app.DialogFragment:

AndroidX 迁移步骤,一篇就够了

需要注意的是我们做全局替换时,一定要注意不要替换错,要不然当你做了多次全局替换时,发现其中有一次替换错误就比较难搞了。当然对于很多 build 所生成的文件(如 Databbinding 、ARouter、Dagger2 等)就不需要做全局替换了,直接 clean,然后在 build,以减轻工作量。

还有需要注意的是,如 DataBinding 一直报错,且 clean 不起作用时,可能是原文件中有错,导致 build 生成的文件有错,而 Databinding 直接进行 View 响应时不需要在 Java 文件中进行声明 View,所以 Android Studio 可能不会直接提示 xml 文件报错,我们就可以直接找到对应的布局文件,然后导入正确的文件并进行全局替换。

直到替换掉所有 xml 和 Java/Kotlin 文件中的错误 import,并且编译通过。

添加新的混淆配置

当我们使用了 AndroidX 时,如果我们的项目是需要混淆的,那我们需要添加新的混淆配置:

-keep class androidx.** {*;}
-keep interface androidx.** {*;}
-keep public class * extends androidx.**
-keep class com.google.android.material.** {*;}
-dontwarn androidx.**
-dontwarn com.google.android.material.**
-dontnote com.google.android.material.**

好了,AndroidX 的迁移步骤就是这些了。

本文地址:https://blog.csdn.net/Young_Time/article/details/107567088