此项目需要迁移_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 为例,修改大版本到 28implementation 'com.android.support:appcompat-v7:27.0.0'// 修改后implementation 'com.android.support:appcompat-v7:28.0.0'

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

开启 Jetifier

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

android.useAndroidX = trueandroid.enableJetifier = true

将 Support 依赖改为 AndroidX

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

fe702d4b68bca30a9f1d8cc61ac94e46.png

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

解决依赖冲突

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

  1. 将所有 build.gradle 中的依赖都升级到建议版本:

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

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

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

替换不可用包名

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

adda0d1ef4b6d97de9b4395a41bbf146.png

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

43fddf722670efec47752906aa3a2fbb.png

 需要注意的是我们做全局替换时,一定要注意不要替换错,要不然当你做了多次全局替换时,发现其中有一次替换错误就比较难搞了。当然对于很多 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 的迁移步骤就是这些了。喜欢的话点个赞吧,也可以扫描关注哟。


扫描关注哟

83d616915d8f3045282d1d5440838f6f.png   9515ba0d7237b009a035d9fba1d5e80b.png

----- DoubleThought -----

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值