Android Gradle插件3.0.1 - 将字节码转换为dex时出错

时间:2018-03-22 18:14:41

标签: android gradle guava

从Android Gradle 2.3.3升级到3.0.1我收到以下构建错误:

Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Lcom/google/common/base/internal/Finalizer;

这似乎是我的应用程序将 Guava 作为实现包含在内的问题;单元测试(Robolectric)和仪器测试。

我通过从Robolectric中排除Guava解决了这个构建错误:

testImplementation ("org.robolectric:robolectric:$rootProject.ext.roboelectricVersion") {
    exclude group: 'com.google.guava'
}

对于Instrumented测试,如果我将minSdkVersion设置为21,它将解决此构建错误,通过:

minSdkVersion 19
// Gradle plugin 3.0.1 broke instrumented tests with error: "Multiple dex files define ...Finalizer". Setting minSdkVersion = 21 clears this error
gradle.startParameter.taskNames.find {
    if (it.contains("AndroidTest")) {
       minSdkVersion 21
    }
} 

但是,当我为设备运行构建时< 21,然后我仍然得到构建错误。

因此,问题似乎与 Guava在Android 5.0之前支持Multidex

是否有其他人遇到此问题和/或有解决方法的建议?

1 个答案:

答案 0 :(得分:0)

好吧,问题似乎与番石榴有关。猜测它是该库的大小,并且构建在主要DEX(加载和初始化应用程序所需的dex)中安装它有问题。

我为此lightweight Stream library切换了Guava,并且能够为所有设备成功构建。