Nie można scalić dex


307

Mam Android Studio Beta. Utworzyłem nowy projekt z kompilacją moich starych modułów, ale kiedy próbowałem uruchomić aplikację, nie uruchomił się z komunikatem:

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

com.android.builder.dexing.DexArchiveMergerException: Nie można scalić dex

Ale nie wiem jak rozwiązać ten błąd. Przeglądałem to przez wiele godzin, ale bez powodzenia.

Stopień mojego projektu:

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

Stopień mojej aplikacji:

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


}

I moja ocena modułu:

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

}

Mój drugi moduł:

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

____________odkrycie_________

Gdy nie zaimportowałem drugiego modułu (parsera), aplikacja nie uległa awarii w systemie dex, ale gdy moduł nie został zaimportowany, aplikacja nie działała. : D: D


6
Jeśli ktoś ma ten sam problem w stabilnej wersji Androida Studio 3.0, zdecydowanie polecam przejrzenie odpowiedzi stackoverflow.com/questions/46949761/... i sprawdzenie, czy może ci pomóc.
Bhavesh Patadiya

1
Miałem ten sam problem i postępowałem zgodnie z każdą metodą wymienioną na tej stronie, ale nie pomogło mi to, więc idę do klasy i przytrzymuję kursor w każdej bibliotece, aby sprawdzić, czy ich nowa wersja jest dostępna, czy nie. tych, którzy mają nową wersję, więc zaktualizowałem, zsynchronizowałem gradle i uruchomię. zadziałało.
Shahzad Afridi

Odpowiedzi:


293

Miałem ten sam problem podczas aktualizacji z com.google.android.gms:play-services:11.2.2do com.google.android.gms:play-services:11.4.0. To rozwiązało dla mnie:

  1. czysty
  2. odbudować

Dzięki temu rozwiązaniu opóźniasz tylko prawdziwy problem. prawdopodobnie wersja 11.4.0 zawiera mniej metod. Zobacz moją odpowiedź poniżej. dostaniesz ten błąd w następnej zależności, którą dodasz, myślę
itzhar,

2
To rozwiązuje mój problem, w którym multiDexEnabled truesam tego nie zrobił
Yuri Brigance

28
ta sama isse z com.google.android.gms: play-services-location: 11.6.0 ... to nie jest poprawne rozwiązanie
issamux

3
To rozwiązanie działało dla mnie, gdy miałem problem ze zgodnością przy użyciu bibliotek Google Analytics. W widoku AS w okienku nawigatora projektu Android jako „Projekt” powinieneś zobaczyć „Biblioteki zewnętrzne”, jeśli rozszerzysz biblioteki zewnętrzne, zobaczysz wszystkie słoiki i moduły użyte do skompilowania projektu. Powinno to pomóc w zidentyfikowaniu niezgodnych kombinacji modułów.
angryITguy,

3
Jeśli powyższy kod nie działa w przypadku „compileSdkVersion 26”, spróbuj tego .. przejdź do - build.gradle (Module: app) - dodaj „multiDexEnabled true” w kategorii defaultConfig i ostatni krok Przejdź do pliku | Ustawienia | Kompilacja, wykonanie, wdrożenie | Natychmiastowy bieg i spróbuj włączyć / wyłączyć
Sumit Saxena

325

Próbowałem wszystkich powyższych i żadna z nich nie pomaga. wreszcie znajduję dla mnie tę pracę:

app / build.gradle:

android {
    defaultConfig {
       multiDexEnabled true
    }
}

11
Dzięki. Myślę, że problem polegał na tym, że większość odpowiedzi nie uwzględnia plików JAR z innych źródeł, których nie można odbudować. Wydaje się, że multiDex pozwala na połączenie niekompatybilnego kodu.
Brendon Whateley

2
To rozwiązanie działało dla mnie, ale dodatkowo musiałem jawnie włączyć multidex dla API <= 21 developer.android.com/studio/build/multidex.html
hamou92

2
Pomimo tego, że jest bardziej trafna niż zaakceptowana odpowiedź, wciąż pojawia się komunikat „Nie można scalić dex”
John

