Не удалось слить 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
В моем случае мне пришлось сделать три вещи:
-
Поскольку я использовал Firebase, убедитесь, что сервисы Firebase и Google Play имеют одинаковую версию. Первоначально Play сервисы имели более низкую версию. В основном помогла версия 12.0.1
-
Установите это на уровне приложения build.gradle
android {
multiDexEnabled true
}
-
Снова на уровне приложения 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:
- Откройте android/app/build.gradle, затем найдите строку с надписью minSdkVersion 16.
- Измените эту строку на minSdkVersion 21.
- Сохраните файл.
Кроме того, мне пришлось открыть 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'
}
}
} }