Android support升级到androidx (v4 v7 包冲突 解决方案)

androidx 是对 android.support.xxx 包的整理后产物。由于之前的support包过于混乱,所以,google推出了 androidX。在不使用Androidx时会导致出现许多错误,以下是将support包转为androidx过程:
 
随着Android系统版本不断地迭代更新,每个版本中都会加入很多新的API进去,但是新增的API在老版系统中并不存在,因此这就出现了一个向下兼容的问题。
 
Fragment的作用并不只局限于平板,以前的老系统中也想使用这个功能该怎么办?于是Android团队推出了一个鼎鼎大名的Android Support Library,用于提供向下兼容的功能。比如我们每个人都熟知的support-v4库,appcompat-v7库都是属于Android Support Library的,这两个库相信任何做过Android开发的人都使用过。
 
但是可能很多人并没有考虑过support-v4库的名字到底是什么意思,
4在这里指的是Android API版本号,对应的系统版本是1.6。那么support-v4的意思就是这个库中提供的API会向下兼容到Android 1.6系统。它对应的包名如下:
 
类似地,appcompat-v7指的是将库中提供的API向下兼容至API 7,也就是Android 2.1系统。
 
那么很明显,Android团队也意识到这种命名已经非常不合适了,于是对这些API的架构进行了一次重新的划分,推出了AndroidX。因此,AndroidX本质上其实就是对Android Support Library进行的一次升级,升级内容主要在于以下两个方面。
 
 

第一,包名。之前Android Support Library中的API,它们的包名都是在android.support.*下面的,而AndroidX库中所有API的包名都变成了在androidx.*下面。这是一个很大的变化,意味着以后凡是android.*包下面的API都是随着Android操作系统发布的,而androidx.*包下面的API都是随着扩展库发布的,这些API基本不会依赖于操作系统的具体版本。

第二,命名规则。吸取了之前命名规则的弊端,AndroidX所有库的命名规则里都不会再包含具体操作系统API的版本号了。比如,像appcompat-v7库,在AndroidX中就变成了appcompat库。

 
它其实并不是什么全新的东西,而是对Android Support Library的一次升级
 
 
需要注意: AndroidX和Android Support Library中的库是非常不建议混合在一起使用的,因为它们可能会产生很多不兼容的问题。最好的做法是,要么全部使用AndroidX中的库,要么全部使用Android Support Library中的库
 
而现在Android团队官方的态度也很明确,未来都会为AndroidX为主,Android Support Library已经不再建议使用,并会慢慢停止维护。另外,从Android Studio 3.4.2开始,我发现新建的项目已经强制勾选使用AndroidX架构了
 
 
那么对于老项目的迁移应该怎么办呢?由于涉及到了包名的改动,如果从Android Support Library升级到AndroidX需要手动去改每一个文件的包名,那可真得要改死了。为此,Android Studio提供了一个一键迁移的功能,只需要对着你的项目名右击 → Refactor → Migrate to AndroidX,就会弹出如下图所示的窗口。
在菜单栏中依次进入Refactor > Migrate to AndroidX。
 
 
 

Android studio v4 v7 包冲突 解决方案

 

具体做法有以下二种:

 第一种方案

由于第三方包中的v4 jar一般比较旧,将v4包从libs目录下删除,重新添加在线的依赖库v4包,在build.gradle中添加依赖:

    implementation 'com.android.support:support-v4:28.0.0'
注意此时的v4包的版本号要和你主工程module的v7包的版本要一致,(一般情况下相同版本的依赖包不会冲突),然后重新build工程就可以了;
例:出现下面错误

Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
  com.Android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException:

翻译过来就是Jar包冲突,然后看了一下,第三方库中的libs下,依赖了一个v4的jar包,而主工程中又依赖了一个v7的库而导致的冲突;

将v4包从libs目录下删除,重新添加在线的依赖库v4包,就可以了;

第二种方案:

不用删除第三方库中的V4包,直接在主工程Module的build.gradle文件中添加如下:

        

implementation('com.android.support:appcompat-v7:28.0.0') {
            exclude module: 'support-v4'
        }

导入第三方v4与v7冲突的解决办法


默认情况下v7中是包含V4包的,exclude  的意思就是从v7包中去除v4包这样就可以解决冲突
 

 

  • 3
    点赞
  • 14
    收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论 5

打赏作者

深南大盗

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值