Esecuzione di Android Studio 3.0 non riuscita per l'attività: impossibile unire dex


87

Android Studio riceveva un errore di build durante l'esecuzione della build con quanto segue:

Errore: esecuzione non riuscita per l'attività ": app: transformDexArchiveWithExternalLibsDexMergerForDebug". java.lang.RuntimeException: java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Impossibile unire dex "

La mia app: file 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'

eventuali soluzioni

Modifica: ho finito con il campione tramite il sito github firebase e ho risolto


devi includere il supporto multiDex nella tua app
Sudheesh R

e prova a pulire, ricostruendo il tuo progetto
Sudheesh R

Ti suggerisco di modificare la tua domanda e pubblicare l'intero output della tua console Gradle, non solo quella riga. I dettagli del problema si trovano altrove nell'output.
CommonsWare

@CommonsWare ho pubblicato il mio intero errore .. solo due righe.
Anguraj

2
Prova a disabilitare l'esecuzione istantanea, ripulisci il tuo progetto e aggiungi android {defaultConfig {multiDexEnabled true}}
Tara

Risposte:


66

Per il progetto basato su Cordova, eseguire cordova clean androidprima di compilare di nuovo, come suggerito da @mkimmet .


1
Qualcuno segna bene questa risposta. Risolve il problema.
pamekar

2
Per me, l'installazione di 'cordova-plugin-androidx' e 'cordova-plugin-androidx-adapter' ha risolto il problema
SSZ

58

Questo errore si verifica quando aggiungi una libreria esterna che potrebbe non essere compatibile con il tuo compileSdkVersion.

Fai attenzione quando aggiungi un file external library.

Ho trascorso 2 giorni su questo problema e finalmente è stato risolto seguendo questi passaggi.

  • Assicurati che tutte le tue librerie di supporto siano le stesse compileSdkVersiondelle tue build.gradle(Module:app)nel mio caso 26.inserisci qui la descrizione dell'immagine

  • Nella categoria defaultConfig digitare multiDexEnabled true . Questa è la parte importante.multiDexEnabled True immagine

  • Vai a File | Impostazioni | Build, esecuzione, distribuzione | Instant Run e prova ad abilitare / disabilitare Instant Run per hot swap ... e fai clic su OK Abilita Instant Run to Hot swap ... Image

  • Sync Il tuo progetto.

  • Infine, vai a Build | fare clic su Ricostruisci progetto .

  • Nota: Ricostruisci progetto prima pulisce e poi compila il progetto.


mi è utile, grazie.
Sumit Saxena

felice di sentirlo. Buon Android.
Niamatullah Bakhshi

1
@YajliMaclo fantastico!
Niamatullah Bakhshi

48

Prova ad aggiungerlo gradualmente

    android {
      defaultConfig {
        multiDexEnabled true
        }
   }

Hai provato a invalidare la cache in Android Studio? @Anguraj
Ishan Fernando,

Non è l'unico passaggio per abilitare il multidex. Inoltre non è necessario nei livelli API più recenti
OneCricketeer

25

Risoluzione:

Fare riferimento a questo collegamento : poiché sono disponibili varie opzioni per disattivare l'avviso a seconda di minSdkVersion, è impostato al di sotto di 20 :

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

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

Se hai un minSdkVersion maggiore di 20 nel tuo set build.gradle usa quanto segue per chiudere l'avviso:

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

Aggiorna le dipendenze come segue:

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

Anche in questo caso l'unica differenza sono le parole chiave nelle dipendenze:

minSdkVersion inferiore a 20: usa compile

minSdkVersion sopra 20: usa l' implementazione

  1. Spero che questo sia stato utile, per favore vota se ha risolto il tuo problema, grazie per il tuo tempo.
  2. Anche per maggiori informazioni, sul motivo per cui ciò si verifica , leggi il primo paragrafo del link, spiegherà a fondo perché? e cosa significa questo avvertimento.

24

Prova semplicemente a fare un "Build -> Clean Project". Questo ha risolto il problema per me.


5
Grazie, questo ha funzionato per me in un progetto Ionic / Cordova eseguendo cordova clean android mentre avevo anche installato il plug-in cordova-android-support-gradle-release.
mkimmet

Adoro quando qualcosa di semplice risolve le cose !! Grazie!
tonejac

Questo mi ha risolto quando lavoravo con React Native.
Michael Auderer

Grazie, è la soluzione più semplice per questo problema, ho trascorso i miei 3 giorni per risolvere questo problema e la tua risposta risolve il mio problema. Ancora una volta grazie fratello mio !!!
gautamsinh mori

Grazie. Mi ha aiutato su Android Studio 4.1. Mi ha salvato la giornata.
Atif

7

Per me, aggiungendo

multiDexEnabled true

e

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

nel file Build.gradle a livello di app ha risolto il problema


5

Vai al tuo build.gradlefile a livello di modulo e aggiungi le seguenti righe al codice

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

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

Questo ha risolto facilmente il problema. Controlla questa documentazione


4

Usa multiDexEnabled true come di seguito.

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

e

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

questa soluzione ha funzionato per me.


4

Ho provato molte soluzioni come menzionato sopra incluso il multiDexEnabled true ma nessuna di queste ha funzionato per me.

Ecco la soluzione che ha funzionato per me: copia questo codice nel file 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}"
        }
    }
}

Assicurati di eseguire gradlew clean prima di eseguire il codice


1
Ho cambiato minSdkVersion, è sufficiente
Mr Special

2

La stessa cosa è successa a me, ho capito che stavo aggiornando a AS 3.0.1 e dopo aver eseguito l'aggiornamento, pulito e ricostruito l'app, tutto è stato risolto.


