Ошибка выполнения Android Studio 3.0 для задачи: невозможно объединить dex


87

Студия Android получала ошибку сборки при выполнении сборки со следующим:

Ошибка: не удалось выполнить задачу ': app: transformDexArchiveWithExternalLibsDexMergerForDebug'. java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: невозможно объединить dex "

Мое приложение: файл build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        applicationId "com.pdroid.foodieschoice"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    compile 'com.firebaseui:firebase-ui-auth:2.3.0'

    testCompile 'junit:junit:4.12'
}
configurations.all {
    resolutionStrategy {
        force 'com.android.support:appcompat-v7:26.0.1'
        force 'com.android.support:support-compat:26.0.1'
        force 'com.android.support:support-core-ui:26.0.1'
        force 'com.android.support:support-annotations:26.0.1'
        force 'com.android.support:recyclerview-v7:26.0.1'
    }
}

apply plugin: 'com.google.gms.google-services'

любые решения

Изменить: я сделал образец через сайт github firebase и решил


вы должны включить поддержку multiDex в свое приложение
Sudheesh R 02

и попробуйте очистить, перестроить свой проект
Sudheesh R 02

Я предлагаю вам отредактировать свой вопрос и опубликовать весь вывод вашей консоли Gradle, а не только одну строку. Детали вашей проблемы находятся в другом месте вывода.
CommonsWare 02

@CommonsWare, я опубликовал всю свою ошибку ... всего две строки.
Anguraj

2
Попробуйте отключить мгновенный запуск, очистите свой проект и добавьте android {defaultConfig {multiDexEnabled true}}
Тара,

Ответы:


66

Для проекта на основе Кордовы запустите cordova clean androidперед сборкой еще раз, как предложил @mkimmet .


1
Кто-нибудь, пожалуйста, отметьте этот ответ правильно. Это решает проблему.
pamekar

2
Для меня установка «cordova-plugin-androidx» и «cordova-plugin-androidx-adapter» решила проблему
ssz

58

Эта ошибка возникает, когда вы добавляете внешнюю библиотеку, которая может быть несовместима с вашим compileSdkVersion.

Будьте осторожны, когда добавляете external library.

Я потратил 2 дня на эту проблему, и, наконец, она была решена с помощью следующих шагов.

  • Убедитесь, что все ваши вспомогательные библиотеки такие же, как compileSdkVersionи build.gradle(Module:app)в моем случае 26.введите описание изображения здесь

  • В вашей категории defaultConfig введите multiDexEnabled true . Это важная часть.multiDexEnabled Истинное изображение

  • Перейти к файлу | Настройки | Сборка, выполнение, развертывание | Instant Run и попробуйте включить / отключить Instant Run для горячей замены ... и нажмите ОК Включить мгновенный запуск для горячей замены ... Изображение

  • Sync Ваш проект.

  • Наконец, перейдите в раздел "Сборка |" нажмите на Rebuild Project .

  • Примечание. Rebuild Project сначала очищает, а затем создает проект.


мне это помогло, спасибо.
Sumit Saxena

рад это слышать. Счастливого андроида.
Ниаматулла Бахши

1
@YajliMaclo здорово!
Niamatullah Bakhshi

48

Попробуйте добавить это в gradle

    android {
      defaultConfig {
        multiDexEnabled true
        }
   }

Вы пытались сделать кеш недействительным в студии Android? @Anguraj
Fernando

Не единственный шаг к включению multidex. Также не требуется на новых уровнях API
OneCricketeer

25

Разрешение:

Обратитесь к этой ссылке : Поскольку существуют различные варианты отключения предупреждения в зависимости от minSdkVersion, оно установлено ниже 20 :

 android {
     defaultConfig {
         ...
         minSdkVersion 15 
         targetSdkVersion 26
         multiDexEnabled true
     }
     ... }

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

Если у вас minSdkVersion больше 20 в вашем наборе build.gradle, используйте следующее, чтобы отключить предупреждение:

  android {
      defaultConfig {
          ...
          minSdkVersion 21 
          targetSdkVersion 26
          multiDexEnabled true
      }
      ... }

Обновите зависимости следующим образом:

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

Опять же, единственная разница - это ключевые слова в зависимостях:

minSdkVersion ниже 20: используйте компиляцию

minSdkVersion выше 20: использовать реализацию

  1. Я надеюсь, что это было полезно, пожалуйста, проголосуйте, если это решило вашу проблему, Спасибо за ваше время.
  2. Также для получения дополнительной информации о том, почему это происходит , прочтите первый абзац ссылки, он подробно объяснит, почему? и что означает это предупреждение.

24

Просто попробуйте выполнить «Сборка -> Чистый проект». Это решило проблему для меня.


5
Спасибо, это сработало для меня в проекте Ionic / Cordova, запустив cordova clean android, в то время как у меня также был установлен плагин cordova-android-support-gradle-release.
mkimmet

Люблю, когда что-то простое исправляет !! Благодаря!
tonejac

Это исправило это для меня при работе с React Native.
Майкл Одерер

Спасибо, это самое простое решение этой проблемы, я потратил 3 дня, чтобы решить эту проблему, и ваш ответ решает все мои проблемы. Еще раз спасибо, братан !!!
gautamsinh mori 01

Благодарю. Помогло мне на Android Studio 4.1. Спас мой день.
Атиф

7

Для меня добавление

multiDexEnabled true

и

packagingOptions {
        exclude 'META-INF/NOTICE' 
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/notice'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/license'
        exclude 'META-INF/license.txt'
    }

в файл Build.gradle уровня приложения решил проблему


5

Перейдите в файл уровня вашего модуля build.gradleи добавьте в код следующие строки

    defaultConfig {
        ...
        minSdkVersion 15 
        targetSdkVersion 28
        multiDexEnabled true
    }
    ...
}

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

Это легко решило проблему. Проверить эту документацию


4

Используйте multiDexEnabled true, как показано ниже.

{
 minSdkVersion 17
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}

и

implementation 'com.android.support:multidex:1.0.3'

это решение сработало для меня.


4

Я пробовал много решений, упомянутых выше, включая multiDexEnabled true, но ни одно из них не помогло мне.

Вот решение, которое сработало для меня - скопируйте этот код в файл app \ build.gradle

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support' && requested.name != 'multidex') {
            details.useVersion "${rootProject.ext.supportLibVersion}"
        }
    }
}

Обязательно запустите gradlew clean перед запуском кода


1
Я поменял minSdkVersion, хватит
Mr Special

2

То же самое случилось со мной, я понял, что я был в процессе обновления до AS 3.0.1, и после того, как я сделал обновление, очистил и перестроил приложение, все было исправлено.


2

Для меня исправление этой ошибки заключалось в изменении одной строки в зависимостях Gradle моего приложения.

из этого :

compile('com.google.android.gms:play-services-gcm:+') {
    force = true
}

К этому :

compile('com.google.android.gms:play-services-gcm:11.8.0') {
    force = true
}

Только это сработало для меня. Мне не нужно было добавлять force = true
Пауло Линьярес - Packapps

1

Также убедитесь, что ваше приложение является подклассом MultiDexApplication.

import android.support.multidex.MultiDexApplication

class App : MultiDexApplication()

или, если класс Application не является подклассом, добавьте в AndroidManifest.xml

<application
  android:name="android.support.multidex.MultiDexApplication"

0

Вы находитесь между SDK или обновлениями платформы? Если да, полностью заполните их и попробуйте продолжить. Обычно я обновляю отдельные пакеты, которые необходимо обновить, чтобы получить все обновление, которое иногда может достигать 2,5 ГБ. Выполнить это полное обновление иногда не удается. После обновления до Android Studio 3.0 у меня было несколько обновлений SDK, и я получал указанную выше ошибку, поскольку все пакеты не были обновлены. Как только я обновил все пакеты, вышеуказанная ошибка исчезла.


Надеюсь, вы очистили или сделали недействительным кеш и перезапустили Android Studio? Мне Android Studio 3 кажется глючным по сравнению с предыдущими версиями.
Vineet Jain

кто-нибудь когда-нибудь исправлял это не могу пройти мимо!
68060

0

В моем случае изменение версии библиотеки firebase с 2.6.0 на 2.4.2 устранило проблему.


0

