com.android.dex.DexException:多个dex文件定义Ledu/hawhamburg/vuforia/BuildConfig;

com.android.dex.DexException: Multiple dex files define Ledu/hawhamburg/vuforia/BuildConfig;

自从我买了一台新笔记本电脑后,我在去年的大部分时间里一直在做的一个 Android 项目就无法工作了,我只是不知道该怎么办没有了。

项目本身包含五个子项目,这些子项目包含在 settings.gradle 文件中。

Gradle tasks [:app:assembleDebug]
Error converting bytecode to dex:
Cause: com.android.dex.DexException: Multiple dex files define Ledu/hawhamburg/vuforia/BuildConfig;
com.android.dex.DexException: Multiple dex files define Ledu/hawhamburg/vuforia/BuildConfig;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
    at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
    at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Execution failed for task ':app:transformDexArchiveWithDexMergerForDebug'.
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Ledu/hawhamburg/vuforia/BuildConfig;
BUILD FAILED in 12s
15 errors
0 warnings

我尝试过的事情:更新 Gradle、更新 Android Studio、清理项目、重新克隆 g​​itlab 项目、删除 Gradle 缓存,还有这个:

android {
    dexOptions {
        preDexLibraries = false
    }
}

如果明确禁用 pre-dexing 不能阻止 DexException 的出现,那么某些事情已经严重搞砸了。就是不知道怎么找原因。

同样,这在我的旧电脑上运行得很好,所以无论如何,它必须与环境有关。

我觉得你的项目有一些 Android 库?如果是,所有 AndroidManifest.xml 文件必须在 manifest 标签中具有不同的 package 属性。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="<<DIFFERENT VALUE HERE>>">
    <application>
...

对了,改这个之后,还得手动删除库的build目录。 clean 不会删除旧的 BuildConfig 文件。