打包错误Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define

昨天准备发布一个版本,算好了时间,在解决完其他问题后预留两个小时来上传。在打包时遇见了问题,害的我加班三个小时。现记录下问题,并整理下解决问题的思路。

打包出现问题时的截图

打包出现问题是的截图

图片可能看不太清楚,错误如下:

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs;

蹩脚的翻译:

错误:将字节码文件转换为dex文件出现错误
原因:异常为:com.android.dex.DexException,Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs这一个类出现了多个dex文件的定义

经过一番搜索,我的理解为:要使用到的一个类在项目中有多个librariy都存在。如果只是照这样理解,就应该在那几个librariy添加依赖时移除掉AccessibilityServiceInfoCompatIcs这个类,但是搜遍全网并没有方法可以做到。
于是,我就在添加依赖时,移除点含有AccessibilityServiceInfoCompatIcs这个类的librariy,因为,一般这些包含同一个相同类的library功能肯定是相同的,不用担心,移除了重复的library会导致项目出现错误。

具体方法:

1、Ctrl + N 查找到项目中含有AccessibilityServiceInfoCompatIcs这个类的librariy (注意:最近又遇到一个library重复的问题,但是通过Ctrl + N根本找不到会有两个或者更多的library包含了这一个文件,所以,需要自己判断引入重复的library)

打包错误Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define_第1张图片

可以看到一共有三个v4包含有这个类

2、对应查看项目中含有AccessibilityServiceInfoCompatIcs类的librariy,找到External Libraries

打包错误Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define_第2张图片

3、移除重复librariy,只保留一个.

这时候想要移除重复包,应该是有两种情况。

一种情况是,可以直接在libs文件夹中可以找到,那么就直接移除即可。对于有的地方移除了会报错,只需添加依赖那唯一一个保留下来的librariy即可。

另一种情况就是在libs文件夹中找不到,我这儿就是。就说明这个librariy是在别的librariy里面。这比较头疼,因为我也不知道我添加依赖的library里面到底包含哪些library。

不过,我想到了一个笨方法:在给一个library添加依赖后,编译完成后在External Library可以查看到对应的library,那我就不断去掉对应依赖的library,不断的查看External Library中library,如果在移除掉一个library后在External Library中我们需要移除的library(我这儿就是关注那2个v4包和support-compat包)也跟着没了,那就说明该library中包含那个重复library(我这儿就是那2个v4包和support-compat包)。

我在不断的注释移除依赖库,终于找到了第一个library,在移除掉cn.finalteam:galleryfinal:1.4.8.7这个库之后,support-v4-23.1.1在External Library中消失了。其他几个就不一一列举了。

打包错误Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files define_第3张图片

在找到对应的library之后,就移除重复的库。

在build.gradle中修改compile ‘cn.finalteam:galleryfinal:1.4.8.7’为格式如下

compile(‘cn.finalteam:galleryfinal:1.4.8.7’) {

exclude group: “com.android.support”, module: “support-v4”

}

cn.finalteam:galleryfinal:1.4.8.7是包含v4包的library,”support-v4”是需要移除的v4包

你可能感兴趣的:(小问题,打包错误-多个库)