Не удалось слить Dex - Android Studio 3.0

Когда я обновил свою Android-студию до 3.0 в стабильном канале и запустил проект, я начал получать следующую ошибку.

Error:Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.
com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex

Я пробовал очистить и перестроить проект, но это не сработало. Любая помощь будет оценена.

Уровень проекта build.gradle

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.0'
    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
}

Уровень приложения build.gradle

apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
    applicationId "com.med.app"
    minSdkVersion 21
    targetSdkVersion 26
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    resConfigs "auto"
    multiDexEnabled true

}
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'
testCompile 'junit:junit:4.12'

//appcompat libraries
compile 'com.android.support:appcompat-v7:26.1.0'
compile 'com.android.support:design:26.1.0'


//butterknife
compile 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

//picasso
compile 'com.squareup.picasso:picasso:2.5.2'

//material edittext
compile 'com.rengwuxian.materialedittext:library:2.1.4'

// Retrofit & OkHttp & and OkHttpInterceptor & gson
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'

// FirebaseUI for Firebase Auth
compile 'com.firebaseui:firebase-ui-auth:3.1.0'
}
apply plugin: 'com.google.gms.google-services'

Я пробовал все ответы, но я не могу решить эту ошибку. Пожалуйста, помогите.

Ответ 1

Добавьте явную зависимость для play-services-auth вместе с вашей зависимостью firebase-ui-auth:

// FirebaseUI for Firebase Auth
    compile 'com.firebaseui:firebase-ui-auth:3.1.0'
    compile 'com.google.android.gms:play-services-auth:11.4.2'

Это связано с тем, что firebase-ui-auth имеет транзитивную зависимость от play-services-auth и должен использоваться с соответствующей версией play-services-auth. Пожалуйста, посмотрите это объяснение.

firebase-ui-auth
|--- com.google.firebase:firebase-auth
|--- com.google.android.gms:play-services-auth

Более ранние версии инструмента сборки Gradle не включали транзитивные зависимости, поэтому теперь версии могут конфликтовать с другими версиями play-services.

Мой вопрос объяснил и ответил (на случай, если кто-то хочет знать)

При обновлении до Android Studio 3.0 и обновлении версии средства сборки Gradle до 3.0.0 компиляция зависимостей теперь выполняется иначе, чем в более ранних версиях.

Я недавно столкнулся с той же проблемой. Я использовал эти зависимости, которые хорошо работали до версии 2.3.3 Gradle:

implementation 'org.apache.httpcomponents:httpmime:4.3.6'
implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1'

После обновления до gradle-build-version 3.0.0 я получил ту же ошибку. Вникнув в него, я обнаружил, что транзитивная зависимость httpmime конфликтует с файлом, в который httpclient-android.

Описание

Позвольте мне объяснить это подробно. Ранее при использовании gradle-tool-version 2.3.3 я использовал httpclient-android для получения и использования класса с именем org.apache.http.entity.ContentType.java Расширение транзитивных зависимостей org.apache.httpcomponents:httpmime:4.3.6 показал, что у него есть org.apache.httpcomponents:httpcore:4.3.6 который является тем же пакетом, который я хотел использовать. Но при компиляции или синхронизации сборки она исключала org.apache.http.entity.ContentType.java поэтому мне нужно было добавить эту зависимость, которая включает ContentType.java:

implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1'

После этого все работало нормально.

Как только я обновил версию gradle-build до 3.0.0, все изменилось. Теперь он включает все переходные зависимости. Таким образом, при компиляции с последней версией Android Studio с помощью gradle-build-tool версии 3.0.0 мой ContentType.java компилировался дважды. Один раз из org.apache.httpcomponents:httpcore:4.3.6 (который является неявной транзитивной зависимостью httpmime) и снова из org.apache.httpcomponents:httpclient-android:4.3.5.1 который я использовал ранее.

