Wykonanie Android Studio 3.0 nie powiodło się dla zadania: nie można scalić dex


85

studio android otrzymywało błąd kompilacji podczas wykonywania kompilacji, w tym:

Błąd: nie powiodło się wykonanie zadania „: app: transformDexArchiveWithExternalLibsDexMergerForDebug”. java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: nie można scalić dex ”

Moja aplikacja: plik 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'

wszelkie rozwiązania

Edycja: Skończyłem z próbką za pośrednictwem strony github Firebase i rozwiązałem


musisz uwzględnić obsługę multiDex w swojej aplikacji
Sudheesh R

i spróbuj posprzątać, przebudować swój projekt
Sudheesh R

Sugeruję edycję pytania i opublikowanie całego wyniku konsoli Gradle, a nie tylko jednej linii. Szczegóły twojego problemu znajdują się w innym miejscu wyniku.
CommonsWare

@CommonsWare Wysłałem cały mój błąd ... to tylko dwie linie.
Anguraj

2
Spróbuj wyłączyć natychmiastowe uruchamianie, wyczyść swój projekt i dodaj Androida {defaultConfig {multiDexEnabled true}}
Tara

Odpowiedzi:


65

W przypadku projektu opartego na Cordova uruchom cordova clean androidponownie przed kompilacją, zgodnie z sugestią @mkimmet .


1
Niech ktoś dobrze oznaczy tę odpowiedź. Rozwiązuje problem.
pamekar

1
Dla mnie zainstalowaniu 'Cordova-plugin-androidx' i 'Cordova-plugin-androidx-adapter' sovled problem
SSZ

57

Ten błąd występuje, gdy dodajesz bibliotekę zewnętrzną, która może nie być zgodna z compileSdkVersion.

Zachowaj ostrożność podczas dodawania pliku external library.

Spędziłem 2 dni nad tym problemem i ostatecznie został on rozwiązany, wykonując następujące kroki.

  • Upewnij się, że wszystkie biblioteki wsparcia są takie same jak compileSdkVersionna swoje build.gradle(Module:app)w moim przypadku jest to 26.wprowadź opis obrazu tutaj

  • W kategorii defaultConfig wpisz multiDexEnabled true . To jest ważna część.multiDexEnabled True image

  • Idź do Plik | Ustawienia | Kompilacja, wykonanie, wdrożenie | Natychmiastowe uruchamianie i spróbuj włączyć / wyłączyć natychmiastowe uruchamianie w celu wymiany na gorąco ... i kliknij OK Włącz natychmiastowe uruchamianie na gorącą wymianę ... Obraz

  • Sync Twój projekt.

  • Na koniec przejdź do kompilacji | kliknij Rebuild Project .

  • Uwaga: Odbuduj projekt najpierw czyści, a następnie buduje projekt.


to jest pomocne, dziękuję.
Sumit Saxena

cieszę się, że to słyszę. Miłego androidowania.
Niamatullah Bakhshi

1
@YajliMaclo świetnie!
Niamatullah Bakhshi,

47

Spróbuj dodać to w gradle

    android {
      defaultConfig {
        multiDexEnabled true
        }
   }

Czy próbowałeś unieważnić pamięć podręczną w Android Studio? @Anguraj
Ishan Fernando

To nie jedyny krok do włączenia multidex. Nie jest również potrzebny w nowszych poziomach API
OneCricketeer

25

Rozkład:

Skorzystaj z tego linku : Ponieważ istnieją różne opcje wyłączenia ostrzeżenia w zależności od minSdkVersion, jest ono ustawione poniżej 20 :

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

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

Jeśli masz wartość minSdkVersion większą niż 20 w zestawie build.gradle, użyj następujących poleceń, aby wyłączyć ostrzeżenie:

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

Zaktualizuj zależności w następujący sposób:

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

Ponownie jedyną różnicą są słowa kluczowe w zależnościach:

minSdkVersion poniżej 20: użyj kompilacji

