【问题标题】:Android studio build 2 dependencies containing same packageAndroid Studio 构建 2 个包含相同包的依赖项
【发布时间】:2024-01-16 17:48:01
【问题描述】:

我在一个 Android 项目中有两个包作为依赖项:A 和 B,在 build.gradle 中定义如下:

dependencies {
    compile 'dependency-A'

    compile files('libs/dependency-B.jar')
}

我可以构建项目,但是在尝试运行它时出现以下错误:

:app:compileDebugSources
:app: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)
失败
FAILURE:构建失败并出现异常。
* 出了什么问题:
任务 ':app:transformClassesWithDexForDebug' 执行失败。

我怎样才能排除常见的包或对其进行处理,以便它能够正确构建和运行?

我使用的是 Android Studio 1.5.1,buildToolsVersion 23.0.2,com.android.tools.build:gradle:1.5.0

【问题讨论】:

    标签: android android-studio gradle jar android-gradle-plugin


    【解决方案1】:

    我还没有找到简单而干净的解决方案,但是这是一种可能的解决方法(如果不禁止反编译任何依赖项):

    1. dependency-A 中删除常用包/类:解压缩 .jar 文件,删除文件,将剩余文件压缩回 jar;

    2. 使用任何 java 反编译器反编译 dependency-B,例如this one;

    3. 将反编译的 dependency-B .java 文件添加为模块源代码的一部分,或者单独添加;

    4. 构建并运行项目。

    【讨论】: