17

So che più problemi di dex sono stati segnalati molte volte prima, ma nessuna delle soluzioni sembra funzionare nel mio caso.Impossibile eseguire dex: più file dex definiscono Lbolts/AggregateException

Console:

Unable to execute dex: Multiple dex files define Lbolts/AggregateException; 
    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lbolts/AggregateException; 

Una delle soluzioni popolari è Smarcare contenitore 'biblioteche private Android' dal buildpath. Non posso farlo perché ci sono altre librerie in quel contenitore di cui ho bisogno.

Un'altra soluzione è la rimozione di qualsiasi libreria duplicata esplicitamente aggiunta nel formato .jar. Non ho queste librerie.

La biblioteca duplicato nel mio caso è: android-support-v7-appcompat.jar ce l'ho (fatto riferimento diretto dalla cartella SDK) in questi due contenitori:

1.) Android private biblioteche

2.) Android Dipendenze

Il problema è che non riesco a deselezionare nessuno di questi due contenitori completamente, perché entrambi contengono altre librerie necessarie. Ma non riesco neanche a rimuovere solo questo file .jar duplicato da entrambi i contenitori.

MODIFICA: N.B. Quando aggiungo il progetto di libreria android-support-v7-appcompat al mio progetto, entra in entrambi i contenitori. Ci deve essere un modo in modo che entri in uno solo.

Qualcuno può aiutarmi come posso farlo?

screenshot

screenshot2 (unable to delete)

+0

prega controlla che tutte le tue dipendenze non includano già android-support-v7-appcompat.jar. Inoltre, è possibile vedere sulla vista ad albero sulla sinistra dello screenshot che ci sono due elementi di supporto per Android-v7. – chteuchteu

+0

me ne rendo conto già. il problema è che non riesco a rimuovere quel file jar duplicato da entrambi i contenitori. l'unica opzione che ottengo è rimuovere l'intero contenitore (dipendenze Android o librerie private Android) Se si intende che dovrei eliminarne uno dalla cartella dexedLibs, ciò non aiuta. Riappariranno la prossima volta che compilo. Sono i bytecode eseguibili –

+1

"Ma non riesco neanche a rimuovere solo questo file .jar duplicato da entrambi i contenitori." Perchè questo? Hai provato a rimuoverlo da entrambi i contenitori e ad aggiungerlo al di fuori di essi come una libreria separata? – chteuchteu

risposta

21

risolto QUALCHE MODO

bolts-android biblioteca era il vero problema qui. C'erano due diverse versioni causando un conflitto. La libreria FacebookSDK porta bolts-android-1.1.2 e android-support-v7-appcompat porta bolts-android-1.1.4.

Contenitore di librerie private Android senza contrassegni nel progetto di libreria FacebookSDK, che conteneva bolts-android-1.1.2. Di conseguenza, il mio progetto ora aveva solo una versione, bolts-android-1.1.4, che stabiliva il conflitto. Funziona bene ora.

Inoltre, le voci duplicate android-support-v7-appcompat non costituivano un problema.

+0

Sì, ho trovato la versione non corrispondente abbastanza sospetta, ma cosa intendi per deselezionare .. Vuoi dire rimuovere dal percorso di costruzione? – reubenjohn

+0

Sì. Ma sai cosa ... devo smarcarlo OGNI VOLTA io apro eclipse.:/Non ho ancora finanziato la soluzione a questo:/penso che sia un bug di eclissi o qualcosa –

+2

Eliminazione di bulloni: le librerie di supporto Android e Android dal progetto principale hanno funzionato per me. :) – vinesh

7

l'ho incontrato di recente sul mio progetto nativo reattivo, puoi andare alla tua cartella Android del tuo progetto. e nel terminale premi questo comando "./gradlew app: dependencies" per vedere l'albero delle dipendenze. ho trovato due pacchetti per i bulloni di Android sotto Facebook sdk. se si esclude questo pacchetto da Facebook sdk le cose funzioneranno di nuovo bene

compile ('com.facebook.react:react-native:+') { 
    exclude group: 'com.parse.bolts', module: 'bolts-tasks' 
} 
+1

Grazie Hasan, il mio problema è lo stesso ma con pacchetti diversi di dome Sembra che i nativi reattivi usino una versione di dipendenza diversa su ' react-native-firebase-analytics 'e' react-native-fcm 'e questo diverso fanno fallire dexDebug sul mio progetto.Un'uso di alcuni' dexOptions 'come' preDexLibraries 'è molto utile per trovare che il pacchetto ha una versione duplicata. per cambiare la versione di questo pacchetto in package.json in qualcosa che corrisponde in gradle run invece di escludere alcuni pacchetti nell'app principale build.gradle. –

0

come la versione del reagente è stata aggiornata a 0,31.0, quando si desidera integrare com.facebook.fresco:animated-gif:0.10.0 che ha com.parse.bolts ha bene, si può fare in questo modo:

compile ('com.facebook.react:react-native:+') { 
    exclude group: 'com.parse.bolts', module: 'bolts-tasks' 
} 
compile ('com.facebook.fresco:animated-gif:0.10.0'){ 
    exclude group: 'com.parse.bolts', module: 'bolts-tasks' 
} 
2

Questo può accadere quando si aggiungono Facebook SDK per Android, è possibile risolvere con:

compile ("com.facebook.android:facebook-android-sdk:4.1.0") { 
    exclude group: 'com.parse.bolts', module: 'bolts-android' 
}