2015-09-22 12 views
5

Sto cercando di usare il mio AAR-libreria (un progetto Maven, costruito con la android-maven-plugin da Jayway) in un progetto Gradle ma, quando corro gradle assembleDebug, sto avendo la seguente eccezione:Gradle Android Eccezione: "Più file DEX definiscono", le classi duplicato sotto esplosa-AAR

UNEXPECTED TOP-LEVEL EXCEPTION: 
com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/actions/ItemListIntents; 
at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 
at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 
at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) 
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:502) 
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:334) 
at com.android.dx.command.dexer.Main.run(Main.java:277) 
at com.android.dx.command.dexer.Main.main(Main.java:245) 
at com.android.dx.command.Main.main(Main.java:106) 

Se cerco quella classe nel mio progetto, Android Studio trova due risultati:

  • ListItemIntents (com.google.android.gms.action) play-services-base-7.0.0(classes.jar)
  • ListItemIntents (com.google.android.gms.action) aar-library(classes.jar)

esecuzione dell'ispezione gradle dependencyInsight --dependency play-services-base --configuration compile ottengo:

com.google.android.gms:play-services-base:7.0.0 
+--- com.google.android.gms:play-services-gcm:7.0.0 
| \--- aar-library:core:1.0.10-SNAPSHOT 
|   \--- compile     
+--- com.google.android.gms:play-services-location:7.0.0 
| \--- com.nexse.mobile.betting.core:core:1.0.10-SNAPSHOT (*) 
\--- com.google.android.gms:play-services-maps:7.0.0 
    \--- com.google.android.gms:play-services-location:7.0.0 (*) 

(*) - dependencies omitted (listed previously) 

Il problema è in AAR-bibliotecaclasses.jar: ListIntentIntents (e, ovviamente, l'intero play-servizi- modulo base) è già lì! Così all'interno

my-gradle-project/app/build/intermediates/exploded-aar/ 

Ho due riferimenti di modulo play-servizi-base: una sotto cartella com.google.android.gms, una sotto cartella aar-library

Cosa devo fare?

risposta

1

Ho trovato il colpevole! Stavo usando il vecchio esperto di Android Plugincom.jayway.maven.plugins.android.generation2

Il nuovo com.simpligility.maven.plugins corretto l'errore.

Comunque grazie per l'aiuto.

0

Puoi provare compreso multidex consentire una vera nel file Gradle come segue:

android { 
compileSdkVersion 22 
buildToolsVersion "23.0.0" 

    defaultConfig { 
     minSdkVersion 14 //lower than 14 doesn't support multidex 
     targetSdkVersion 22 

     // Enabling multidex support. 
     multiDexEnabled true 
    } 
} 
+2

Prima di tutto grazie per la risposta. Ciò non sembra funzionare: ': app: packageAllDebugClassesForMultiDex FALLITO errore: Esecuzione non riuscita per l'attività ': app: packageAllDebugClassesForMultiDex'. > java.util.zip.ZipException: voce duplicata: com/google/android/gms/actions/ItemListIntents.class' Tuttavia, la mia app ha 8 come minSdkVersion, quindi preferirei non seguire quel percorso. –

0

If the number of method references in your app exceeds the 65K limit, your app may fail to compile. You may be able to mitigate this problem when compiling your app by specifying only the specific Google Play services APIs your app uses, instead of all of them.

dichiarazioni di cui sopra sono tratti da https://developers.google.com/android/guides/setup.

Primo: Cliccare sulla Clean Project da Build voce nella barra dei menu (Android Studio).

Secondo: Provare ad aggiungere dipendenze individuali. Esempio Se si desidera utilizzare solo i servizi di localizzazione, aggiungere solo compile 'com.google.android.gms:play-services-location:7.8.0' nel numero build.gradle.

Problemi correlati