minSdkVersion powyżej 20: użyj implementacji

  1. Mam nadzieję, że to było pomocne. Zagłosuj za, jeśli rozwiązało Twój problem. Dziękujemy za poświęcony czas.
  2. Również uzyskać więcej informacji, na temat , dlaczego to nastąpi , należy zapoznać się z pierwszego akapitu w link, będzie to dokładnie wyjaśnić, dlaczego? i co oznacza to ostrzeżenie.

24

Po prostu spróbuj wykonać „Kompiluj -> Wyczyść projekt”. To rozwiązało problem.


5
Dzięki temu zadziałało to dla mnie w projekcie Ionic / Cordova, uruchamiając cordova clean android, podczas gdy miałem również zainstalowaną wtyczkę cordova-android-support-gradle-release.
mkimmet

Uwielbiam, gdy coś prostego naprawia rzeczy !! Dzięki!
tonejac

To rozwiązało problem podczas pracy z React Native.
Michael Auderer

Dzięki, to najłatwiejsze rozwiązanie tego problemu, poświęciłem 3 dni na rozwiązanie tego problemu, a Twoja odpowiedź rozwiązuje wszystkie moje problemy. Jeszcze raz dziękuję bracie !!!
gautamsinh mori

Dzięki. Pomógł mi w Android Studio 4.1. Uratowałem mój dzień.
Atif

7

Dla mnie dodanie

multiDexEnabled true

i

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'
    }

do pliku Build.gradle na poziomie aplikacji rozwiązało problem


5

Przejdź do build.gradlepliku na poziomie modułu i dodaj następujące wiersze do kodu

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

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

To łatwo rozwiązało problem. Sprawdź tę dokumentację


4

Użyj multiDexEnabled true, jak poniżej.

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

i

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

to rozwiązanie zadziałało dla mnie.


4

Wypróbowałem wiele rozwiązań, jak wspomniano powyżej, w tym multiDexEnabled, ale żadne z nich nie zadziałało.

Oto rozwiązanie, które u mnie zadziałało - skopiuj ten kod do pliku 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}"
        }
    }
}

Upewnij się, że program gradlew został wyczyszczony przed uruchomieniem kodu


Zmieniłem minSdkVersion, wystarczy
Mr Special

2

Przydarzyło mi się to samo, zorientowałem się, że jestem w trakcie aktualizacji do AS 3.0.1 i po wykonaniu aktualizacji, wyczyszczeniu i przebudowie aplikacji wszystko zostało naprawione.


2

Dla mnie tym, co naprawiło ten błąd, była zmiana jednej linii w zależnościach gradle mojej aplikacji.

od tego :

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

Do tego :

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

Tylko to działało dla mnie. Nie musiałem dodawać siły = true
Paulo Linhares - Packapps

1

Upewnij się również, że Twoja aplikacja podklasuje MultiDexApplication

import android.support.multidex.MultiDexApplication

class App : MultiDexApplication()

lub jeśli nie podklasy klasy Application, dodaj do AndroidManifest.xml

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

0

Czy jesteś pomiędzy aktualizacjami SDK lub platformą? Jeśli tak, uzupełnij je całkowicie, a następnie spróbuj kontynuować. Zwykle aktualizuję poszczególne pakiety, które należy zaktualizować, aby zabrać całą aktualizację, która czasami może sięgać do 2,5 GB. Wykonanie tej pełnej aktualizacji czasami kończy się niepowodzeniem. Miałem wiele aktualizacji SDK po uaktualnieniu do Android Studio 3.0 i otrzymywałem powyższy błąd, ponieważ wszystkie pakiety nie zostały zaktualizowane. Po zaktualizowaniu wszystkich pakietów powyższy błąd zniknął.


Mam nadzieję, że wyczyściłeś lub unieważniłeś pamięć podręczną i ponownie uruchomiłeś Android Studio? Dla mnie Android Studio 3 wydaje się wadliwy w porównaniu z poprzednimi wersjami.
Vineet Jain

ktoś kiedykolwiek to naprawił? nie można tego ominąć!
68060

0

W moim przypadku zmiana wersji biblioteki Firebase z 2.6.0 na 2.4.2 rozwiązała problem


0

