com.android.dex.DexException: Multiple dex files define的解决办法 (Android Studio)
2015-11-19 18:48
543 查看
com.android.dex.DexException: Multiple dex files define的解决办法
1. 导致问题出现的原因
com.android.dex.DexException: Multiple dex files define编译问题产生的原因, 几个library引用了"同一个"jar包,这个"同一个" 为什么要加上引号呢, 其实这个jar包就名称和功能来说是完全一样的比如, 有两个文件,
fastjson-1.1.43.android.jar, 虽然这两个文件名称一样, 有可能大小都一样, 但是由于编译这个jar包的java版本不一致, 或者
这两个jar包中的某个类有细微的差别, 这样就会引起上述编译错误.
android进行dex时会对字节码文件进行优化合并, 如果两个class完全一致, 合并以后就是一个. 但是如果两个类的类名一致而内部确有细微差别, 那么就不能合并.
这就像git中两个人同时更改一个文件引起的冲突一样!!!
知道了引起问题的原因, 就有了对应的解决方案: 不同的library引用同一个jar不就可以了
的确是这样解决的, 我将不同library要引用的jar包拷贝到project的一个目录下, 如libs; 然后不同的libs都引用此jar包.
2. 解决方法
解决方法1.
如果我的主项目的依赖关系如下:compile - Classpath for compiling the main sources.
+--- project :emojicon
+--- project :library:ALib
| +--- project :BLib
| | \--- project :CLib
| \--- project :library:appcompat
+--- project :library:appcompat
\--- project :library:DLib
如果ALib和DLib都引用了一个a.jar
a. 在project下面建立一个libs目录
b. 将module ALib下libs目录中的a.jar移动到上一步中创建的目录中 并 修改编译脚本(红色为添加的代码)
dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile fileTree(dir: '../libs', include: '*.jar') }
将module DLib下libs目录中的a.jar删除掉 并修改编译脚本(红色为添加的代码)
dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile fileTree(dir: '../libs', include: '*.jar') }
这样就可以了.
解决方法2
最简单的做法: 直接吧ALib中libs目录中的a.jar复制到DLib的libs中覆盖当前的a.jar解决方法3
在csdn中有看到了另一种种解决方法===>这里3. 总结
其实原理是一样的, 保证不同library引用的jar是同一个------------完全相同(拷贝是没有问题的^-^)相关文章推荐
- Android-图片的缓存实现笔记
- android 4.4以下loadIocn nullpointerException问题
- 一、dialog.show()引起的android.view.WindowManager$BadTokenException错误
- Android 的log的具体分析 二
- Android的log分析 一
- Qt on Android:图文详解Hello World全过程
- Android开发 加密技术
- Android应用程序基础
- android中popupwindow弹出后,屏幕背景变成半透明
- Android中字体加粗注意事项
- Android中Activity之间通信
- Android应用程序资源的查找过程分析
- Android带边框表格的实现
- android 遍历所有控件
- Android基础入门教程——10.8 LayoutInflater(布局服务)
- Android的消息机制
- Android开发 屏幕适配
- Android线程间通信(总)
- Android是什么?
- android控件之AutoCompleteTextView下拉列表显示一片空白