android项目转androdx

时间:2021-7-20 作者:qvyue

一、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)在 gradle.properties添加:

              android.useAndroidX=true:该标志设置为 true 时,Android 插件会使用对应的              AndroidX 库,而非支持库。如果未指定,那么该标志默认为 false。

              android.enableJetifier=true:该标志设置为 true 时,Android 插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用 AndroidX 依赖项。如果未指定,那么该标志默认为 false。

   (3)Refactor—>Migrate to AndroidX

android项目转androdx
android项目转androdx

支持库与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”的代码:

android项目转androdx

网上说新版androdx已经解决此bug,删除此代码后,崩溃得以解决。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。