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

时间:2017-09-04 14:36:37

标签: 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: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;

1 个答案:

答案 0 :(得分:1)

您需要的是Gradle Shadow plugin。我没有使用它,所以我不能给你更具体的建议,而不是指向你docs,但我认为这是要走的路,因为有些同事告诉我他们已经成功地用它来做类似的例。

请注意,此过程会重命名其中一个库包名称,最终会得到类似的内容:

  • library1 - > com.library1
  • library2 - > com.newlibrary1(而不是com.library1)

因此,如果重命名第二个库,在进程结束时(删除旧库之后),您将不得不禁用第二个库的重命名并执行“查找文件”以更改所有引用重命名的包;或永远保持重命名。对我来说,第一个选择将是最好的。

另请参阅此问题Repackaging .jar-s in Android .aar library,但我不确定它是否已经过时。