13
Nie działało dla mnie. Po tej zmianie otrzymałem inny błąd: wykonanie nie powiodło się dla zadania ': app: transformClassesWithMultidexlistForDebug
Atul

1
Tak, przez 5 godzin mieszkałem z zupełnie innymi odpowiedziami. Ale jakoś zdałem sobie sprawę, że to problem Multidex i wylądowałem tutaj. Byłem prawdą Dzięki stary
sud007

59

Zwróć uwagę na ostrzeżenia!

Czasami wystarczy usunąć ostrzeżenia, a błąd zniknie automatycznie. Zobacz poniżej przypadek specjalny:


Miałem te dwie zależności w moim build.gradlepliku na poziomie modułu :

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

i Studio ostrzegało ( oprócz problemu scalenia dex ):

Wszystkie com.android.supportbiblioteki muszą używać dokładnie tej samej specyfikacji wersji (mieszanie wersji może prowadzić do awarii środowiska wykonawczego). Znaleziono wersje 27.0.2, 21.0.3. Przykłady obejmują com.android.support:animated-vector-drawable:27.0.2icom.android.support:support-v4:21.0.3

Więc wyraźnie określiłem wersjęcom.android.support:support-v4 (zobacz tutaj, aby poznać szczegóły) i oba problemy (ostrzeżenie i ten związany z scalaniem dex) rozwiązane :

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'

Zobacz poniżej komentarze dotyczące innych podobnych sytuacji.


1
Dziękuję, to rozwiązało problem. Pierwotnie było to spowodowane dodaniem eu.inloop: androidviewmodel: 1.3.4
lsrom

1
Dokładnie, chciałbym tylko, żeby błąd mógł być bardziej precyzyjny
Amin Keshavarzian

1
Wielkie dzięki. Miałem ten sam problem. Używałem wersji 26, zaktualizowanej do SDK 27 i rozwiązałem problem.
Johnny

2
To powinna być poprawna odpowiedź. Moje kompilacje przestały działać po dodaniu jednej biblioteki (airbnb / epoxy), która była zależna support:design:26.1.0, a ja nie miałem jeszcze tej zależności. Moje inne wersje obsługi bibliotek miały wersję 27.1.0. Po dodaniu support:designzależności od 27.1.0wersji mój problem został rozwiązany.
alashow 18.03.18

2
Dziękuję Ci. Ratujesz mój dzień.
Nithinjith

37

W moim przypadku niestety rozwiązania Michela ani Suragcha nie zadziałały.

Rozwiązałem ten problem, wykonując następujące czynności:

W Gradle: 3,0 kompilacji konfiguracja jest teraz przestarzała i powinna zostać zastąpiona przez realizację lub API . Aby uzyskać więcej informacji, możesz przeczytać tutaj. Możesz przeczytać oficjalne dokumenty w Gradle Build Tool

Konfiguracja kompilacji nadal istnieje, ale nie należy jej używać, ponieważ nie będzie ona zapewniać gwarancji, jakie zapewniają interfejs API i konfiguracje implementacji.

lepiej jest użyć implementacji lub interfejsu API zamiast kompilować

wystarczy zastąpić kompilację z implementacją , debugCompile z debugImplementation , testCompile z testImplementation i androidtestcompile z androidTestImplementation

Na przykład: Zamiast tego

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'

używać w ten sposób

implementation 'com.android.support:appcompat-v7:26.0.2'
implementation 'com.android.support:support-v4:26.1.0'
implementation 'com.github.bumptech.glide:glide:4.0.0'

Po tym

  • Usuń folder .gradle w swoim projekcie (zwróć uwagę, że aby zobaczyć .gradle, musisz przejść do widoku „Projekt” w nawigatorze w lewym górnym rogu)
  • Usuń wszystkie foldery kompilacji i pamięć podręczną stopni.
  • W menu kompilacji naciśnij Wyczyść projekt .
  • Po zakończeniu zadania naciśnij przycisk Przebuduj projekt z menu Kompilacja.

Mam nadzieję, że to pomoże!


2
Dzięki wszystko, co musiałem zrobić, to zmienić kompilację na implementację i została ona zbudowana pomyślnie, nie musiałem wykonywać innych kroków.
Kompilacja

