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
android
android-studio-3.0
build-error
Anguraj
źródło
źródło
Odpowiedzi:
W przypadku projektu opartego na Cordova uruchom
cordova clean android
ponownie przed kompilacją, zgodnie z sugestią @mkimmet .źródło
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
compileSdkVersion
na swojebuild.gradle(Module:app)
w moim przypadku jest to26
.W kategorii defaultConfig wpisz multiDexEnabled true . To jest ważna część.
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
Sync
Twój projekt.Na koniec przejdź do kompilacji | kliknij Rebuild Project .
Uwaga: Odbuduj projekt najpierw czyści, a następnie buduje projekt.
źródło
Spróbuj dodać to w gradle
android { defaultConfig { multiDexEnabled true } }
źródło
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
źródło
Po prostu spróbuj wykonać „Kompiluj -> Wyczyść projekt”. To rozwiązało problem.
źródło
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
źródło
Przejdź do
build.gradle
pliku na poziomie modułu i dodaj następujące wiersze do kodudefaultConfig { ... minSdkVersion 15 targetSdkVersion 28 multiDexEnabled true } ... } dependencies { implementation 'com.android.support:multidex:1.0.3' }
To łatwo rozwiązało problem. Sprawdź tę dokumentację
źródło
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.
źródło
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
źródło
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.
źródło
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 }
źródło
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"
źródło
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ął.
źródło
W moim przypadku zmiana wersji biblioteki Firebase z 2.6.0 na 2.4.2 rozwiązała problem
źródło
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 }
źródło
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:
Okazuje się, że kompilacja się nie spodobała: implementacja „org.slf4j: slf4j-android: 1.7.21”
źródło
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.
źródło
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.
źródło
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:transformDexArchiveWithExternalLibsDexMergerForDebug
błą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ójapp:transformDexArchiveWithExternalLibsDexMergerForDebug
problem 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!
źródło
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'
źródło
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
źródło
android {compileSdkVersion 28 defaultConfig {
minSdkVersion 17 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" multiDexEnabled true }
źródło
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)
źródło
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.
źródło
U mnie też pojawił się podobny błąd.
Główną główną przyczyną tego problemu jest to, że funkcja MultiDex nie jest włączona. Więc w Projekcie / android / app / build.gradle , umożliwiają multiDex
Więcej informacji można znaleźć w dokumentacji: https://developer.android.com/studio/build/multidex#mdex-gradle
źródło
Na razie zawsze możesz powrócić do DX za pomocą tego ustawienia w
gradle.properties
pliku projektu :android.enableD8=false
Więcej informacji można znaleźć pod adresem https://android-developers.googleblog.com/2018/04/android-studio-switching-to-d8-dexer.html
źródło