【问题标题】:Multiple dex files define Landroid/support/design/widget/CoordinatorLayout$LayoutParams多个dex文件定义Landroid/support/design/widget/CoordinatorLayout$LayoutParams
【发布时间】:2019-04-15 22:50:05
【问题描述】:

我的项目中有多个 dex 文件定义错误。

我也在 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;

【问题讨论】:

    标签: android build.gradle android-multidex


    【解决方案1】:

    将库版本更新为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 并已修复,谢谢
    • 非常感谢。
    • 我这样做了,现在我得到一个不同的错误 Multiple dex files defined Landroid/support/v13/view/DragAndDropPermissionsCompat;这令人沮丧
    【解决方案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 了解详细信息。

    【讨论】:

      【解决方案3】:

      将 gradle 插件 (com.android.tools.build:gradle) 从 3.2.0 更新到 3.3.2 为我解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-10
        • 2015-12-06
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多