Ответ 1
У меня была такая же проблема, когда я обновлялся от com.google.android.gms:play-services:11.2.2
до com.google.android.gms:play-services:11.4.0
. Это решило это для меня:
- чистый
- перестраивать
У меня есть 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
У меня была такая же проблема, когда я обновлялся от com.google.android.gms:play-services:11.2.2
до com.google.android.gms:play-services:11.4.0
. Это решило это для меня:
Я пробовал все выше, и никто из них не помогает, наконец, я нахожу эту работу для меня:
Приложение /build.gradle:
android {
defaultConfig {
multiDexEnabled true
}
}
Иногда вам нужно только устранить предупреждения, и ошибка исчезнет автоматически. Смотрите ниже особый случай:
У меня были эти две зависимости в моем файле 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'
Смотрите ниже комментарии для других подобных ситуаций.
В моем случае, к сожалению, ни решения Мишеля, ни Сурагча не работали для меня.
Поэтому я решил эту проблему, выполнив следующие действия:
В 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
находится в корневой папке проекта. (Возможно, вам сначала придется показывать скрытые файлы.) Я пробовал все другие решения, но никто не работал на меня. В конце я решил это, используя ту же версию зависимости, отредактировав 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'
}
}
}
Удаление .gradle
, как было предложено Сурагчем, было недостаточно для меня. Кроме того, мне пришлось выполнить Build > Clean Project
.
Обратите внимание, что для просмотра .gradle
вам нужно перейти к представлению "Проект" в навигаторе в левом верхнем углу:
В моем случае проблема была из-за библиотеки комнаты:
compile 'android.arch.persistence.room:runtime:1.0.0-alpha1'
Изменение его на:
compile 'android.arch.persistence.room:runtime:1.0.0'
работал.
если (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'
и это устраняет проблему. Поэтому обратите внимание на это.
Привет, у меня такая же проблема, как и все. Итак, наконец, я решил после 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.
Надеюсь, кто-то сохранит свое время.
Чтобы добавить к вышеперечисленным решениям:
Убедитесь, что у вас нет дублирующих зависимостей, указывающих на разные версии их, в нескольких местах (или даже в одном файле).
Включить
defaultConfig { multiDexEnabled true }
Если шаг 1 не работает, то
Перейдите к структуре проекта и найдите внешнюю библиотеку, в которой используется другой версия. Дважды щелкните по нему и удалите его файл jar. Закройте проект и откройте снова. Студия Android восстановит проект. Проблема не должна быть.
Если эта ошибка появилась после включения поддержки 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. Подробнее см. этот для ответа.
С стабильной сборкой Android Studio 3.0 Ниже были предприняты шаги для меня:
Одна из возможностей: наличие одной и той же библиотеки, но с разными версиями в зависимостях.
У меня была эта проблема со следующими строками в файле gradle:
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.google.code.gson:gson:2.8.2'
Библиотека gson была в моем каталоге libs, но с предыдущей версией. Я удалил gson-2.3.1.jar
из каталога libs, и все вернулось к нормальному состоянию.
[НЕВОЗМОЖНО СДЕЛАТЬ DEX SOLVED] После нескольких часов Я разрешил "НЕВОЗМОЖНО СЛУЧИТЬ ОШИБКУ DEX"
Причина. Android обновил поддержку библиотек до версии v27.1.0, поэтому вам нужно изменить все строки поддержки Android в файле gradle на 27.1.0 с 26.1.0
Убедитесь, что раздел репозитория включает раздел maven с https://maven.google.com "конечной точки. Например:
allprojects { репозитории { jcenter() maven { url "https://maven.google.com" } } }
Причина: - Android не может обновлять библиотеки поддержки в диспетчере SDK и теперь использует maven.google.com для обновления, поэтому вам нужно включить это, чтобы использовать библиотеки поддержки 27.1.0
После изменения версии: 1. Чистый проект 2. Перестроить проект
добавить команды ниже:
android {
...
dexOptions {
jumboMode true
javaMaxHeapSize "4g"
}
}
Установка сервисов Google Play (последняя версия), включая
android {
defaultConfig {
multiDexEnabled true
}
}
в build.gradle решил проблему для меня, обязательно очистите и перестройте проект!
Я согласен с Крисом-младшим. Если вы используете 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. Это то, что я нашел, если это поможет любому.
В моем случае это был gson-2.8.1.jar, который я добавил в папку libs проекта. Но ссылка уже была на SDK. Поэтому не нужно было добавлять gson-2.8.1.jar в папку libs.
Когда я вынул его, проект gson-2.8.1.jar компилируется без этой ошибки.
Итак, попробуйте пересмотреть папку libs и зависимости.
Я столкнулся с той же проблемой и нашел реальную причину моего дела. Раньше я также повторил все предыдущие ответы, но это не решило проблему. У меня есть два модуля в моем проекте приложения для изнашивания, а 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 >
У меня также была проблема.
Мне удалось решить, изменив compileSdkVersion
и targetSdkVersion
на последнюю версию.
Для нашего проекта мы случайно добавили одну и ту же банку два раза с другим именем. Удаление одного из них решило проблему.
Для меня это было обновление сообщений firebase в приложении \build.gradle:
compile 'com.google.firebase:firebase-messaging:10.0.1'
к
compile 'com.google.firebase:firebase-messaging:11.4.2'
Одна из возможных причин: дублирование переходных зависимостей, которые не были должным образом обработаны импортом мультиплексоров 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')
}
Я выясню причину этой проблемы для моего проекта. Я добавил одну зависимость дважды в build.gradle. Один раз, добавляя зависимость и один раз снова, добавляя зависимость jar:
скомпилировать 'org.achartengine: achartengine: 1.2.0'
...
файлы реализации ('../achartengine-1.2.0.jar')
после устранения проблемы с первой строкой.
В случае, если верхние ответы не сработали для вас, ваша проблема может заключаться в том, что у вас есть несколько зависимостей, которые зависят от одной и той же библиотеки.
Вот несколько советов по отладке. В этом примере кода 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 и посмотрите, есть ли конфликтующие имена классов. Если они есть, вам, вероятно, придется перестроить банки с новыми именами классов или заглянуть в затенение,
Еще немного фонового изображения:
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.1'
}
Возможно, это не ваша проблема, но я получил эту ошибку, когда случайно включил две идентичные (но именованные) библиотеки в разделе зависимостей {} проекта.
В моем случае библиотека создает эту проблему, библиотека была успешно добавлена в проект, но когда я запускаю приложение, она показывает мне эту ошибку. Так что, если это произойдет и с вами, вы можете пойти в github и проверить проблемы или поднять новую проблему. Если вы не найдете решения относительно библиотеки, я предлагаю вам ее заменить.