U mnie problemem było użycie Javy 1.8 w module, ale nie w module aplikacji. Dodałem to do gradle kompilacji aplikacji i działałem:

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

0

Taki sam problem. Włączyłem multidex: defaultConfig {applicationId "xxx.xxx.xxxx" minSdkVersion 24 targetSdkVersion 26 multiDexEnabled true

Wyczyściłem pamięć podręczną, wyczyściłem gradle, odbudowałem, stworzyłem, próbowałem upewnić się, że nie ma konfliktów w zaimportowanych bibliotekach (Usunąłem wszystkie zależności przechodnie) i wykonałem wszystkie aktualizacje. Nadal:

Błąd: nie powiodło się wykonanie zadania „: app: transformDexArchiveWithExternalLibsDexMergerForDebug”. java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: nie można połączyć dex

Okazuje się, że kompilacja się nie spodobała: implementacja „org.slf4j: slf4j-android: 1.7.21”


0

Jeśli wersja Android Studio to 3.0.1, Gradle to 4.1, a Android PluginVersion to 3.0.0, wystąpi ten problem. Następnie obniżam wersję Gradle 3.3, Android Android jest zerowy, nie ma takiego problemu.


0

Miałem to, gdy żądana wersja SDK nie pasowała do zależności. Możesz kliknąć podświetloną linię i naprawić to, klikając czerwoną żarówkę. Nie musisz szukać aktualnej wersji, po prostu pozwól IDE to rozwiązać. I dodaj repozytorium Google do konfiguracji maven.


0

Otrzymałem ten sam błąd, aw moim przypadku błąd został rozwiązany, gdy naprawiłem błąd kompilacji, który był powiązany z innym wariantem kompilacji niż ten, który obecnie budowałem.

Budowałem wariant kompilacji, na który patrzyłem, dobrze, bez błędów, ale próba debugowania spowodowała app:transformDexArchiveWithExternalLibsDexMergerForDebugbłąd. Po przełączeniu się na budowanie drugiego wariantu kompilacji złapałem błąd w procesie kompilacji i naprawiłem go. Wydawało się, że to rozwiązało mój app:transformDexArchiveWithExternalLibsDexMergerForDebugproblem dla wszystkich wariantów kompilacji.

Należy zauważyć, że ten błąd nie znajdował się w przywoływanym module zewnętrznym, ale w odrębnym zestawie źródłowym wariantu kompilacji, który odwoływał się do modułu zewnętrznego. Mam nadzieję, że to pomocne dla kogoś, kto może widzieć ten sam przypadek co ja!


0

Wykonałem i rozwiązałem ten problem, wykonując te zadania w moim kodzie

Otwórz -> build.gradle Zmień wartość z

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

do

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

0

Aby usunąć ten problem Dex, po prostu zaimplementuj jedną zależność. Ten problem występuje, gdy używamy wielu różnych usług z tego samego serwera. Załóżmy, że w projekcie używamy reklam i Firestore, a oba mają projektanta repozytoriów. więc musimy wywoływać różne dane w repozytorium, do zaimplementowania potrzebujemy zależności dex. Nowa zależność od aktualizacji: -

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

Jestem pewien, że to na stałe rozwiąże Twój problem


jego zależność umieściła go w gradle
Pradeep Sheoran

0
1) Dodaj wartość multiDexEnabled true
2) jeśli pojawi się błąd kompilacji, sprawdź pogodę build.gradle na poziomie aplikacji, te same zależności są zaimplementowane w różnych wersjach.
3) Usuń jeden, jeśli znajdziesz te same zależności.

android {compileSdkVersion 28 defaultConfig {

    minSdkVersion 17
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
mam nadzieję, że działa dobrze :) Miłego kodowania

0

Najłatwiejszym sposobem uniknięcia błędu typu ssania jest:

-Zmień bibliotekę combilesdkversion na taką samą jak twoja aplikacja compilesdkversion

-Zmień wersję biblioteki supportLibrary tak samo jak twoja build.gradle (aplikacja)


0

To właśnie działa dla mnie. czyste, przygotuj się i uruchom.

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

mam nadzieję, że to pomoże.



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.