Для меня проблема заключалась в использовании Java 1.8 в модуле, но не в модуле приложения. Я добавил это в градиент сборки приложения и работал:

android{
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

0

Та же проблема. Я включил multidex: defaultConfig {applicationId "xxx.xxx.xxxx" minSdkVersion 24 targetSdkVersion 26 multiDexEnabled true

Я очистил кеш, запустил gradle clean, rebuild, make, попытался убедиться в отсутствии конфликтов в импортированных библиотеках (удалил все транзитивные зависимости) и сделал все обновления. Все еще:

Ошибка: не удалось выполнить задачу ': app: transformDexArchiveWithExternalLibsDexMergerForDebug'. java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: невозможно объединить dex

Оказалось, что сборка не понравилась: implementation 'org.slf4j: slf4j-android: 1.7.21'


0

Когда версия Android Studio - 3.0.1, Gradle Version - 4.1, а Android PluginVersion - 3.0.0, она столкнется с этой проблемой. Затем я понижаю версию Gradle до 3.3, Android Android - ноль, такой проблемы нет.


0

У меня это было, когда запрошенная версия SDK не соответствовала зависимостям. Вы можете щелкнуть выделенную строку и исправить это, щелкнув красную лампочку. Не нужно искать актуальную версию, просто позвольте IDE выяснить это за вас. И добавьте репозиторий google в конфигурацию maven.


0

Я получал ту же ошибку и в моем случае ошибка была устранена, когда я исправил ошибку сборки, которая была связана с другим вариантом сборки, чем тот, который я строил в настоящее время.

Я создавал вариант сборки, на который я смотрел, отлично, без ошибок, но попытка отладки вызвала app:transformDexArchiveWithExternalLibsDexMergerForDebugошибку. Как только я переключился на сборку другого варианта сборки, я поймал свою ошибку в процессе сборки и исправил ее. Похоже, это решило мою app:transformDexArchiveWithExternalLibsDexMergerForDebugпроблему для всех вариантов сборки.

Обратите внимание, что эта ошибка была не в указанном внешнем модуле, а в отдельном исходном наборе варианта сборки, который ссылался на внешний модуль. Надеюсь, это поможет кому-то, кто может видеть то же дело, что и я!


0

Я сделал и исправил эту проблему, просто выполнив эту работу в своем коде

Открыть -> build.gradle Изменить значение с

compile 'com.google.code.gson:gson:2.6.1'

к

compile 'com.google.code.gson:gson:2.8.2'

0

Чтобы удалить эту проблему с Dex, просто реализуйте одну зависимость. Эта проблема возникает, когда мы используем несколько разных служб с одного и того же сервера. Предположим, мы используем рекламу и Firestore в проекте, и у обоих есть репозиторий maven. поэтому нам нужно вызывать разные данные из репозитория, который нам нужно реализовать. Новое обновление Зависимость: -

 implementation 'com.android.support:multidex:1.0.3'

Я уверен, что это решит вашу проблему навсегда


его зависимость поместила его в Gradle
Pradeep Sheoran

0
1) Пожалуйста, добавьте multiDexEnabled true
2) если вы получаете ошибку компиляции, проверьте свой уровень приложения build.gradle, такие же зависимости реализованы в разных версиях.
3) Удалите один, если обнаружите такие же зависимости.

android {compileSdkVersion 28 defaultConfig {

    minSdkVersion 17
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
надеюсь, что он работает нормально :) Счастливого кодирования

0

Самый простой способ избежать такой ошибки:

-Измените библиотеку combilesdkversion так же, как и ваше приложение compilesdkversion

-Изменить версию библиотеки supportLibrary, как и у вашего build.gradle (приложение)


0

Это то, что у меня работает. чистая подготовка и запуск.

cordova clean android;
ionic cordova prepare andriod;
ionic cordova run andriod;

Надеюсь, поможет.


0

У меня тоже была аналогичная ошибка.

Проблема :

введите описание изображения здесь

Решение :

Основная причина этой проблемы - не включен multiDex. Таким образом , в / Android / приложение / build.gradle проекта , включить multiDex

Для получения дополнительной информации обратитесь к документации: https://developer.android.com/studio/build/multidex#mdex-gradle.

введите описание изображения здесь


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.