BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

程序出现问题,自然而然想到的看log,然后定位问题在哪里。gradle作为一门脚本语言,也可以说是一门编程语言, 
通过gradle 构建程序如果失败,最好的解决方式当然也是看log,然后找出问题所在,具体的方式如下几个步骤:

  • gradle中jar冲突问题,从这里是看不出任何原因 

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

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

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

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

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

  • 在 android studio 中进行全局搜索(双击Shift即可),可以看到 classes.jar 中和 gson-2.7.jar 中引用了 该类,而且两个gson的版本是不一致的, classes.jar 在本地的libs可以找到,但是 gson-2.7.jar 始终找不到在哪里被显示依赖。 绝招来了 ,看下面…

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

  • 打开终端,然后输入 gradle app:dependencies ,可以看到 gradle 的依赖树,然后搜索 gson-2.7,原来是在 converter-gson.jar中被依赖了,终于找到了问题所在。 

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

解决方法: 
1. 直接修改第三方jar中,将里面的引用的gson直接删除。 
2. exclude 剔除掉多余的包(例如:{exclude group: 'com.google.code.gson'} )。

BUG解决思路-AndroidStudio-transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位(依赖包重复)

到此为止,gradle构建时因为jar冲突的定位问题相信可以得到很好的解决。。。希望能够帮到您们!

参考:transformDexArchiveWithExternalLibsDexMergerForDebug 问题的完美定位