eclipse adt 引入第三方jar包报错

2025-03-09 21:10:45
推荐回答(1个)
回答1:

以前用eclipse开发android项目遇到过这样的编译问题, 错误信息如下:
com.android.dex.DexException: Multiple dex files define Lcom/alibaba/fastjson/JSONStreamAware;
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
at com.android.dx.command.dexer.Main.run(Main.java:230)
at com.android.dx.command.dexer.Main.main(Main.java:199)
at com.android.dx.command.Main.main(Main.java:103)

导致这个编译错误的原因如上, 当是只要jar包改成同一个文件, 就会编译通过 (由于编译出的class文件的版本不一致, 导致无法合并),
然而在anroid studio中, 这样做并无卵用.
我是这样做的: 将不同的library共同引用的jar包放在一个目录下(project跟目录的libs木下), 并配置如下gradle脚本
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile fileTree(dir: '../libs', include: '*.jar')
}
最终解决方案:
把module下面的libs目录下的jar包(其他项目也引用的那个jar)删除, 并配置改module的gradle脚本(注意: 各个library引用的库的版本必须一致------------红色标出部分一致)

dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile 'com.alibaba:fastjson:1.1.43'}

注: 这样依赖的是maven仓库中的jar或则aar.