从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 。
是否有其他人遇到此问题和/或有解决方法的建议?
答案 0 :(得分:0)
好吧,问题似乎与番石榴有关。猜测它是该库的大小,并且构建在主要DEX(加载和初始化应用程序所需的dex)中安装它有问题。
我为此lightweight Stream library切换了Guava,并且能够为所有设备成功构建。