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:

点击 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 包的导入,但是它并不是完全智能的, 如下图:

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

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


扫描关注哟

   

----- DoubleThought -----

此项目需要迁移_AndroidX 迁移,看完它应该就够了相关推荐

  1. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,论软件架构设计的重要性、本篇论文“未通过考试”,供分析参考

    [系统架构设计师]软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有. 论软件架构设计的重要性.本篇论文未通过考试(不合格),供分析参考. 目录 摘要 正文 结尾 摘要 201 ...

  2. docker 删除所有镜像_关于 Docker 镜像的操作,看完这篇就够啦 !(下)| 文末福利...

    紧接着上篇<关于 Docker 镜像的操作,看完这篇就够啦 !(上)>,奉上下篇 !!! 镜像作为 Docker 三大核心概念中最重要的一个关键词,它有很多操作,是您想学习容器技术不得不掌 ...

  3. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,看完这篇就够了,方法和技巧这里全都有。

    目录 背景 报考条件 通过率 考试时间要求 系统架构设计师考试内容 证书的价值 备考建议 报班&自学 分享下我的自学方法 必胜法宝 分享我考试的心态 [系统架构设计师]软考高级职称,一次通过, ...

  4. 计算机基础ip地址私有地址,关于ip地址的详解,看完这篇就够了

    原标题:关于ip地址的详解,看完这篇就够了 前天我们发布了什么是公网ip?什么是内网ip?为什么ip地址通常以192.168开头?,有朋友反映有没有更基础的,那我们就从ip地址开始说起. 一.特殊的I ...

  5. PHP电子合同对接流程,企业如何API对接云合同电子合同系统,看完这篇就够了

    自有系统要怎样对接电子签名系统? 电子合同管理在哪个平台操作? 合同签署怎么完成? 看完这篇就够了 多种方案,系统与平台无缝对接 不管是供应链.人力资源.互联网金融还是大型企业,大部分平台都有自己的业 ...

  6. 十五天学会Autodesk Inventor,看完这一系列就够了(终章),答疑

    众所周知,Autocad是一款用于二维绘图.详细绘制.设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具.Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体 ...

  7. 关于做Kaggle比赛入门,看完这篇就够了

    PART 0 : Kaggle 介绍 Kaggle的数据挖掘比赛近年来很火,以至于中国兴起了很多很多类似的比赛 Kaggle 是一个数据科学竞赛的平台,很多公司会发布一些接近真实业务的问题,吸引爱好数 ...

  8. 十五天学会Autodesk Inventor,看完这一系列就够了(一),前言—介绍及区别

    众所周知,Autocad是一款用于二维绘图.详细绘制.设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具.Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体 ...

  9. 黑客零基础入门教程,从入门到精通学习路线规划,看完这篇就够了。

    很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样. 想要成为黑客,却苦于没有方向,不知道从何学起 ...

最新文章

  1. 【Scratch】青少年蓝桥杯_每日一题_7.09_加减大师
  2. PKUWC 2018 滚粗记
  3. 2009年3月28日四级网络工程师 试卷答案、点评及讨论
  4. Orac and Medians CodeForces - 1350D(思维)
  5. 王者荣耀微信哪个服务器人最少,王者荣耀:微信区王者人数锐减,大神们都去哪了?这些原因很真实...
  6. vue+uwsgi+nginx部署路飞学城
  7. 查询作者名长度大于8的 sql语言_从零学会SQL-入门
  8. 当你写爬虫抓不到APP请求包的时候该怎么办?【高级篇-混淆导致通用Hook工具失效】...
  9. Http 请求处理流程[转]
  10. grub4dos 制作WIN7、WINPE2003、Ubuntu、dos工具箱多启动U盘 (不量产)
  11. java计算机毕业设计基于安卓/微信小程序的个人健康打卡系统
  12. 最简单的Rest服务
  13. 《深入浅出WPF》——模板学习
  14. PSNR-峰值信噪比
  15. 数学建模作图准备(Python-Matplotlib)Matplotlib
  16. 10个团建小游戏备选方案
  17. php elasticsearch更新文档
  18. 有偏估计 无偏估计
  19. Linux关闭防火墙和端口号问题
  20. Javascript特效:点名册(随机点名)

热门文章

  1. kafka自带的zk启动_kafka-eagle监控和管理kafka
  2. jmeter分布式性能测试
  3. java es scroll,Elasticsearch Scroll分页检索案例分享
  4. 编译运行BSR/bench源码
  5. 【干货】史上最全的Tensorflow学习资源汇总(转)
  6. centos配置java环境变量_【开发笔记】-CentOS配置Java环境变量
  7. 自定义模块_Nginx自定义模块开发
  8. Java 什么是静态内部类
  9. Introducing and integrating Hibernate(Chapter 2 of Hibernate In Action)
  10. 分布式链路追踪(Sleuth、Zipkin)