2
Pracował dla mnie - wgląd w dlaczego?
Alex

1
Folder do usunięcia powinien być .gradlei nie./gradle
Gary Bak

1
Jedyną odpowiedzią, która naprawdę dla mnie zadziałała. Dzięki!
Michael Richardson

1
Dzięki, to najfajniejsza odpowiedź. Powinien być na górze wyszukiwania. Pracował dla mnie.
Niebezpieczeństwo

27
  1. Usuń .gradlekatalog.

  2. Uruchom ponownie aplikację.

Notatki

  • .gradleKatalog jest w folderze głównym twojego projektu. (Być może najpierw będziesz musiał pokazać ukryte pliki.)
  • Muszę to robić za każdym razem, gdy aktualizuję moduł zależności za pomocą Androida 3.0. (Wydaje się, że nowsze wersje Androida Studio 3 rozwiązały problem).

4
pomogło mi to, gdy wykonałem również unieważnienie pamięci podręcznej i uruchomiłem ponownie
Vasili Fedotov

Byłem z niedowierzaniem, kiedy to rozwiązało mój problem .. próbowałem zaktualizować wszystko, usunąć wszystkie słowa kluczowe kompilacji, zaktualizować kilka podejrzanych wersji ILB .. kiedy w końcu to zrobiłem, zadziałało ...
hanzolo

Uratowałeś mi życie! Dzięki
Masterfego

24

Usunięcie .gradlewedług sugestii Suragcha nie było dla mnie wystarczające. Dodatkowo musiałem wykonać Build > Clean Project.

Pamiętaj, że aby zobaczyć .gradle, musisz przejść do widoku „Projekt” w nawigatorze w lewym górnym rogu:

Przejdź do widoku projektu


23

Próbowałem każdego innego rozwiązania, ale dla mnie nikt nie działał. Na koniec rozwiązałem go za pomocą tej samej wersji zależności, edytującbuild.gradle . Myślę, że ten problem występuje, gdy dodaje się bibliotekę do klasy, która korzysta z różnych wersji pomocy technicznej lub bibliotek Google.

Dodaj następujący kod do pliku oceny kompilacji. Następnie cleani rebuildprojektuj.

ps: to było dla mnie stare rozwiązanie, więc powinieneś użyć zaktualizowanej wersji następujących bibliotek.

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

5
wypróbowałem wszystkie inne rozwiązania, w końcu tylko to pomogło: /
Ante

@Ali Gurelli Dziękuję bardzo, próbowałem wielu rozwiązań, ale tylko ta działała.
Bipin Bharti

Dzięki, ale dla mnie używam szczegółów wersji. UseVersion '15 .0.0 '
Elsunhoty

Dzięki za rozwiązanie. Ten sam problem przytrafił mi się. Google dotknij i zapłać było 10.0.0, a reszta wszystkich bibliotek jest w najnowszej wersji
R World


14

jeśli (1. Spróbuj wyczyścić i odbudować pracę), to dobrze

w przeciwnym razie, jeśli (2. Spróbuj usunąć pracę stopniową), to dobrze

else-> 3. Spróbuj dodać w grade.properties

android.enableD8 = false

else-> 4. Dodaj multiDexEnabled true do swojego build.gradle

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

i dodaj zależność

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

Może pierwszy działa dla ciebie i tak dalej, ale tak naprawdę na przykład zależy od natury twojego problemu

Wystąpił błąd po dodaniu tej biblioteki

implementation 'com.jjoe64:graphview:4.2.2'

a później odkryłem, że muszę to sprawdzić i muszę dodać tę samą wersję bibliotek obsługi. Więc muszę wypróbować inną wersję

compile 'com.jjoe64:graphview:4.2.1'

i to rozwiązuje problem. Zwróć więc na to uwagę.


3
Najbardziej przydatny sposób na rozwiązanie tego problemu. Chciałbym tutaj wspomnieć, że możesz użyć „aplikacji gradlew: transformDexArchiveWithExternalLibsDexMergerForDebug --stacktrace” cmd, aby uzyskać więcej informacji. Zapisuję mnie, ale muszę włączyć multideks. Mam nadzieję, że pomocna.
panda

