引言

2018开始Andorid 已经宣布不再维护support, 最终定版在28.0.0, 而现在最新AS(Android Studio )项目新建默认都是AndroidX,甚至都不支持Android(特殊手段可以修改),这对新项目基本没有影响,但是对新建module会带来很大问题, 所以AndroidX的迁移势在必行.

Android Support 与 AndroidX

AndroidX 对原始 Android Support库进行了重大改进,后者现在已不再维护。AndroidX 软件包完全取代了支持库,不仅提供同等的功能,而且提供了新的库。

1.1 什么是AndroidX

Android系统在刚刚面世的时候,可能连它的设计者也没有想到它会如此成功。随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。

于是Android团队推出了的Android Support Library,用于提供向下兼容的功能。比如我们熟知的support-v4库,appcompat-v7库都是属于Android Support Library的。4在这里指的是Android API版本号,对应的系统版本是1.6。support-v4的意思就是这个库中提供的API会向下兼容到Android 1.6系统。类似地,appcompat-v7指的是将库中提供的API向下兼容至API 7,也就是Android 2.1系统。

随着时间的推移,Android1.6、2.1系统早已被淘汰了,现在Android官方支持的最低系统版本已经是4.0.1,对应的API版本号是15。support-v4、appcompat-v7库也不再支持那么久远的系统了,但是它们的名字却一直保留了下来,虽然它们现在的实际作用已经对不上当初命名的原因了。

Android团队也意识到这种命名已经非常不合适了,于是对这些API的架构进行了一次重新的划分,推出了AndroidX。因此,AndroidX本质上其实就是对Android Support Library进行的一次升级。

1.2 为什么要升级AndroidX

  • 版本 28.0.0 是Android Support 库的最后一个版本。官方将不再发布 android.support 库版本。所有新功能都将在 AndroidX命名空间中开发。
  • 长远来看。AndroidX重新设计了包结构,旨在鼓励库的小型化,支持库和架构组件包的名字进行了简化。而且这也是减轻Android生态系统碎片化的有效方式。
  • 与Android Support库不同,AndroidX软件包是单独维护和更新的。这些AndroidX包使用严格的语义版本控制,从版本1.0.0开始,您可以单独更新项目中的AndroidX库。

如何迁移

庆幸的是AS (3.2之后) 重构功能简化迁移流程

菜单栏 Refactor-- Migrate to AndroidX…

注意做好备份工作

操作后,AS会自动修改当前项目的 gradle.properties

android.useAndroidX=true  #启用 AndroidX
android.enableJetifier=true  #第三方依赖包AndroidX

迁移后APK差异

迁移前

迁移后

明显看到, dex包大小减少了0.3MB,类的数量减少400+, 方法数 减少5K+, 引用数减少7K+

迁移后问题汇总

目前迁移3个项目,只有一个有问题
1.WebView 找不到 String resource ID #0x2040003
猜测原因:
androidx appcompact activity context的资源 与系统activity 的不一致, 无法获取到资源文件
解决:
升级到 appcompat到 1.2.0-rc01 版本

参考

官方迁移指南

干货 | 携程Android 10适配踩坑指南

https://www.liangzl.com/get-article-detail-121423.html

2020年是时候迁移AndroidX了相关推荐

  1. 升级Android Studio到最新版本,升级Gradle到最新,迁移Androidx之路。

    随着Android手机的发展,Android系统版本的不断更新,迁移Androidx成了绕不开的步骤.如果是新项目,那 一切好说,但如果是老项目,坑死人不偿命(尤其是中途接手别人的项目的开发). 我是 ...

  2. 记录Android修改报名顺便迁移androidx

    修改包名: 我的方法不是正经方法..不能完全修改包名.. 1.修改app的build.gradle 的applicationId ,然后sync一下 ,接着把项目用到的一些配置文件里面哪里有用到pac ...

  3. 迁移AndroidX,你该搬家了

    官网链接:https://developer.android.google.cn/jetpack/androidx/migrate androidx已经出来有一段时间了,之所以现在才搬家 也是为了强迫 ...

  4. 【AS-AndroidX】迁移AndroidX带来的问题

    ---------------------------------------------------------------------------------------------------- ...

  5. android迁移androidx、极光推送(v4.9.0)配置

    一.版本配置 编译正常配置: buildToolsVersion       : "27.1.1", minSdkVersion           : 19, classpath ...

  6. Android开发之将AndroidX项目改为非androidX(android.v7.support)的方法

    老套路上图:看看我目前AndroidX依赖的库文件 修改方法: 1.打开gradle.properties文件将文件里面的下面两个属性 android.useAndroidX=true android ...

  7. Android -- AndroidX库

    前言 今天在 Android Studio 上新建了个项目,引入 butterknife:10.0.0,运行后居然抛出了异常: Manifest merger failed : Attribute a ...

  8. android DataBind LiveData ViewModel 使用详解

    1.导入android x ,升级 版本到28 implementation 'androidx.appcompat:appcompat:1.0.0'def room_version = " ...

  9. Kotlin 风险高、RxJava 已过时,Android 原生开发现状分析!

    当你好不容易学会了某个框架或者工具,觉得它很好用的时候,它或许就要过时了. 英文:The State of Native Android Development 作者:Vasiliy Zukanov, ...

最新文章

  1. java 写文件 错误码_JAVA-读取文件错误1(错误)
  2. 大佬的设计模式PDF学习笔记!
  3. 前1000位粉丝的诞生
  4. mysql+monitor+下载_详解MySQL监控工具 mysql-monitor
  5. c语言指数pow,C语言中的指数函数pow()问题
  6. mysql 结构体_mysql模块使用结构体生成数据库表,不识别long类型
  7. 240多个jQuey插件
  8. Docker容器真的安全吗?
  9. js html utf8编码转换,js中的UTF-8编码与解码
  10. Shell获取多行输入并输出每行的第3个字符
  11. python执行sql语句慢很多_Python学习教程:面试问:一条SQL语句执行得很慢的原因有哪些?...
  12. VFIO代码分析(5)VFIO-IOMMU驱动
  13. php 生僻字 拼音,php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
  14. 一文简单了解粒子群算法(PSO)
  15. 端午节谋定顺应自然-农业大健康·万祥军:根植古代农耕文化
  16. Php 领域驱动 视频,.Net DDD 领域驱动学习视频教程
  17. windows 10 笔记本无法连接无线网,显示已关闭
  18. 用jxcell导出图表到excel
  19. C51 基本函数、中断函数和库函数的详解
  20. 纯css实现tooltip文字浮框

热门文章

  1. android 双sd卡,华为Mate7如何实现双卡双待同时插入SD卡 华为Mate7双卡双待使用教程...
  2. 炉石传说职业梯队和强势卡牌推荐
  3. 读写锁(ReentranReadWriteLock))详解
  4. 反转单链表(三种方法)(三指针法)(头插法)(递归)经典面试题
  5. mdp框架_强化学习中q learning和MDP的区别是什么?
  6. ufs2.1 android bench,UFS发力,二代UFS 2.1闪存重磅来袭,安卓苹果差距不再
  7. 当知乎跳起科技华尔兹
  8. 云e办学习笔记(三)SpringSecurity学习(一)
  9. 胡子决定编程语言运势[zt]
  10. MyBatisPlus Service层的CRUD