2

Per me ciò che ha risolto questo errore è stato la modifica di una riga nelle dipendenze gradle della mia app.

da questo :

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

A questo :

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

Solo quello ha funzionato per me. Non avevo bisogno di aggiungere force = true
Paulo Linhares - Packapps

1

Assicurati inoltre che la tua app stia sottoclasse MultiDexApplication

import android.support.multidex.MultiDexApplication

class App : MultiDexApplication()

oppure, se non si crea una sottoclasse di classe Application, aggiungere ad AndroidManifest.xml

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

0

Ti trovi tra gli aggiornamenti dell'SDK o della piattaforma? Se sì, completali completamente e poi prova a continuare. Normalmente aggiorno i singoli pacchetti che devono essere aggiornati per prendere l'intero aggiornamento che a volte potrebbe arrivare a 2,5 GB. L'esecuzione di questo aggiornamento completo a volte non riesce. Dopo aver eseguito l'aggiornamento ad Android Studio 3.0, ho ricevuto numerosi aggiornamenti SDK e ho ricevuto l'errore precedente poiché tutti i pacchetti non erano stati aggiornati. Dopo aver aggiornato tutti i pacchetti, l'errore precedente era scomparso.


Spero che tu abbia cancellato o invalidato la cache e riavviato Android Studio? Per me Android Studio 3 sembra difettoso rispetto alle versioni precedenti.
Vineet Jain

qualcuno lo ha mai aggiustato? non riesco a superarlo!
68060

0

Nel mio caso la modifica della versione della libreria Firebase da 2.6.0 a 2.4.2 ha risolto il problema


0

Per me, il problema era l'uso di Java 1.8 in un modulo, ma non nel modulo dell'app. L'ho aggiunto alla build dell'app gradle e ho lavorato:

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

0

Stesso problema. Ho abilitato multidex: defaultConfig {applicationId "xxx.xxx.xxxx" minSdkVersion 24 targetSdkVersion 26 multiDexEnabled true

Ho svuotato la cache, eseguito gradle clean, rebuild, make, provato ad assicurarmi che non ci fossero conflitti nelle librerie importate (rimosse tutte le dipendenze transitive) e fatto tutti gli aggiornamenti. Ancora:

Errore: esecuzione non riuscita per l'attività ": app: transformDexArchiveWithExternalLibsDexMergerForDebug". java.lang.RuntimeException: com.android.builder.dexing.DexArchiveMergerException: impossibile unire dex

Si scopre che alla build non piaceva: implementazione "org.slf4j: slf4j-android: 1.7.21"


0

Quando la versione di Android Studio è 3.0.1, Gradle Version è 4.1 e Android PluginVersion è 3.0.0, si verificherà questo problema. Quindi eseguo il downgrade della versione Gradle a 3.3, Android Android è zero, non ci sono problemi del genere.


0

Ho avuto questo quando la versione SDK richiesta non corrispondeva alle dipendenze. Puoi fare clic sulla linea evidenziata e risolvere il problema facendo clic sulla lampadina a luce rossa. Non c'è bisogno di trovare la versione attuale, lascia che sia l'IDE a capirlo per te. E aggiungi il repository Google a Maven config.


0

Stavo ricevendo lo stesso errore e nel mio file caso l'errore è stato risolto quando ho corretto un errore di build associato a una variante di build diversa da quella che stavo attualmente costruendo.

Stavo costruendo la variante di build che stavo guardando bene senza errori, ma il tentativo di eseguire il debug ha causato un app:transformDexArchiveWithExternalLibsDexMergerForDebugerrore. Dopo essere passato alla creazione dell'altra variante di build, ho rilevato il mio errore nel processo di compilazione e l'ho risolto. Questo sembrava risolvere il mio app:transformDexArchiveWithExternalLibsDexMergerForDebugproblema per tutte le varianti di build.

Si noti che questo errore non era all'interno del modulo esterno a cui si fa riferimento ma all'interno di un set di sorgenti distinto di una variante di build che faceva riferimento a un modulo esterno. Spero che sia utile a qualcuno che potrebbe vedere il mio stesso caso!


0

Ho fatto e risolto questo problema semplicemente eseguendo questi lavori nel mio codice

Apri -> build.gradle Cambia valore da

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

per

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

0

Per rimuovere questo problema di Dex è sufficiente implementare una dipendenza. Questo problema si verifica quando utilizziamo più servizi diversi dallo stesso server. Supponiamo di utilizzare annunci e Firestore in un progetto e che entrambi abbiano un repository esperto. quindi abbiamo bisogno di chiamare dati diversi con sul repository che abbiamo bisogno della dipendenza dex da implementare. Il nuovo aggiornamento Dipendenza: -

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

Sono sicuro che risolverà il tuo problema in modo permanente


è una dipendenza metterlo in gradle
Pradeep Sheoran

0
1) Aggiungi multiDexEnabled true
2) se ricevi un errore di compilazione, controlla il tuo livello di app build.gradle se le stesse dipendenze sono implementate con versioni diverse.
3) Rimuovine uno se trovi le stesse dipendenze.

android {compileSdkVersion 28 defaultConfig {

    minSdkVersion 17
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    multiDexEnabled true
}
spero che funzioni bene :) Happy Coding

0

Il modo più semplice per evitare il tipo di errore di succhiamento è:

-Cambia la libreria combilesdkversion come la tua app compilesdkversion

-Cambia la versione supportLibrary della libreria come la tua build.gradle (app)


0

Questo è ciò che funziona per me. pulito, prepara e corri.

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

spero che sia d'aiuto.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.