com.android.ide.common.process.ProcessException:多个dex文件定义(…)BuildConfig

com.android.ide.common.process.ProcessException:多个dex文件定义(…)BuildConfig,android,gradle,Android,Gradle,我有一个原始项目使用 compile "com.library1:library1:2.0.4" compile "com.library2:library2:3.0.0" 而library1:2.0.4和library2:3.0.0都共享相同的名称空间(具有相同的包名)。有没有一种干净的方法可以让它们在一个项目中共存,而不会出现构建时错误,如: Execution failed for task ':app:transformClassesWit

我有一个原始项目使用

compile            "com.library1:library1:2.0.4"
compile             "com.library2:library2:3.0.0"
而library1:2.0.4和library2:3.0.0都共享相同的名称空间(具有相同的包名)。有没有一种干净的方法可以让它们在一个项目中共存,而不会出现构建时错误,如:

Execution failed for task ':app:transformClassesWithDexForDebug'.
> com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexException: Multiple dex files define (...)/BuildConfig;
你需要的是。我没有用过它,所以我不能给你更具体的建议,只能指给你看,但我认为这是一条路,因为一些同事告诉我,他们已经成功地将它用于类似的案例

请注意,此过程重命名了其中一个库包名称,您将得到类似于以下内容的结果:

  • library1->com.library1
  • library2->com.newlibrary1(而不是com.library1)
因此,如果重命名第二个库,在过程结束时(删除旧库后),您必须禁用第二个库的重命名,并执行“在文件中查找”以更改对重命名包的所有引用;或者永远启用重命名。对我来说,第一种选择是最好的


另请参见这个问题,尽管我不确定它是否已经过时。

为什么要尝试使用同一个库的不同版本?是的,但是迁移必须在更长的时间内完成,然后在新版本中弃用这些方法,并删除旧的依赖项,正如上面所写的,我需要在一段时间内保留这两个库。我的代码必须编译并使用它们。我不是不同意,只是不理解。根据语义版本控制,2.3.0与2.0.4相比并不是一个重大的突破性变化。您还可以将组/工件id从dependencies@cricket_007是的,在其他情况下,这将是一个解决方案,但我知道他愿意逐步从一个版本迁移到另一个版本。就像Android SDK一样,为什么不把东西标记为不推荐的呢?看起来像是一个解决方案,可以尝试一下,然后把我的反馈放在这里。它解决了这个问题