Невозможно объединить dex

У меня есть Android Studio Beta. Я создал новый проект с компиляцией своих старых модулей, но когда я попытался запустить приложение, он не запускался с сообщением:

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

com.android.builder.dexing.DexArchiveMergerException: невозможно слить dex

Но я не знаю, как решить эту ошибку. Я искал это в течение нескольких часов, но безуспешно.

Мой проект gradle:

    // Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta6'
        classpath "io.realm:realm-gradle-plugin:3.7.1"
        classpath 'com.google.gms:google-services:3.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Мое приложение gradle:

    apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        applicationId "parad0x.sk.onlyforyou"
        minSdkVersion 21
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
        }
    }
    compileOptions {
        targetCompatibility 1.7
        sourceCompatibility 1.7
    }
    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
    lintOptions {
        checkReleaseBuilds false
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    //noinspection GradleCompatible
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile project(path: ':loginregisterview')


}

И мой модуль gradle:

    apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 26
        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:appcompat-v7:26.0.2'
    compile 'com.android.support:support-v4:26.1.0'
    compile 'com.github.bumptech.glide:glide:4.0.0'
    testCompile 'junit:junit:4.12'
    compile project(path: ':parser')

}

Мой второй модуль:

     apply plugin: 'com.android.library'
apply plugin: 'realm-android'

android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    realm {
        syncEnabled = true
    }
    useLibrary 'org.apache.http.legacy'

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile 'junit:junit:4.12'
    //  compile 'com.android.support:appcompat-v7:23.1.0'

    //   compile 'com.fasterxml.jackson.core:jackson-core:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.0'
 //   compile 'com.fasterxml.jackson.core:jackson-databind:2.9.0'
    compile 'com.google.code.gson:gson:2.6.2'
}

____________ находка _________

Когда я не импортировал второй модуль (парсер), приложение не разбилось о dex, но когда модуль не был импортирован, приложение не работало.: D: D

Ответ 1

У меня была такая же проблема, когда я обновлялся от com.google.android.gms:play-services:11.2.2 до com.google.android.gms:play-services:11.4.0. Это решило это для меня:

  • чистый
  • перестраивать

Ответ 2

Я пробовал все выше, и никто из них не помогает, наконец, я нахожу эту работу для меня:

Приложение /build.gradle:

android {
    defaultConfig {
       multiDexEnabled true
    }
}

Ответ 3

Обратите внимание на предупреждения!

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


У меня были эти две зависимости в моем файле build.gradle уровня build.gradle:

implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

и студия предупредила (в дополнение к проблеме слияния декс):

Все библиотеки com.android.support должны использовать одну и ту же спецификацию версии (смешивание версий может привести к сбоям во время выполнения). Найдено версии 27.0.2, 21.0.3. Примеры включают com.android.support:animated-vector-drawable:27.0.2 и com.android.support:support-v4:21.0.3

Поэтому я явно определил версию com.android.support:support-v4 (подробности см. Здесь), и обе проблемы (предупреждение и та, что касаются слияния dex) решены:

implementation 'com.android.support:support-v4:27.0.2'  // Added this line (according to above warning message)
implementation 'com.android.support:appcompat-v7:27.0.2'
implementation 'com.android.support:recyclerview-v7:27.0.2'

Смотрите ниже комментарии для других подобных ситуаций.

Ответ 4

В моем случае, к сожалению, ни решения Мишеля, ни Сурагча не работали для меня.

Поэтому я решил эту проблему, выполнив следующие действия:

В gradle: 3.0 конфигурация скомпилировать теперь устарела и должна быть заменена реализацией или api. Для получения дополнительной информации вы можете здесь читать. Вы можете прочитать официальные документы в Gradle Build Tool

Конфигурация компиляции все еще существует, но не должна использоваться, поскольку она не будет предоставлять гарантии того, что api и реализация конфигурации.

лучше использовать реализацию или api скорее скомпилировать

просто замените скомпилировать , debugCompile с debugImplementation, testCompile с помощью testImplementation и androidtestcompile с androidTestImplementation

Например: вместо этого

  compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support:support-v4:26.1.0'
compile 'com.github.bumptech.glide: glide: 4.0.0'
Код>

используйте

  реализация 'com.android.support:appcompat-v7:26.0.2'
