安卓项目迁移androidX(为何需要迁移,迁移遇到的问题及解决),必须迁移,早动早省事

androidX ???

首先去google官方看看是什么意思
谷歌文档

AndroidX Overview(安卓X 概览)
AndroidX is the open-source project that the Android team uses to develop, test, package, version and release libraries within Jetpack.
AndroidX is a major improvement to the original Android Support Library. Like the Support Library, AndroidX ships separately from the Android OS and provides backwards-compatibility across Android releases. AndroidX fully replaces the Support Library by providing feature parity and new libraries. In addition AndroidX includes the following features:

  • All packages in AndroidX live in a consistent namespace starting with the string androidx. The Support Library packages have been mapped into corresponding androidx.* packages. For a full mapping of all the old classes and build artifacts to the new ones, see the Package Refactoring page.
  • Unlike the Support Library, AndroidX packages are separately maintained and updated. The androidxpackages use strict Semantic Versioning starting with version 1.0.0. You can update AndroidX libraries in your project independently.
  • All new Support Library development will occur in the AndroidX library. This includes maintenance of the original Support Library artifacts and introduction of new Jetpack components.

翻译一下:
AndroidX 是 Android 团队用于在 Jetpack 中开发、测试、打包和发布库以及对其进行版本控制的开源项目。
AndroidX 对原始 Android 支持库进行了重大改进。与支持库一样,AndroidX 与 Android 操作系统分开提供,并与各个 Android 版本向后兼容。AndroidX 完全取代了支持库,不仅提供同等的功能,而且提供了新的库。此外,AndroidX 还包括以下功能:

  • AndroidX 中的所有软件包都使用一致的命名空间,以字符串 androidx 开头。支持库软件包已映射到对应的 androidx.* 软件包。有关所有旧类到新类以及旧编译工件到新编译工件的完整映射,请参阅软件包重构页面。
  • 与支持库不同,AndroidX 软件包会单独维护和更新。androidx 软件包使用严格的语义版本控制,从版本 1.0.0 开始。您可以单独更新项目中的 AndroidX 库。
  • 所有新支持库的开发工作都将在 AndroidX 库中进行。这包括维护原始支持库工件和引入新的 Jetpack 组件。
    我这边总结一下:
    简单的说,AndroidX是Android Support Library的改进版,以后新的东西只会更新再AndroidX中,support库会逐渐被放弃。 这可能是个好消息,不用再纠结用v4还是v7了,统统改为X。统一管理,向ios模式靠拢,利于我们开发者工作和后期项目维护

使用 AndroidX
如果要在新项目中使用 AndroidX,则需要将编译 SDK 设置为 Android 9.0(API 级别 28)或更高版本,并在 gradle.properties 文件中将以下两个 Android Gradle 插件标记设置为 true。

  • android.useAndroidX:如果设置为 true,Android 插件会使用相应的 AndroidX 库,而非支持库。如果未指定,则该标记默认为 false。
  • android.enableJetifier:如果设置为 true,Android 插件会重写其二进制文件,自动迁移现有的第三方库以使用 AndroidX。如果未指定,则该标记默认为 false。
    必备条件:
    安卓studio版本号:3.2或者以上
    compileSdkVersion 至少28(android 9.0);
  • 第一步:添加下面两行代码:

#项目迁移至androidx
android.useAndroidX=true
android.enableJetifier=true

在这里插入图片描述

  • 第二步:sync一下,然后 Refactor > Migrate to AndroidX

在这里插入图片描述

在这里插入图片描述

如图的意思,
before proceeding,we recommend that you make a backup of your project depending on your project dependencies,you might need to manually fix some errors after the refactoring in order to successfully compile your project. do you want to proceed with the migration backup project as zip file
在继续之前,我们建议您根据项目依赖性备份项目,您可能需要在重构之后手动修复一些错误,以便成功编译项目。是否要以zip文件的形式继续迁移备份项目?
很明确的指出,可能一键迁移后,依然有些错误,需要手动修复,建议大家备份,以便用来还原。好吧,做好踩坑准备!开干~

点击 Migrate后,经过studio一阵编译替换:
爆出一片红:
如下图所示:
在这里插入图片描述

第三步:
然后我
在这里插入图片描述

然后运行即可:是可以运行成功的,这时候你是不是很开心,原来就这么简单,no,不要着急,当你在项目中来回点击,发现莫名其妙的崩溃
是因为在fragment和activity中的xml布局中应用的support控件没有替换,所以需要我们去手动查找,替换,注意不要遗漏哦
我们的 项目就出现遗漏现象,上线后,崩溃一大堆,
具体解决步骤:
Activity/Fragment/XML(包括涉及到使用support包的工具类等),原来引用support包中的类,在Migrate后并不能完全对应,会有很多错误(方便还是有代价的,通往幸福的路总是充满坎坷),所以需要改成对应的androidX中的类引用。
全局替换: Edit ->Find -> Replace in path
相应的替换为谷歌的空间即可,然后在全局搜索一下是否还存在 android.support
在这里插入图片描述

在这里插入图片描述
混淆文件中的 可以删除了也可以不用处理
在manifest中的需要去查看一下




这个android.support 不需要处理,保持现状即可。
你的androidX迁移不出意外已经完成。
问题:不是所有第三方库都支持anroidX。
解决办法:不用担心,现在常用的大多数库都已经支持androidX了。使用androidX是一种趋势,这还需要程序员们的共同推广。全民androidX的时候,这个问题就不是问题了。
开始我是这么认为的:
第三方库不支持androidx并不影响你使用androidx,反正有Jetifier会帮你修改第三方的依赖
直到被坑了,facebook广告使用了supportv4中的东西,好像反射使用的,而这个v4库需要我去做依赖,但我升级了androidx导致v4无法依赖,直接凉了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值