android关于V4包冲突解决

      在android studio开发中,常常会引入V4包,引用其中的类。但是我们新建项目为了支持高版本的SDK,引入了高版本的包。导致和V4包中的很多类冲突。不能正常运行应用。网上有很多是查找冲突的包或者是类名,删除掉整个冲突文件。这样做的弊端是导致其他引用此高版本的包工程缺少包报错无法运行或者是重新下载缺失的包。或者是有其他人加入此项目的时候,这样的过程又要重新做一遍。导致人力和时间的浪费。现在介绍如下方法,可以解决这样的问题:

       1.出现这样的报错后,从这里看不出任何冲突的问题;

        android关于V4包冲突解决_第1张图片

      2. 打开 gradle consonle, 找到如下圈圈所示位置(Run with –stacktrace),然后点击

              android关于V4包冲突解决_第2张图片

 

这里可以看到gradle失败的具体原因,Multiple dex files…. 显然是由于同一个文件在多个jar中出现,典型的jar冲突问题, 
那该类具体是在哪几个jar中被引用了呢?

                 android关于V4包冲突解决_第3张图片 

我们这时就看到这个FragmentContainer类冲突了 。

然后全局搜索这个类,发现在26.0.0的包中已经有这个类了。和V4冲突。

        android关于V4包冲突解决_第4张图片

     网上很多方法都是删除这个包,但是这样就会造成其他项目引用不到,或者另一个人用时,还要做上述操作,去删除它。

只需要在app的gradle文件的引用中,申明排除它,不应用即可。

implementation ('com.android.support:appcompat-v7:26.+'){
    exclude group: 'com.android.support',module: 'support-fragment'
    exclude group: 'com.android.support',module: 'support-core-utils'
    exclude group: 'com.android.support',module: 'support-core-ui'
    exclude group: 'com.android.support',module: 'support-compat'
}

FragmentContainer在包名为com.android.support,module为support-fragment中。所以,整个排除这个module即可。

然后再运行项目,然后又报冲突,然后重复上面方法,冲突的都排除。

本项目中,26.0.0版本和V4包冲突的有四个,所以4个都要排除。

其他的冲突问题也是这种解决思路。只需要排除多余的包即可。

你可能感兴趣的:(android关于V4包冲突解决)