реализация 'com.android.support:support-v4:26.1.0'
реализация 'com.github.bumptech.glide: glide: 4.0.0'
Код>

После этого

  • Удалите папку .gradle внутри вашего проекта (обратите внимание, что для просмотра .gradle вам нужно перейти к представлению "Проект" в навигаторе в левом верхнем углу)
  • Удалите все папки сборки и gradle.
  • В меню "Построение" нажмите кнопку Очистить проект.
  • После завершения задачи нажмите кнопку Перестроить проект в меню "Построение".

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

Ответ 5

  • Удалите каталог .gradle.

  • Запустите приложение еще раз.

Примечания

  • Каталог .gradle находится в корневой папке проекта. (Возможно, вам сначала придется показывать скрытые файлы.)
  • Я должен делать это каждый раз, когда я обновляю модуль зависимостей с помощью Android 3.0. (Более поздние версии Android Studio 3, похоже, решили проблему.)

Ответ 6

Я пробовал все другие решения, но никто не работал на меня. В конце я решил это, используя ту же версию зависимости, отредактировав build.gradle. Я думаю, эта проблема возникает при добавлении библиотеки в gradle, которая использует разные версии поддержки или библиотеки google.

Добавьте следующий код в свой файл градиента сборки. Затем clean и rebuild проект.

ps: это было старым решением для меня, поэтому вы должны использовать обновленную версию следующих библиотек.

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.1.0'
        }
    } else if (requested.group == "com.google.android.gms") {
        details.useVersion '11.8.0'
        } else if (requested.group == "com.google.firebase") {
            details.useVersion '11.8.0'
          }
      }
}

Ответ 7

Удаление .gradle, как было предложено Сурагчем, было недостаточно для меня. Кроме того, мне пришлось выполнить Build > Clean Project.

Обратите внимание, что для просмотра .gradle вам нужно перейти к представлению "Проект" в навигаторе в левом верхнем углу:

Переключиться в проект

Ответ 8

В моем случае проблема была из-за библиотеки комнаты:

compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'

Изменение его на:

compile 'android.arch.persistence.room:runtime:1.0.0'

работал.

Ответ 9

если (1. Попробуйте очистить и перестроить работу), то хорошо

else if (2. Попробуйте удалить работу над градиентом), тогда хорошо

else-> 3. Попробуйте добавить в grade.properties

android.enableD8 = false

else-> 4. Добавьте multiDexEnabled true в ваш build.gradle

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

и добавить зависимость

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

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

Я получил ошибку, как только я добавил эту библиотеку

implementation 'com.jjoe64:graphview:4.2.2'

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

compile 'com.jjoe64:graphview:4.2.1'

и это устраняет проблему. Поэтому обратите внимание на это.

Ответ 10

Привет, у меня такая же проблема, как и все. Итак, наконец, я решил после 6-часовой борьбы, отлаживая все по строкам.

classpath 'com.google.gms:google-services:3.0.0'

Google-сервисы 3.0 Не поддерживает firebase с Studio 3.0 с playServiceVersion: 11.6.0 или меньше.

implementation "com.google.firebase:firebase-messaging:$rootProject.ext.playServiceVersion"
implementation "com.google.firebase:firebase-core:$rootProject.ext.playServiceVersion"
implementation "com.firebase:firebase-jobdispatcher-with-gcm-dep:$rootProject.ext.jobdispatcherVersion"

Решение:

У меня есть изменения сервисов google на

classpath 'com.google.gms:google-services:3.1.1'

И он поддерживает службы firebase.

Надеюсь, кто-то сохранит свое время.

Ответ 11

Чтобы добавить к вышеперечисленным решениям:

Убедитесь, что у вас нет дублирующих зависимостей, указывающих на разные версии их, в нескольких местах (или даже в одном файле).

Ответ 12

  • Включить

    defaultConfig {  multiDexEnabled true }

  • Если шаг 1 не работает, то

    Перейдите к структуре проекта и найдите внешнюю библиотеку, в которой используется другой версия. Дважды щелкните по нему и удалите его файл jar. Закройте проект и откройте снова. Студия Android восстановит проект. Проблема не должна быть.

Ответ 13

Если эта ошибка появилась после включения поддержки kotlin, и ни одно из других решений не работает, попробуйте изменить зависимость kotlin модуля приложения build.gradle до:

implementation ("org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version") {
    exclude group: 'org.jetbrains', module: 'annotations'
}

