2020年是时候迁移AndroidX了
引言
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了相关推荐
- 升级Android Studio到最新版本,升级Gradle到最新,迁移Androidx之路。
随着Android手机的发展,Android系统版本的不断更新,迁移Androidx成了绕不开的步骤.如果是新项目,那 一切好说,但如果是老项目,坑死人不偿命(尤其是中途接手别人的项目的开发). 我是 ...
- 记录Android修改报名顺便迁移androidx
修改包名: 我的方法不是正经方法..不能完全修改包名.. 1.修改app的build.gradle 的applicationId ,然后sync一下 ,接着把项目用到的一些配置文件里面哪里有用到pac ...
- 迁移AndroidX,你该搬家了
官网链接:https://developer.android.google.cn/jetpack/androidx/migrate androidx已经出来有一段时间了,之所以现在才搬家 也是为了强迫 ...
- 【AS-AndroidX】迁移AndroidX带来的问题
---------------------------------------------------------------------------------------------------- ...
- android迁移androidx、极光推送(v4.9.0)配置
一.版本配置 编译正常配置: buildToolsVersion : "27.1.1", minSdkVersion : 19, classpath ...
- Android开发之将AndroidX项目改为非androidX(android.v7.support)的方法
老套路上图:看看我目前AndroidX依赖的库文件 修改方法: 1.打开gradle.properties文件将文件里面的下面两个属性 android.useAndroidX=true android ...
- Android -- AndroidX库
前言 今天在 Android Studio 上新建了个项目,引入 butterknife:10.0.0,运行后居然抛出了异常: Manifest merger failed : Attribute a ...
- android DataBind LiveData ViewModel 使用详解
1.导入android x ,升级 版本到28 implementation 'androidx.appcompat:appcompat:1.0.0'def room_version = " ...
- Kotlin 风险高、RxJava 已过时,Android 原生开发现状分析!
当你好不容易学会了某个框架或者工具,觉得它很好用的时候,它或许就要过时了. 英文:The State of Native Android Development 作者:Vasiliy Zukanov, ...
最新文章
- java 写文件 错误码_JAVA-读取文件错误1(错误)
- 大佬的设计模式PDF学习笔记!
- 前1000位粉丝的诞生
- mysql+monitor+下载_详解MySQL监控工具 mysql-monitor
- c语言指数pow,C语言中的指数函数pow()问题
- mysql 结构体_mysql模块使用结构体生成数据库表,不识别long类型
- 240多个jQuey插件
- Docker容器真的安全吗?
- js html utf8编码转换,js中的UTF-8编码与解码
- Shell获取多行输入并输出每行的第3个字符
- python执行sql语句慢很多_Python学习教程:面试问:一条SQL语句执行得很慢的原因有哪些?...
- VFIO代码分析(5)VFIO-IOMMU驱动
- php 生僻字 拼音,php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
- 一文简单了解粒子群算法(PSO)
- 端午节谋定顺应自然-农业大健康·万祥军:根植古代农耕文化
- Php 领域驱动 视频,.Net DDD 领域驱动学习视频教程
- windows 10 笔记本无法连接无线网,显示已关闭
- 用jxcell导出图表到excel
- C51 基本函数、中断函数和库函数的详解
- 纯css实现tooltip文字浮框
热门文章
- android 双sd卡,华为Mate7如何实现双卡双待同时插入SD卡 华为Mate7双卡双待使用教程...
- 炉石传说职业梯队和强势卡牌推荐
- 读写锁(ReentranReadWriteLock))详解
- 反转单链表(三种方法)(三指针法)(头插法)(递归)经典面试题
- mdp框架_强化学习中q learning和MDP的区别是什么?
- ufs2.1 android bench,UFS发力,二代UFS 2.1闪存重磅来袭,安卓苹果差距不再
- 当知乎跳起科技华尔兹
- 云e办学习笔记(三)SpringSecurity学习(一)
- 胡子决定编程语言运势[zt]
- MyBatisPlus Service层的CRUD