多个dex文件定义了Landroid/support/design/widget/CoordinatorLayout$LayoutParams。

18

我在我的项目中遇到了“Multiple dex files define”错误。

我也在build.gradle文件中使用了这两个标签。

dexOptions {
    preDexLibraries = false
}
defaultConfig {
    multiDexEnabled true

}

但仍然收到这个错误。

   Information:Gradle tasks [:app:assembleDebug]
Error:Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams;
Error:com.android.dex.DexException: Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams;
Error:  at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
Error:  at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
Error:  at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
Error:  at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
Error:  at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
Error:  at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
Error:  at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
Error:  at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
Error:  at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
Error:  at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
Error:  at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Error:Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams;
3个回答

39

将库的版本更新为27.1.0,问题得到了解决。

compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:design:26.1.0'
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:mediarouter-v7:26.1.0'
compile 'com.android.support:recyclerview-v7:26.1.0'
compile 'com.android.support:cardview-v7:26.1.0'
compile 'com.android.support:support-v13:26.1.0'
compile 'com.android.support:support-v4:26.1.0'

收件人:

compile 'com.android.support:appcompat-v7:27.1.0'
compile 'com.android.support:design:27.1.0'
compile 'com.android.support:appcompat-v7:27.1.0'
compile 'com.android.support:mediarouter-v7:27.1.0'
compile 'com.android.support:recyclerview-v7:27.1.0'
compile 'com.android.support:cardview-v7:27.1.0'
compile 'com.android.support:support-v13:27.1.0'
compile 'com.android.support:support-v4:27.1.0'

我已将 26.+ 更改为 27.1.0,问题已解决,谢谢。 - Nisar Ahmad
1
非常感谢你。 - Nguyễn Anh Tuấn
1
我已经做了这个,现在我得到了一个不同的错误 多个dex文件定义了Landroid/support/v13/view/DragAndDropPermissionsCompat; 这真让人沮丧。 - clementiano

2
在build.gradle文件中启用multidex并将multidex库添加为依赖项,如下所示:
android {
defaultConfig {
    ...
    minSdkVersion 15 
    targetSdkVersion 26
    multiDexEnabled true
}
...
}

dependencies {
  compile 'com.android.support:multidex:1.0.3'
}

默认情况下,在新的支持库版本上添加 "multiDexEnabled = true" 时,它的依赖关系会自动添加,但是如果出于某种原因您想支持较旧的支持库版本,则必须手动包含其依赖项以进行编译。
这将消除Multiple dex files define Landroid/support/v13/view/DragAndDropPermissionsCompat错误,以及其他16个错误。
请参考链接https://developer.android.com/studio/build/multidex以获取详细信息。

0

将 Gradle 插件(com.android.tools.build:gradle)从 3.2.0 更新到 3.3.2,问题得到了解决。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接