Это работает для меня на Android Studio 3.0 Beta 6. Подробнее см. этот для ответа.

Ответ 14

С стабильной сборкой Android Studio 3.0 Ниже были предприняты шаги для меня:

  • Поделитесь с SdkManager → Android Sdk → Sdk Tools и обновите сервисы Google Play до последней версии до 46.
  • Очистить проект и перестроить проект.

Ответ 15

Одна из возможностей: наличие одной и той же библиотеки, но с разными версиями в зависимостях.

У меня была эта проблема со следующими строками в файле gradle:

  • compile fileTree(include: ['*.jar'], dir: 'libs')
  • compile 'com.google.code.gson:gson:2.8.2'

Библиотека gson была в моем каталоге libs, но с предыдущей версией. Я удалил gson-2.3.1.jar из каталога libs, и все вернулось к нормальному состоянию.

Ответ 16

[НЕВОЗМОЖНО СДЕЛАТЬ DEX SOLVED] После нескольких часов Я разрешил "НЕВОЗМОЖНО СЛУЧИТЬ ОШИБКУ DEX"

  • Обновите все строки com.android.support в gradle до v27.1.0

Причина. Android обновил поддержку библиотек до версии v27.1.0, поэтому вам нужно изменить все строки поддержки Android в файле gradle на 27.1.0 с 26.1.0

  1. Убедитесь, что раздел репозитория включает раздел maven с https://maven.google.com "конечной точки. Например:

    allprojects { репозитории {   jcenter()   maven {       url "https://maven.google.com"   } } }

Причина: - Android не может обновлять библиотеки поддержки в диспетчере SDK и теперь использует maven.google.com для обновления, поэтому вам нужно включить это, чтобы использовать библиотеки поддержки 27.1.0

После изменения версии:  1. Чистый проект  2. Перестроить проект

Ответ 17

добавить команды ниже:

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}

Ответ 18

Установка сервисов Google Play (последняя версия), включая

android {
    defaultConfig {
        multiDexEnabled true
        }
}

в build.gradle решил проблему для меня, обязательно очистите и перестройте проект!

Ответ 19

Я согласен с Крисом-младшим. Если вы используете Firebase для встраивания объявлений AdMob (или даже если вы этого не сделаете), игровые сервисы-аналитики включают в себя рекламные ролики, даже если вы не добавляете это как зависимость. Google, очевидно, допустил ошибку в своем развертывании 11.4.0, так как аналитика включает в себя версию 10.0.1 объявлений, а не 11.4.0 (подсказка мыши в подсказке в gradle показывает это).

Я вручную добавил компиляцию 'com.google.android.gms: play-services-ads: 11.4.0' вверху, которая работала, но только после того, как я отключил Instant Run: fooobar.com/questions/44457/...

Таким образом, он либо регрессирует до 10.0.1, либо добавляет объявления и отключает Instant Run. Это то, что я нашел, если это поможет любому.

Ответ 20

В моем случае это был gson-2.8.1.jar, который я добавил в папку libs проекта. Но ссылка уже была на SDK. Поэтому не нужно было добавлять gson-2.8.1.jar в папку libs.

Когда я вынул его, проект gson-2.8.1.jar компилируется без этой ошибки.

Итак, попробуйте пересмотреть папку libs и зависимости.

Ответ 21

Я столкнулся с той же проблемой и нашел реальную причину моего дела. Раньше я также повторил все предыдущие ответы, но это не решило проблему. У меня есть два модуля в моем проекте приложения для изнашивания, а build.gradle:

построить модуль сборки:

  проект реализации (': common')
файлы реализации ('libs/farmer-motion-1.0.jar')
Код>

общий модуль build.gradle:

  файлы реализации ('libs/farmer-motion-1.0.jar')
Код>

Перед обновлением до gradle 3.x "реализация" все "компилируется".

Я запускаю gradlew с параметром --stacktrace для получения трассировки стека, вы можете просто щелкнуть по нему в окне консоли gradle, когда возникает эта проблема. И нашел, что зависимость от пакета jar повторяется:

  Причиненный: com.android.dex.DexException: несколько файлов dex определяют Lcom/farmer/motion/common/data/pojo/SportSummary $2;
Код>

Класс SportSummary в пакете farmer-motion-1.0.jar, прочитайте официальное руководство по миграции, я изменил свой build.gradle следующим образом:

