我在Android项目中有两个包作为依赖项:A和B,在build.gradle
中定义如下:
dependencies {
compile 'dependency-A'
compile files('libs/dependency-B.jar')
}
我可以构建项目,但是当尝试运行它时,我收到以下错误:
:应用程序:compileDebugSources
:应用:transformClassesWithDexForDebug
意想不到的顶级例外:
com.android.dex.DexException:多个dex文件定义Lcommon / package / in / both / Dependencies;
在com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
在com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
在com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
在com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
在com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
在com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
在com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
在com.android.dx.command.dexer.Main.run(Main.java:277)
在com.android.dx.command.dexer.Main.main(Main.java:245)
在com.android.dx.command.Main.main(Main.java:106)
失败
失败:构建失败,例外。
*出了什么问题:
任务':app:transformClassesWithDexForDebug'执行失败。
如何排除常见软件包或对其执行某些操作,以便它可以正确构建和运行?
我使用Android Studio 1.5.1,buildToolsVersion 23.0.2,com.android.tools.build:grad:1.5.0
答案 0 :(得分:0)
我还没有找到简单易用的解决方案,但是这里有一种可能的解决方法(如果不禁止任何依赖项的反编译):
从dependency-A
删除常见的包/类:解压缩.jar文件,删除文件,将剩余文件压缩回jar中;
用任何java反编译器反编译dependency-B
,例如与this one;
添加经过反编译的dependency-B
.java
文件作为模块资源的一部分,或者作为单独的文件添加;
构建并运行项目。