一、androidx为何物?
提到Androidx,你可能会有些陌生,是一种新技术吗?但support-v4、appcompat-v7库,相信每个Android开发的同学都用过,这个两个库同属android support库,那你知道v4或v7的含义吗? 4是指android api的版本,对应的系统版本是1.6,意思是这个库提供的api兼容到1.6,同理7对应的是系统版本是2.1,但随着时间的推移, v4/v7库已早不支持1.6、2.1的这些古老系统api,显然v4,v7这种根据系统版本的命名已显得名不副实和难以维护。
因此android官方推出了andoridx,命名不再依据api版本,所有api统一放到androidx.*下, 其实AndroidX 是对原有 Android Support Library的一次重大升级和整理,并不是一种全新的技术。androidx 软件包完全取代了支持库,不仅提供与支持库同等的功能,而且还提供了新的库。
谷歌官方已明确未来以androdx为主,support库将不再更新维护,版本 28.0.0 是支持库的最后一个版本,并且在新版本的android studio中,新建项目已默认强制使用AndroidX架构了,所以我们有必要将项目转成androidx。
二、迁移项目到androidx
(1) 将编译 SDK 设置为 Android 9.0(API 级别 28)或更高版本
(2)Refactor--->Migrate to AndroidX
支持库与Androidx 映射关系
https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings
三、迁移Androidx遇到问题记录
(1)gradle6.5 编译打release包 报Error:java.lang.OutOfMemoryError: GC overhead limit exceeded,设置"org.gradle.jvmargs=-Xmx4096m -Xms4096m" 、"dexOptions{ javaMaxHeapSize"4g" } 均无效,最终升级gradle到6.8.2问题解决
(2)升级androidx后,切换fragment 报“NullPointerException: androidx.fragment.app.FragmentManagerImpl.isDestroyed()”崩溃,经过检查 fragment 有段为之前解决fragment嵌套的bug:"java.lang.IllegalStateException: No activity"的代码:
网上说新版androdx已经解决此bug,删除此代码后,崩溃得以解决。