Android 导入开发库transformDexArchiveWithExternalLibsDexMergerForDebug问题分析和解决

问题描述

最近在集成一个第三方的视频监控模块的时候遇到了一个很神奇的问题,如题,项目构建没问题,但是应用安装的时候一直出这个问题。一看就是开发库重复的问题。
Android 导入开发库transformDexArchiveWithExternalLibsDexMergerForDebug问题分析和解决

解决思路

1.初级思路,这种问题我见过,把所有项目的gradle找一遍删除掉重用的开发库,compile尽量改成implementation,这样可以让模块的引用在打包的时候不打包到apk中
Android 导入开发库transformDexArchiveWithExternalLibsDexMergerForDebug问题分析和解决

对了一遍,该改的改 ,该删的删问题还是没解决。

Android 导入开发库transformDexArchiveWithExternalLibsDexMergerForDebug问题分析和解决

2.在依赖库里面一个一个对照,发现不到问题。
还是没解决问题。

3.连个log都没有,这问题怎么定位。后面在命令行 gradle installdebug 打包了一下,还是没打包成功,但发现可以打印堆栈。
Android 导入开发库transformDexArchiveWithExternalLibsDexMergerForDebug问题分析和解决

重新用 gradle installdebug –stacktrace把堆栈日志打出来
发现有个类文件重复了。查看了这个类文件,还真的有两个。
Android 导入开发库transformDexArchiveWithExternalLibsDexMergerForDebug问题分析和解决
好小子居然在jar包里面,怪不得找半天没找到。
因为是Gson库,后面直接打开这个jar包删除掉这个gson文件夹,解决问题。

1.顺便解决一下疑问,就是jar包删除了某个文件夹肯定会导致jar包不可用。但是还好重复的是Gson,因为在编译的时候还是会把主项目的Gson编译到apk中,所以不用担心jar包的引用问题。如果重复的是其他的项目,并且版本不一致的话,那可能要舍弃些什么了。

2.因为是jar包所以不好定位,如果是其他的模块完全可以用implementation,或者exclude来移除相应的依赖。

反思

这边建议遇到打包问题的时候通过gradle 命令行来打印打包日志信息。这样能更好的定位很多错误。大多数问题其实可以看日志解决,多掌握一些debug的手段。