построить модуль сборки:

  проект реализации (': common')
// удалять файлы реализации зависимостей ('libs/farmer-motion-1.0.jar')
Код>

общий модуль 的 build.gradle:

  api файлы ('libs/farmer-motion-1.0.jar')//изменение реализации в api
Код>

Теперь модуль износа будет иметь зависимость от экспорта farmer-motion-1.0.jar по общему модулю. Если не имеет зависимости от пакета jar во время выполнения, реализация "зависимость пакета jar также может быть изменена на 'compileOnly'.. p >

Ответ 22

У меня также была проблема.

Мне удалось решить, изменив compileSdkVersion и targetSdkVersion на последнюю версию.

Ответ 23

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

Ответ 24

Для меня это было обновление сообщений firebase в приложении \build.gradle:

compile 'com.google.firebase:firebase-messaging:10.0.1'

к

compile 'com.google.firebase:firebase-messaging:11.4.2'

Ответ 25

Одна из возможных причин: дублирование переходных зависимостей, которые не были должным образом обработаны импортом мультиплексоров Android Studio. Проверьте свой список и удалите их. Для меня это было буквально:

--- a/project/module/build.gradle
+++ b/project/module/build.gradle
@@ -21,5 +21,4 @@ android {
 dependencies {
     implementation project(':upstream-dependency-project')
     implementation 'com.android.support:support-v4:18.0.0'
-    implementation files('libs/slf4j-android-1.6.1-RC1.jar')
 }

Ответ 26

Я выясню причину этой проблемы для моего проекта. Я добавил одну зависимость дважды в build.gradle. Один раз, добавляя зависимость и один раз снова, добавляя зависимость jar:

скомпилировать 'org.achartengine: achartengine: 1.2.0'
...
файлы реализации ('../achartengine-1.2.0.jar')

после устранения проблемы с первой строкой.

Ответ 27

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

Вот несколько советов по отладке. В этом примере кода com.google.code.findbugs: jsr305: 3.0.0 является нарушающей библиотекой.

Всегда очищайте и перестраивайте каждый раз, когда вы меняете, чтобы проверить свое решение!

  • Постройте флажок - stacktrace для более подробной информации. Он будет жаловаться на класс, Google, этот класс, чтобы найти библиотеку. Вот как вы можете настроить студию Android, чтобы всегда запускать gradle с флагом - stacktrace.

  • Взгляните на консоль Gradle в Android Studio View > Окно инструментов > Gradle Console после сборки

  • Проверьте наличие повторных зависимостей, выполнив ./gradlew -q app: dependencies. Вы можете повторно запускать это каждый раз, когда вы изменяете свой build.gradle.

  • В build.gradle,

      android {       ...       configurations.all {           resolutionStrategy {               // Принудительная версия библиотеки               // во всех зависимостях, имеющих эту зависимость               force 'com.google.code.findbugs: jsr305: 3.0.0'           }       }
    }
    Код>
  • В build.gradle,

      зависимости {   ...   реализация ('com.google.auth: google-auth-library-oauth2-http: 0.6.0') {       // Исключить библиотеку для этого конкретного импорта.       исключить группу: 'com.google.code.findbugs'   }
    }
    Код>
  • В build.gradle,

      android {   ...   configurations.all {       resolutionStrategy {           // Полностью исключить библиотеку. Работает на транзитивных           // зависимости.           исключить группу: 'com.google.code.findbugs'       }   }
    }
    Код>
  • Если некоторые из ваших зависимостей находятся в файлах jar, откройте файлы jar и посмотрите, есть ли конфликтующие имена классов. Если они есть, вам, вероятно, придется перестроить банки с новыми именами классов или заглянуть в затенение,

Еще немного фонового изображения:

Ответ 28

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

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

Ответ 29

Возможно, это не ваша проблема, но я получил эту ошибку, когда случайно включил две идентичные (но именованные) библиотеки в разделе зависимостей {} проекта.

Ответ 30

В моем случае библиотека создает эту проблему, библиотека была успешно добавлена в проект, но когда я запускаю приложение, она показывает мне эту ошибку. Так что, если это произойдет и с вами, вы можете пойти в github и проверить проблемы или поднять новую проблему. Если вы не найдете решения относительно библиотеки, я предлагаю вам ее заменить.