安卓包冲突,包重复的解决方案(很有效)

前言


声明: 本文仅供安卓新手或者有需要的人阅读, 老司机请绕路。^ ,^!!

这个问题,我非常久之前就想把这个问题归类进行总结, 但是苦于每次都是零零碎碎的,没有遇到好的情况能够直接说明,这次再次遇到之后,就好好的整理下这个问题, 给遇到该问题却不知道怎么思考的同学一个思维导向,让你们以后进行开发的时候 ,不会这样的存在后顾之忧。本文可能会讲几个典型的例子,不过主要还是教大家一个思维方式和“统一原则” 。(请大家一定要切记,我发现很多有经验的开发者也没有遵循)

第一种情况 包冲突(也叫包重复)


首先,我们来讲下为什么会出现这样的情况。我们做安卓开发的都应该知道,版本这个词,几乎贯穿了整个安卓开发, compileSdkVersion , buildToolsVersion , minSdkVersion , targetSdkVersion ,最后是依赖版本号supportVersion (这里指的是谷歌依赖包的版本号)
经常遇到这样的情况,我们发现很多问题都是因为这些版本不一致,当然我们的包冲突也不例外,当然这个也是当中的一种情况,我们先说说这个情况。

  • 错误一,最直观的报错:运行时就已经出现了错误。(这算是有根可循了)
image.png
  • 错误二,可能我们平常看到的包冲突一般是这样的,没有【错误一】那么有根可循。


    image.png
  • 分析:针对【错误一】我们可以这样做 ,我们复制这个出现错误的类 ,按两下shift弹出全局搜索的对话框。我们可以看到这样的


    image.png

    结果很清晰, 那就是两个版本不同的包进行冲突了。那么我们怎么解决呢?
    我们先不急,我们先观察下我们External Library(就是我们平常可以看到当前项目集成了依赖包)

image.png

这样我们是不是恍然大悟了呢? 我们经常做安卓开发, 肯定或多或少会遇到一些这样的问题 ,接下来我们只要把所有版本号 修改一致就好了,详情如下图:

image.png

我们修改这些版本是有一个原则的,就是开头一定是一致的,我们这里说的都是26或者26.x.x,而我们通过External Library就可以检查这些版本是不是有多个版本在该项目中,因为有一个不同版本的依赖包多少会影响开发,或许你想说,我也是版本不同,但是也没有出现你这样的情况,有必要那么危言耸听么?

版本不同,就像是一个定时炸弹,或者你这会写代码没出什么问题,可能你再加一个module作为依赖,可能会导致这个问题比较突出,我提供的这些方法就能够非常有效的避免和规避这些问题。

【错误二】的分析思路也是和上面一致的,只要记住一个“统一原则”。

假设你把这些版本差异都改成了一致, 以我解决了无数次的经验,肯定会出现真正的错误,这样的错误是可以看到日志的,相信这个时候,你肯定能够那找到一些蛛丝马迹。(当然没有解决你的问题,可以加群一起交流哦)

  • 统一原则: 所有的module不管是依赖还是主工程,都要保持这些版本一致,
 ``compileSdkVersion``     //指定构建版本
 ``buildToolsVersion``      //构建工具版本
 ``minSdkVersion``         //最小版本
 ``targetSdkVersion``    //指定平台版本
``supportVersion``      //所有谷歌依赖包版本

附其他情况(由于当前没有那样的问题,等有问题再在此进行补充)

以上的都是AS开发中谷歌依赖包出现的问题, 这个虽然常见,但也不能涵盖所有的问题,比如还有我们常见的okhttp的包冲突,还有集成阿里的UTDevice等, 我们解决这些【包冲突】的思路,其实我在上面已经说的非常清楚,就是“统一原则”,okhttp之类的冲突,主要是版本不一致导致, 阿里的utdevice是因为有多个相同的包在项目内,可以在阿里对应sdk的开发文档中,下载不含这个文件的sdk, 这些官网都是有说明的。

如果实在以上的解决方案还没有解决你的问题, 那么肯定是我的锅, 我有责任给你解决掉。请到鸿洋的群找我吧!!请戳↗↗↗wanandroid交流群 记得附上答案,http://www.wanandroid.com哦。

推荐阅读更多精彩内容