13

W moim przypadku problem polegał na bibliotece pokoju:

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

Zmiana na:

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

pracował


Dziękuję bardzo, to mi bardzo pomogło!
Phil

Cieszę się, że znalazłem tę odpowiedź. Dzięki!
callOfCode

12

Aby dodać do powyższych rozwiązań:

Upewnij się, że nie masz zduplikowanych zależności wskazujących na różne ich wersje, w wielu miejscach (lub nawet w tym samym pliku).


Myślę, że należy to najpierw sprawdzić przed dodaniem wartości true dla multiDexEnabled i wypróbowaniem innych odpowiedzi. Dzięki!
Aleksandr A

11

Cześć Mam ten sam problem, wypróbowałem prawie wszystko. Tak więc ostatecznie rozwiązałem po 6 godzinach walki debugując wszystko wiersz po wierszu.

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

Usługi Google 3.0 Nie obsługuje firebase w Studio 3.0 z playServiceVersion: 11.6.0 lub mniejszą.

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"

Rozwiązanie :

Mam zmienić usługi Google na

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

I obsługuje usługi firebase.

Mam nadzieję, że ktoś zaoszczędzi swój czas.


1
Mam ten sam problem, którego używałem playServiceVersion jako implementację 11.4.0 „com.google.firebase: firebase-core: 11.4.0„ zmień na implementację ”com.google.firebase: firebase-core: 11.6.2” naprawiłem mój kwestia . Więc proszę sprawdź zależność wersji dla różnych bibliotek
durgeshtrivedi

9
  1. Włączyć

    defaultConfig {multiDexEnabled true}

  2. Jeśli krok 1 nie działa, to

    Przejdź do struktury projektu i znajdź bibliotekę zewnętrzną, która używa innej wersji. Kliknij go dwukrotnie i usuń plik jar. Zamknij projekt i otwórz ponownie Android Studio przebuduje projekt. Problem powinien zniknąć.


+1 - miałem wsparcie lib, rxjava i zależność od strony trzeciej (13 000 linii). Moje oczy prawie wyskoczyły, gdy zobaczyłem, że metoda się liczy.
snodnipper

6

Jedną z możliwości jest: obecność tej samej biblioteki, ale z różnymi wersjami zależności .

Miałem ten problem z następującymi liniami w pliku gradle:

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

Biblioteka gson była w moim katalogu libs, ale w poprzedniej wersji. Usunąłem gson-2.3.1.jarz katalogu libs i wszystko wróciło do normy.


usunięcie też compile fileTree(include: ['*.jar'], dir: 'libs')naprawione dla mnie .. dzięki (y)
Dinuka Salwathura

5

Jeśli ten błąd pojawił się po włączeniu obsługi kotlin i żadne inne rozwiązanie nie działa, spróbuj zmienić zależność modułu aplikacji od kotlin build.gradlena:

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

Działa to dla mnie w Android Studio 3.0 Beta 6. Zobacz odpowiedź w celu uzyskania dalszych wyjaśnień.


Tak, wydaje się, że wprowadzenie Kotlina może zepsuć kompilację, jeśli adnotacje nie zostaną wykluczone.
Stoycho Andreev

Dzięki. To była poprawka dla mnie. Walczę 3 dni, aby zidentyfikować mój problem.
Naveen Kumar M.

Spróbuj uaktualnić do wtyczki Kotlin w wersji 1.2.30 (właśnie wydanej). Teraz Instant Run może być ponownie włączony!
KTCO,


5

[NIE MOŻNA POŁĄCZYĆ DEX SOLVED] Po godzinach przepełnienia stosu rozwiązałem problem „NIE MOŻNA POŁĄCZYĆ BŁĘDU DEX”

  1. Zaktualizuj wszystkie linie com.android.support w swojej klasie do wersji 27.1.0

Przyczyna - Android zaktualizował biblioteki obsługi do wersji 27.1.0, więc musisz zmienić wszystkie linie pomocy Androida w pliku ocen na 27.1.0 z 26.1.0

  1. Upewnij się, że sekcja repozytoriów zawiera sekcję maven z punktem końcowym „ https://maven.google.com ”. Na przykład:

    allprojects {repositories {jcenter () maven {url " https://maven.google.com "}}}

