java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Неможливо об'єднати dex в Android Studio 3.0 [закрито]


77

Це мій файл gradle рівня програми:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '27.0.0'
    useLibrary 'org.apache.http.legacy'
    defaultConfig {
        multiDexEnabled true
        applicationId 'com.example.test'
        minSdkVersion 16
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    productFlavors {
    }
    dexOptions {
        incremental true
    }
}

dependencies {
    compile 'com.google.android.gms:play-services:10.0.1'
    compile 'com.android.support:appcompat-v7:26.+'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha7'
    compile 'commons-io:commons-io:1.3.2'
    compile 'com.mcxiaoke.volley:library:1.0.19'
    compile 'com.facebook.stetho:stetho:1.5.0'
    compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
}

Повна помилка, яку я отримую при складанні проекту:

Помилка: Помилка виконання для завдання ': app: transformDexArchiveWithExternalLibsDexMergerForDebug'.

java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Неможливо об'єднати dex

Повна помилка така:

    Executing tasks: [:app:assembleDebug]

AGPBI: {"kind":"warning","text":"The `android.dexOptions.incremental` property is deprecated and it has no effect on the build process.","sources":[{},{}]}
Configuration 'compile' in project ':app' is deprecated. Use 'implementation' instead.
:app:buildInfoDebugLoader
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugAidl UP-TO-DATE
:app:compileDebugRenderscript UP-TO-DATE
:app:checkDebugManifest UP-TO-DATE
:app:generateDebugBuildConfig UP-TO-DATE
:app:prepareLintJar UP-TO-DATE
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources UP-TO-DATE
:app:mergeDebugResources UP-TO-DATE
:app:createDebugCompatibleScreenManifests UP-TO-DATE
:app:processDebugManifest UP-TO-DATE
:app:splitsDiscoveryTaskDebug UP-TO-DATE
:app:processDebugResources UP-TO-DATE
:app:generateDebugSources
:app:javaPreCompileDebug UP-TO-DATE
:app:compileDebugJavaWithJavac UP-TO-DATE
:app:mergeDebugShaders UP-TO-DATE
:app:compileDebugShaders UP-TO-DATE
:app:generateDebugAssets UP-TO-DATE
:app:mergeDebugAssets UP-TO-DATE
:app:packageInstantRunResourcesDebug UP-TO-DATE
:app:checkManifestChangesDebug
:app:extractTryWithResourcesSupportJarDebug UP-TO-DATE
:app:transformClassesWithStackFramesFixerForDebug UP-TO-DATE
:app:transformClassesWithDesugarForDebug UP-TO-DATE
:app:transformClassesWithExtractJarsForDebug UP-TO-DATE
:app:transformClassesWithInstantRunVerifierForDebug UP-TO-DATE
:app:transformClassesWithDependencyCheckerForDebug UP-TO-DATE
:app:compileDebugNdk NO-SOURCE
:app:mergeDebugJniLibFolders UP-TO-DATE
:app:transformNativeLibsWithMergeJniLibsForDebug UP-TO-DATE
:app:processDebugJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebug UP-TO-DATE
:app:transformNativeLibsAndResourcesWithJavaResourcesVerifierForDebug UP-TO-DATE
:app:transformClassesWithInstantRunForDebug UP-TO-DATE
:app:transformClassesEnhancedWithInstantReloadDexForDebug UP-TO-DATE
:app:incrementalDebugTasks UP-TO-DATE
:app:preColdswapDebug
:app:fastDeployDebugExtractor UP-TO-DATE
:app:generateDebugInstantRunAppInfo UP-TO-DATE
:app:transformClassesWithInstantRunSlicerForDebug UP-TO-DATE
:app:transformClassesWithDexBuilderForDebug UP-TO-DATE
:app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED
:app:buildInfoGeneratorDebug

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

* Get more help at https://help.gradle.org

BUILD FAILED in 2s

39 actionable tasks: 5 executed, 34 up-to-date

Оскільки Android API 21 (5.0), підтримка мультидексів не потребує бібліотеки, встановленої в проектах, що використовують minSdkVersion 21та вище.
xRed

1
Добре, це дивно. Я чекав більше деталей навколо :app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED, скаржився на дублікати класів або подібні проблеми. Я насправді не знаю, що сказати вам із цим результатом. Я знаю, що ви чистили проект кілька разів, але я рекомендую вам ще раз очистити його, спробувати побудувати і подивитися, чи надає вихідні дані консолі Gradle цієї збірки докладнішу інформацію про те, що Gradle не подобається.
CommonsWare

2
@CommonsWare, надзвичайно дивно, я двічі робив чистку та перебудову, і нарешті це спрацювало. Складено успішно!
Кумаїл

4
Це нонсенс: "Це питання було спричинене проблемою, яку вже неможливо відтворити, або простою друкарською помилкою" - 1-е, проблема все-таки може бути відтворено, 2-е - це не проста помилка!
Frank R.

1
@FrankR. погодився. Проголосував за повторне відкриття. Я здогадуюсь, що це тому, що більшість відповідей стосуються очищення та відновлення, але в цьому випадку це здається вірною відповіддю.
codeMagic

Відповіді:


150

Увімкніть Multidex через build.gradleмодуль програми

multiDexEnabled true

Те саме, що нижче -

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.xx.xxx"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        multiDexEnabled true //Add this
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

Потім виконайте кроки нижче -

  1. З Buildменю -> натисніть Clean Projectкнопку.
  2. Після завершення завдання натисніть Rebuild Projectкнопку з Buildменю.
  3. З меню File -> Invalidate cashes / Restart

compileв даний час засуджується , так що краще використовувати implementationабоapi


4
Я пробував це багато разів, все одно отримую ту саму помилку
kumail

1
це вирішить проблему, вона настає через конфлікт configurations.all { resolutionStrategy.dependencySubstitution { substitute module('org.apache.commons:commons-io:1.3.2') with module('commons-io:commons-io:1.3.2') } }
Абдул Різван,

1
У мене працює, але що таке multiDexEnabled?
Альваро Агуеро,

2
@ ÁlvaroAgüero, В одному .dexфайлі може бути 65 536 методів (посилань), тому, якщо кількість посилань перевищує 65 536, вам слід скористатися мультидексом. Докладнішу інформацію можна отримати на офіційному сайті.
Абхішек

1
Clean Project і Rebuild вирішили цю помилку для мене.
Тарун

66

Я використовую Android Studio 3.0 і стикався з тією ж проблемою. Я додаю це до свого gradle:

multiDexEnabled true

І це спрацювало!

Приклад

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.1'
    defaultConfig {
        applicationId "com.xx.xxx"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        multiDexEnabled true //Add this
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

І очистити проект.


3
Я не працюю для мене, я думаю, що є дублікати включає всередині, але я не знаходжу виходу, який би розповів, що таке дублікат.
Художник404,

@ Artist404 Можливо, ви також включили бібліотеку мультидексів у свій проект або підмодуль. Видаліть залежність бібліотеки multidex.
Ракеш Ядав

Проблема не зникає. я зробив те саме. але не вирішено ....> java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Помилка під час злиття архівів dex
Gyan Swaroop Awasthi

після додавання цього, я отримую помилку "Кілька файлів dex визначають Landroid / support / v4 / os / ResultReceiver". Ви можете мені допомогти
rahul.sapkal23,

1
Якщо ви додали multiDexEnabled true, але не вирішили, просто спробуйтеClean Project
Кобейн
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.