Чтобы решить эту проблему, мне пришлось удалить существующую зависимость org.apache.httpcomponents:httpclient-android:4.3.5.1 поскольку httpmime сама получит соответствующий класс, необходимый для моего приложения.

Решение для моей ситуации: используйте только необходимые зависимости и удалите httpclient-android

implementation 'org.apache.httpcomponents:httpmime:4.3.6'

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

Ответ 2

Прежде всего, я включил multidex, как было предложено в предыдущих комментариях.

Затем, если ошибка продолжается, откройте консоль Gradle (нажмите на значок "Показать значок консоли" слева от раздела "Сообщения" ) и нажмите ссылку, чтобы перекомпилировать параметры Debug/Info/Stack. Это покажет более подробную информацию об ошибке.

В моем случае ошибка "Невозможно объединить dex" была вызвана дублирующимися записями в "com.jakewharton.picasso: picasso2-okhttp3-downloader: 1.1.0".

Я вручную удалил конфликтующую библиотеку из моего проекта и выполнил "Проект перестройки" (форсирование для перезагрузки библиотеки). Это решило проблему.

Ответ 3

У меня была эта ошибка:

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

и в конечном итоге изменил мой gradle, чтобы исправить эту проблему.

Приложение\build.gradle

android {
compileSdkVersion 25
//buildToolsVersion '26.0.2'
buildToolsVersion '25.0.3'//<< Changed back to old version before my studio 3.0 update
defaultConfig { ....

.\Build.gradle

buildscript {
repositories {
    jcenter()
    google()
}
dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3' //<< Changed back to old version before my studio 3.0 update
    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

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

Ответ 4

Проверьте зависимости в вашем build.gradle (приложение), если вы используете 2 (или более) библиотеки с одинаковым именем и другой версией. Например (в моем случае):

implementation files('src/main/libs/support-v4-24.1.1.jar')
implementation 'com.android.support:support-v4:27.0.2'

Удалите один, затем очистите и восстановите. Также обратите внимание, что зависимости находятся за пределами buildscript.

Ответ 5

android {
    defaultConfig {
       multiDexEnabled true
    }
}

добавьте эту строку в файл :gradle

Ответ 6

У меня такая же проблема Я решил:

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

в buildscript- > зависимостях

build.gradle

в моем файле у меня есть:

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

Ответ 7

Просто измените свой путь к классу:

classpath 'com.android.tools.build: gradle:2.3.3'

и sycn Gradle.

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

Ответ 8

Иногда эта ошибка возникает, когда один и тот же файл библиотеки .jar присутствует в папке "libs", и в то же время мы пытаемся получить исходный код, добавив строку "compile" в файл приложения gradle.

Любое из этого, если мы удалим, мы можем преодолеть эту ошибку.

Надеюсь, что это может быть полезным.

Ответ 9

"все библиотеки gsm" Спасибо, это помогло решить мою проблему, но не только библиотеки gsm, но и все библиотеки google должны иметь одинаковую версию. У меня была эта ошибка dexing, потому что версия com.android.support:recyclerview-v7 отличалась от версии com.android.support:appcompat-v7

Android-студия показывает эти строки с красным подчеркиванием в файле build.gradle.

Ответ 10

Я сделал точный, как подсказка на скриншоте ниже, изменил 11.0.4 на 11.8.0

compile 'com.google.android.gms:play-services-base:11.8.0'
compile 'com.google.android.gms:play-services:11.8.0'

работает нормально

Unable to merge dex

Ответ 11

Похоже, у этой ошибки много сценариев. В моем случае это был build.gradle Java 1.8 в build.gradle (app):

compileOptions {
    targetCompatibility 1.8
    sourceCompatibility 1.8
}

Я удалил и ошибка исчезла

Ответ 12

Я изменил ниже с 11.6.0 до 11.8.0, и это сработало.

compile 'com.google.android.gms:play-services-ads:11.6.0'

implementation 'com.google.android.gms:play-services-ads:11.8.0'

Ответ 13

Я столкнулся с той же ошибкой в базе данных пользовательского интерфейса Firebase. Даже после включения multiDex, как предлагалось в других ответах, я все еще получал ошибку. Затем я узнал, что необходимо, чтобы пользовательский интерфейс Firebase и база данных Firebase имели те же соответствующие версии, что и в репозитории Firebase UI GitHub.

Firebase UI GitHub

Ответ 14

Добавьте это в свой gradle: реализация 'com.android.support:multidex:1.0.0'

Очистить проект, а затем восстановить. Это работает

Ответ 15

Это также может быть слишком поздно, но я думаю, что у меня тоже есть ответ. Исходя из моих недавних испытаний, при компиляции приложения убедитесь, что у вас нет jar файла и 'implementation'('compile' for 3.0.1 > gradle) одного и того же пакета в одном и том же проекте. В моем случае у меня была implementation 'org.jsoup:jsoup:1.11.2' и Jsoup jar в одном проекте. Ошибка новичка, но я узнал.

Ответ 16

Для тех, кто еще борется с этим совсем недавно и добавил компоненты. Что вызвало это для меня было добавление:

compile 'android.arch.lifecycle: extensions: 1.0.0' annotationProcessor 'android.arch.lifecycle: compiler: 1.0.0'

Что исправило это обновление

скомпилируйте 'android.arch.lifecycle: расширения: 1.1.1' annotationProcessor 'android.arch.lifecycle: компилятор: 1.1.1'

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

Ответ 17

Добавив следующий код в build.gradle (модуль приложения) у меня работает

android {
      defaultConfig {
          multiDexEnabled true
      }
}

dependencies {
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    implementation 'com.android.support:support-v4:26.1.0'
}

Ответ 18

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

api (rootProject.ext.dependencies["bindingRecyclerView"]) {
    exclude group: 'com.android.support'
}

Ответ 19

В моем случае мне пришлось сделать три вещи:

  1. Поскольку я использовал Firebase, убедитесь, что сервисы Firebase и Google Play имеют одинаковую версию. Первоначально Play сервисы имели более низкую версию. В основном помогла версия 12.0.1

  2. Установите это на уровне приложения build.gradle

    android {  
        multiDexEnabled true   
    }
    
  3. Снова на уровне приложения build.gradle, добавьте

    compileOptions{
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    

Ответ 20

Эта ссылка решила проблему для меня.

Сначала я установил зависимости в моем pubspec.yaml на

dependencies:
  flutter:
    sdk: flutter
  cloud_firestore: ^0.8.2 

и запустил flutter packages get в мой терминал IDE.

Также мне пришлось изменить минимальную целевую версию SDK:

  1. Откройте android/app/build.gradle, затем найдите строку с надписью minSdkVersion 16.
  2. Измените эту строку на minSdkVersion 21.
  3. Сохраните файл.

Кроме того, мне пришлось открыть android/app/build.gradle, а затем добавить следующую строку в качестве последней строки в файле: apply plugin: 'com.google.gms.google-services'

Затем мне пришлось открыть android/build.gradle, затем внутри тега buildscript добавить новую зависимость:

buildscript {
   repositories {
       // ...
   }

   dependencies {
       // ...
       classpath 'com.google.gms:google-services:3.2.1'   // new
   }
}

После этого мое приложение наконец запустилось на эмуляторе Android.

Ссылка имеет более полное руководство, если вы застряли.

Ответ 21

это мой проект gradle

android {compileSdkVersion 26 buildToolsVersion "27.0.3"

defaultConfig {
    applicationId "net.mobilegts.candyjump"
    minSdkVersion 14
    targetSdkVersion 23

    ndk {
        moduleName "player_shared"
    }
}
sourceSets {
    main {
        jni.srcDirs = []
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
defaultConfig {
    applicationId "net.mobilegts.candyjump"
    minSdkVersion 14
    targetSdkVersion 23

    ndk {
        moduleName "player_shared"
    }
}
sourceSets {
    main {
        jni.srcDirs = []
    }
}

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

} }