Przyczyna: - Android nie może zaktualizować bibliotek obsługi w menedżerze SDK, a teraz używa aktualizacji maven.google.com, więc musisz to uwzględnić, aby korzystać z bibliotek wsparcia 27.1.0

Po zmianie wersji: 1. Wyczyść projekt 2. Przebuduj projekt


4

dodaj polecenia poniżej:

android {
...

    dexOptions {

        jumboMode true
        javaMaxHeapSize "4g"

    }
}

4

Instalowanie usług Google Play (najnowsza wersja) + włącznie

android {
    defaultConfig {
        multiDexEnabled true
        }
}

w build.gradle rozwiązałem problem, upewnij się, że wyczyściłem i odbudowałem projekt!


3

W moim przypadku był to gson-2.8.1.jar, który dodałem do folderu libs projektu. Ale referencja była już tam przez SDK. Nie było więc konieczne dodawanie gson-2.8.1.jar do folderu libs.

Kiedy go wyjąłem, projekt gson-2.8.1.jar kompiluje się bez tego błędu przewodowego.

Więc spróbuj zmienić folder libs i zależności .


3

Zgadzam się z Chrisem-Jr. Jeśli używasz Firebase do osadzania reklam AdMob (lub nawet jeśli nie jesteś), usługi analityczne Play obejmują reklamy usług Play, nawet jeśli nie dodajesz tego jako zależności. Google oczywiście popełniło błąd przy wdrażaniu wersji 11.4.0, ponieważ dane analityczne obejmują wersję reklam 10.0.1, a nie 11.4.0 (pokazuje to wskaźnik myszy nad wskazówką w gradiencie).

Ręcznie dodałem kompilację „com.google.android.gms: play-services-ads: 11.4.0” u góry, która działała, ale dopiero po wyłączeniu Instant Run: http://stackoverflow.com/a/35169716/530047

Więc albo cofnij się do 10.0.1, albo dodaj reklamy i wyłącz Natychmiastowe uruchamianie. To właśnie znalazłem, jeśli to pomaga.


Czy OP wspomniało o usługach Play?
IgorGanapolsky

Odpowiedź została potwierdzona. Jeśli ten problem pojawia się bez tego scenariusza, to nie wiem!
Jonathan

2

Napotkałem ten sam problem i znalazłem prawdziwy powód mojej sprawy. Wcześniej próbowałem również wszystkie poprzednie odpowiedzi, ale to nie rozwiązało problemu. Mam dwa moduły w moim projekcie aplikacji do noszenia i build.gradle w następujący sposób :

zużycie build.gradle modułu:

implementation project(':common')
implementation files('libs/farmer-motion-1.0.jar')

wspólny moduł build.gradle:

implementation files('libs/farmer-motion-1.0.jar')

Przed uaktualnieniem do klasy 3.x wszystkie „wdrożenia” są „kompilowane”.

Korzystam z gradlew z opcją --stacktrace, aby uzyskać ślad stosu, możesz po prostu kliknąć to w oknie konsoli gradle, gdy pojawi się ten problem. I stwierdził, że zależność od pakietu jar powtórzyła się:

Caused by: com.android.dex.DexException: Multiple dex files define Lcom/farmer/motion/common/data/pojo/SportSummary$2;

Class SportSummary w pakiecie farmer-motion-1.0.jar, po przeczytaniu oficjalnego przewodnika po migracji , zmieniłem mój build.gradle na:

zużycie build.gradle modułu:

implementation project(':common')
// delete dependency implementation files('libs/farmer-motion-1.0.jar')

common module 的 build.gradle:

api files('libs/farmer-motion-1.0.jar') // change implementation to api

Teraz moduł zużycia będzie zależny od eksportu farmer-motion-1.0.jar przez wspólny moduł. Jeśli podczas działania nie ma zależności od pakietu jar , zależność pakietu jar od implementacji można również zmienić na „compileOnly” .


2

Miałem też problem.

Byłem w stanie rozwiązać, zmieniając compileSdkVersioni targetSdkVersiondo najnowszej wersji.


2

Do naszego projektu przypadkowo dodaliśmy dwa razy ten sam słoik o innej nazwie. Usunięcie jednego z nich rozwiązało problem.


To rozwiązało mój problem. Budowałem wewnętrzny projekt biblioteki Androida i pod jego libsfolderem miałem dwa pliki jar, z których jeden jest tylko kopią zapasową drugiego, ale pod inną nazwą.
hopia

2

To może nie być twój problem, ale dostałem ten błąd, gdy przypadkowo włączyłem dwie identyczne (ale o różnych nazwach) biblioteki do sekcji zależności {} projektu.


1

Dla mnie była to aktualizacja wiadomości firebase w app \ build.gradle:

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

do

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

1

Jedna z możliwych przyczyn: zduplikowane przejściowe zależności, które nie zostały poprawnie obsłużone przez import projektów wielomodułowych do Android Studio. Sprawdź swoją listę i usuń je. Dla mnie poprawka była dosłownie następująca:

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

1

Znajduję przyczynę tego problemu w moim projekcie. Dodano dwukrotnie jedną zależność w build.gradle . Raz, dodając zależność i raz, dodając zależność od jar:

kompiluj 'org.achartengine: achartengine: 1.2.0'
...
pliki implementacyjne („../ achartengine-1.2.0.jar”)

po usunięciu pierwszego problemu rozwiązany problem.


1

Jeśli najlepsze odpowiedzi nie zadziałały, problem może dotyczyć wielu zależności zależnych od tej samej biblioteki.

Oto kilka wskazówek dotyczących debugowania. W tym przykładowym kodzie com.google.code.findbugs:jsr305:3.0.0znajduje się biblioteka obrażająca.

Zawsze czyść i odbudowuj za każdym razem, gdy modyfikujesz, aby sprawdzić rozwiązanie!

  1. Buduj z --stacktraceflagą, aby uzyskać więcej szczegółów. Będzie narzekać na klasę, Google na tę klasę, aby znaleźć bibliotekę. Oto jak możesz skonfigurować studio Androida, aby zawsze uruchamiało gradle z --stacktraceflagą .

  2. Rzuć okiem na konsolę Gradle w Android Studio View > Tool Windows > Gradle Consolepo kompilacji

  3. Sprawdź powtarzające się zależności, uruchamiając ./gradlew -q app:dependencies. Możesz ponownie uruchomić to za każdym razem, gdy modyfikujesz build.gradle.

  4. W build.gradle

    android {
            ...
            configurations.all {
                resolutionStrategy {
                    // Force a particular version of the library 
                    // across all dependencies that have that dependency
                    force 'com.google.code.findbugs:jsr305:3.0.0'
                }
            }
    }
  5. W build.gradle

    dependencies {
        ...
        implementation('com.google.auth:google-auth-library-oauth2-http:0.6.0') {
            // Exclude the library for this particular import
            exclude group: 'com.google.code.findbugs'
        }
    }
  6. W build.gradle

    android {
        ...
        configurations.all {
            resolutionStrategy {
                // Completely exclude the library. Works for transitive
                // dependencies.
                exclude group: 'com.google.code.findbugs'
            }
        }
    }
  7. Jeśli niektóre z twoich zależności znajdują się w plikach jar, otwórz pliki jar i sprawdź, czy są jakieś sprzeczne nazwy klas. Jeśli tak, prawdopodobnie będziesz musiał odbudować słoiki z nowymi nazwami klas lub zajrzeć w cienie .

Trochę więcej czytania w tle:


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

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

2
Czy mógłbyś opracować?
sg7

Miałem również ten sam problem, ale zdałem sobie sprawę, że w tym momencie rozwiązałem mój problem, ale w przyszłych aktualizacjach rzeczy mogą się zmienić.
Eben Watts

1

W moim przypadku biblioteka powoduje ten problem, biblioteka została pomyślnie dodana do projektu, ale po uruchomieniu aplikacji pokazuje mi ten błąd. Jeśli tak się stanie, możesz przejść do github i sprawdzić problemy lub zgłosić nowy problem. Jeśli nie znajdziesz żadnego rozwiązania dotyczącego biblioteki, sugeruję zastąpienie go.

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.