Più file dex definiscono Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat


212

Se corro gradle assembleDebugdalla riga di comando, ricevo improvvisamente questo errore:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dx.util.DexException: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:592)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:550)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:531)
    at com.android.dx.merge.DexMerger.mergeDexBuffers(DexMerger.java:168)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:186)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:300)
    at com.android.dx.command.dexer.Main.run(Main.java:232)
    at com.android.dx.command.dexer.Main.main(Main.java:174)
    at com.android.dx.command.Main.main(Main.java:91)

Se grep per v4 vedo due file nella mia cartella di build.

Binary file build/pre-dexed/debug/support-v4-19.0.0-2ba5fdd60a6c3836b3104a863fe42897da1fa9d1.jar matches
Binary file build/pre-dexed/debug/support-v4-r7-227d905d79b23b20866531d4f700446c040a2ccb.jar matches

Il mio file gradle include solo questa libreria di supporto:

compile 'com.android.support:support-v13:19.0.0'

Sono sconcertato su come la libreria r7 sia inclusa in qualche modo. Ho corso gradle cleane appare sempre lì quando eseguo di nuovo assembleDebug.

Se grep per r7 all'interno della directory di build, lo vedo all'interno del file:

Binary file build/exploded-bundles/ComGoogleAndroidGmsPlayServices4030.aar/classes.jar matches

Se non includo v13, altre cose non vengono compilate.

Ma la v13 non include la libreria di supporto v4?

È un'incompatibilità tra il bundle AAR dei servizi di gioco e la libreria v13?

Ho preso il file gradle da gradleplease.appspot.com.

La rimozione dei servizi di gioco non lo risolve; stesso errore.

Le mie dipendenze all'interno di build.gradle:

 dependencies {


 // Google Play Services
//compile 'com.google.android.gms:play-services:4.0.30'

// Support Libraries
//compile 'com.android.support:support-v4:19.0.0'
///compile 'com.android.support:appcompat-v7:19.0.0'
//compile 'com.android.support:gridlayout-v7:19.0.0'
compile 'com.android.support:support-v13:19.0.0'
compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'
compile 'commons-codec:commons-codec:1.9'
compile 'com.madgag:markdownj-core:0.4.1'
compile 'com.wu-man:android-oauth-client:0.0.2'
compile 'com.google.http-client:google-http-client-jackson2:1.17.0-rc'
compile 'org.apache.commons:commons-lang3:3.2'
compile 'com.google.code.gson:gson:2.2.4'
}

1
Ho provato tutte le soluzioni ed è successo che non funzionavano. Quindi ho appena creato un nuovo progetto con lo stesso nome e copiato tutti i file dal vecchio progetto. E funziona benissimo ora. Spero che sia d'aiuto.
Sam003,

Ho avuto questo problema con un componente in support-v13. Dopo aver eseguito il debug e provato tutte le risposte senza risultati, ho scoperto che è stato introdotto quando ho provato a integrare kotlin nel progetto che era un progetto java esistente. Ho rimosso la libreria standard di kotlin e altre librerie di kotlin e andava bene. Proverei comunque a risolvere il problema con Kotlin, ma per ora devo lavorare. Anche qualsiasi informazione sarebbe di aiuto, adoro davvero kotlin.
clementiano,

Risposte:


304

Esegui gradle -q dependencies(o gradle -q :projectName:dependencies) per generare un rapporto sulle dipendenze. Dovresti vedere da dove r7viene, come ad esempio:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    |    \--- com.google.android:support-v4:r7
|    +--- com.commonsware.cwac:camera:0.5.4
|    \--- com.android.support:support-v4:18.0.+ -> 18.0.0
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

Quindi, utilizzare la excludedirettiva per bloccare tale dipendenza. Nel mio caso, proviene dalla mia libreria CWAC-Camera e quindi uso:

dependencies {
    compile('com.commonsware.cwac:camera-v9:0.5.4') {
      exclude module: 'support-v4'
    }

    compile 'com.android.support:support-v4:18.0.+'
}

(dove la seconda compileistruzione indica quale versione desideri effettivamente)

Ciò dovrebbe chiarire le cose, come vedrai se esegui nuovamente il rapporto sulle dipendenze:

compile - Classpath for compiling the main sources.
+--- com.commonsware.cwac:camera-v9:0.5.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.commonsware.cwac:camera:0.5.4
\--- com.android.support:support-v4:18.0.+ -> 18.0.0

3
Esiste un metodo per ispezionare / escludere i moduli dalle dipendenze .jar non disponibile su Maven? gradle dependenciessembra non segnalare le dipendenze aggiunte concompile files('libs/example.jar')
dbro il

3
Diciamo che ho due libs/*.jardipendenze con un modulo in comune, nessuna delle due è disponibile come artefatto. Un modo per eseguire un'ispezione di dipendenza / esclusione di classe simili?
Dbro,

2
@dbro: Non di cui sono a conoscenza, ma, di nuovo, non ho studiato questo punto. In realtà, uno o entrambi i file JAR sembrano impacchettati, poiché il modulo in comune dovrebbe essere preso in considerazione nel proprio JAR.
Commons War

12
./gradlew -q: projectName: dipendenze hanno funzionato per me
Defuera,

15
Suggerimento rapido per coloro che escludono un modulo da una dipendenza del modulo: devi trasformarlo compile project(':foo')in compile(project(':foo')) { exclude module: 'support-v4' }. Nota la parentesi.
espinchi,

122

Ho risolto un errore simile aggiungendo il seguente pezzo di codice al mio file build.gradle all'interno del blocco Android.

android {
    dexOptions {
        preDexLibraries = false
    }
}

4
Ha funzionato per me! C'è qualche lato negativo nel farlo in questo modo?
Barrie Galitzky,

@BarrieGalitzky Finora non ho riscontrato alcun problema
mike.tihonchik

3
Grazie amico, ha funzionato perfettamente per risolvere il problema! Ad ogni modo, penso che abbia alcuni effetti collaterali. Il compito assembleDebug è diventato 3 volte più lento!
Marino,

dexOpzioni non trovate.
Oliver Dixon,

10
Dopo aver aggiunto questo, ho ricevuto l'errore "La traduzione è stata interrotta". Immagino di provare il metodo CommonsWare.
DroidHeaven,

36

Poiché una foto vale più di mille parole

Per semplificare e velocizzare l'esecuzione di questo compito con i principianti come me. questi sono gli screenshot che mostrano la risposta pubblicata da @ edsappfactory.com che ha funzionato per me:

Per prima cosa apri la vista Gradle sul lato destro di Androidstudio, nell'elemento della tua app vai a Tasksquindi Androidquindi fai clic con il pulsante destro del mouse androidDependenciesquindi scegli Run:

passo 1

In secondo luogo vedrai qualcosa del genere:

Passo 2

Il motivo principale per cui l'ho pubblicato è che non era facile sapere dove eseguire gradleun'attività o i comandi pubblicati sopra. Quindi questo è dove eccitare anche loro.

Quindi, per eseguire il comando gradle:

Primo:

primo

Secondo:

secondo

Facile com'è.

Questo è tutto.

Grazie.


33

Inoltre, puoi vedere le tue dipendenze Android, andando nella vista Gradle di Android Studio e selezionando la destinazione "androidDependencies".

Un altro consiglio: ho riscontrato questo problema, fino a quando ho rimosso la libreria di supporto v4 dalla cartella libs sia nel progetto che nei miei progetti relativi al modulo / libreria.


3
Istruzioni più specifiche? Impossibile trovare "androidDependencies". Thx
CopperCash

Vai alla vista Gradle, quindi trova l'intestazione Tutte le attività, scorri verso il basso sul nome della tua app, quindi scorri verso il basso su ": app", troverai "AndroidDependencies" lì.
AutoM8R,

2
Dov'è la vista Gradle?
Paul Beusterien,

4
@PaulBeusterien Se guardi all'estrema destra della finestra, c'è una scheda laterale contrassegnata Grado. Fare clic per aprire una vista appuntata. AndroidDependencies è in realtà un compito
gradevole

grazie amico, ho pubblicato schermate che spiegano la tua risposta per renderlo più semplice.
MBH,

11

Ho iniziato a ricevere questo errore durante l'aggiornamento a ButterKnife 8.5.1. Nessuna delle altre risposte qui ha funzionato per me.

Ho usato gradle -q :app:dependenciesper vedere l'albero, e quindi guardato attraverso i file jar fino a quando ho trovato il conflitto. Il conflitto era che la dipendenza di butterknife da com.android.support:support-compat:25.1.0contiene una versione della classe di accessibilità e com.android.support:support-v4:23.1.1contiene anche la classe.

L'ho risolto cambiando la mia dipendenza da questo:

compile 'com.jakewharton:butterknife:8.5.1'

a questa:

compile('com.jakewharton:butterknife:8.5.1') {
    exclude module: 'support-compat'
}

Finora non sembra influenzare l'operazione di ButterKnife.

Modifica: esiste una soluzione migliore, che è stata quella di aggiornare le mie librerie di supporto Android per abbinare quelle di ButterKnife:

compile('com.android.support:appcompat-v7:25.2.0')
compile('com.android.support:design:25.2.0')
compile 'com.jakewharton:butterknife:8.5.1'

mantenere la versione di supporto identica è una soluzione semplice ed escludere il modulo non funziona per me.
Jay,

Ho risolto anche con la seconda soluzione! Stesso conflitto ma con Butter Knife versione 8.8.1 Esempio: implementazione ('com.jakewharton: butterknife: 8.8.1') {exclude module: 'support-compat'} annotationProcessor 'com.jakewharton: butterknife-compilatore: 8.8.1'
GFPF,

9

Nel caso in cui qualcuno scopra che la risposta di CommonsWare non può essere applicata al progetto della libreria Android, ecco lo snippet da correggere

compile (project (': yourAndroidLibrary')) {exclude module: 'support-v13'}

Troverai problemi

Trovato metodo DSL Gradle non supportato: 'exclude ()'

se usi il progetto di compilazione (': yourAndroidLibrary') {exclude module: 'support-v13'}

Le differenze sono il braccialetto "(" e ")" prima di "progetto" .


Grazie, mancava la doppia parentesi!
Marko,

8
exclude module: 'support-v4'

Non avrebbe funzionato per me con una dipendenza dal progetto, l'unico modo per farlo funzionare era tramite la sintassi seguente:

configurations {
    dependencies {
        compile(project(':Android-SDK')) {
            compile.exclude module: 'support-v4'
        }
    }
}

Dove: Android-SDK è il nome del tuo progetto.


8

Ho avuto lo stesso problema e sembra che la mia app avesse troppi metodi a causa delle librerie: http://developer.android.com/tools/building/multidex.html

Risolto con:

android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Altro qui Errore: Esecuzione non riuscita per l'attività ': app: dexDebug'. > comando terminato con valore di uscita diverso da zero 2


1
Il multidex può rallentare la velocità di avvio della tua app, utilizzarla solo se è necessario.
James Goodwin,

6

Ho avuto lo stesso errore, ma è stato perché di recente sono passato dall'uso della v4 alla v13. Quindi tutto quello che dovevo fare era pulire il progetto.


1
Si è verificato lo stesso errore dopo l'aggiornamento di intellij, la pulizia del progetto ha risolto il problema.
Vlad Spreys,

5

Ho avuto lo stesso errore su un progetto legacy. La mia colpa è stata che la libreria di supporto è stata inclusa due volte: una volta all'interno della libreria google-play-services e un'altra come standalone.

Ecco come l'ho risolto:

BAD build.gradle:

dependencies {
   compile files('libs/android-support-v4.jar') 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

BUONO build.gradle:

dependencies {
   // compile files('libs/android-support-v4.jar')  // not needed 
   compile files('libs/core-2.2.jar')
   compile files('libs/universal-image-loader-1.8.5-with-sources.jar')
   compile 'com.google.android.gms:play-services:3.2.65'
}

Spero che aiuti qualcuno :-)


3

Sto usando com.google.android.gms:play-services-analytics:8.3.0e android-support-v13.jarnon sono riuscito exclude module: 'support-v4'a lavorare.

Ciò che ha funzionato per me è stato usare l' android-support-v13artefatto anziché il android-support-v13.jarfile.

Cioè invece di

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile files('libs/android-support-v13.jar')

}

ero solito

dependencies {
compile ('com.google.android.gms:play-services-analytics:8.3.0')
compile ('com.google.android:android-support-v13')

}


3

Nel mio caso il problema è stato causato dall'incongruenza della versione :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

La soluzione era semplice: rendi tutto versione 25


3

Un metodo dex problema simile risolto

gradle.build conteneva:

compile files('libs/httpclient-4.2.1.jar')
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'

Il problema è stato risolto quando l'ho rimosso

compile files('libs/httpclient-4.2.1.jar') 

Il mio voto ora sembra:

apply plugin: 'com.android.application'

android {

compileSdkVersion 24
buildToolsVersion "24.0.3"

defaultConfig {
    applicationId "com.mmm.ll"
    minSdkVersion 16
    targetSdkVersion 24
    useLibrary  'org.apache.http.legacy'
}

buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}
}

dependencies {

compile 'com.google.android.gms:play-services:6.1.+'
compile files('libs/PayPalAndroidSDK.jar')
compile files('libs/ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar')
compile files('libs/picasso-2.1.1.jar')
compile files('libs/gcm.jar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'org.apache.httpcomponents:httpclient:4.5'
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1'
}

Si è verificata una ridondanza nel file JAR e nel progetto gradle compilato

Quindi cerca con cura i file di dipendenza e jar con le stesse classi.

E rimuovere la ridondanza.
Questo ha funzionato per me.


2

Se hai importato il tuo progetto da Eclipse .

1. The select project 
2. Go to File -> **Project Structure**
3. Select app in **module** section on left hand panel
4. Select **Dependency** tab
5. Your able to see jars you have added in eclipse project for v4 and v13.
6. Remove that jar by clicking on minus sign at bottom after selection
7. Click on Plus sign select **Library Dependency** 
8. Choose V4 and V13 if added
9. Press Ok and Clean and Rebuild your project

Lo scenario che ho affrontato dopo aver importato il progetto Eclipse in Android Studio.

Spero che questo ti aiuti..


2

Questo è un problema fastidioso, che può richiedere del tempo per scoprire il caso principale. Il modo in cui dovresti procedere è la risposta di @CommonsWare.

Di recente ho riscontrato questo problema e ho trovato difficoltà a risolverlo.

Il mio problema era che includevo una libreria dalla versione "+" in build.gradle. L'ultima versione della libreria conteneva uno dei vecchi dex e bang.

Sono tornato alla versione precedente della libreria e l'ho risolto.

È utile eseguire le tue dipendenze android e vedere cosa sta realmente accadendo. È anche utile cercare nella cartella di compilazione.

Soprattutto Android Studio 2.2 fornisce funzionalità di build per tenere traccia di questo problema.

Happy Coding Guys


2

In Android Studio, vai su build.gradle (controlla i file build.gradle sia del progetto che dei moduli) e cerca dipendenze duplicate.

Elimina quelli di cui il tuo progetto non ha bisogno.


2

L'eliminazione di tutti i file dalla cache Gradle ha risolto il mio problema.

su Linux:

rm -rf ~/.gradle/caches/*

1

Ho rimosso la compilazione "com.android.support:support-v4:18.0.+" nelle dipendenze e funziona


2
questo dovrebbe essere un commento, altrimenti dovresti spiegarlo in modo migliore.
Anirudh Sharma,

1

Sono stato in grado di risolvere il problema nel mio progetto nativo di reazione semplicemente aggiungendo

configurations {
        all*.exclude group: 'com.android.support', module: 'support-compat'
        all*.exclude group: 'com.android.support', module: 'support-core-ui'
    }

alla fine del mio file android \ app \ build.gradle


0

Alla fine l'ho risolto modificando questi attributi nel file gradle del modulo

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. compilare "com.android.support:appcompat-v7:+"
  4. compilare "com.android.support:recyclerview-v7:+"

0

Ho avuto lo stesso problema durante l'aggiunta react-native-paletteal mio progetto, ecco l'albero delle mie dipendenze:

./gradlew app:dependencies
+--- project :react-native-palette
|    +--- com.facebook.react:react-native:0.20.+ -> 0.44.2
|    |    +--- javax.inject:javax.inject:1
|    |    +--- com.android.support:appcompat-v7:23.0.1
|    |    |    \--- com.android.support:support-v4:23.0.1
|    |    |         \--- com.android.support:support-annotations:23.0.1 -> 24.2.1
...
|    \--- com.android.support:palette-v7:24.+ -> 24.2.1
|         +--- com.android.support:support-compat:24.2.1
|         |    \--- com.android.support:support-annotations:24.2.1
|         \--- com.android.support:support-core-utils:24.2.1
|              \--- com.android.support:support-compat:24.2.1 (*)
+--- com.android.support:appcompat-v7:23.0.1 (*)
\--- com.facebook.react:react-native:+ -> 0.44.2 (*)

Ho provato molti soluton e non sono riuscito a risolverlo, fino a quando non ho cambiato la com.android.support:appcompatversione android/app/build.gradle, vorrei che questo potesse aiutare:

dependencies {
    compile project(':react-native-palette')
    compile project(':react-native-image-picker')
    compile project(':react-native-camera')
    compile fileTree(dir: "libs", include: ["*.jar"])
    // compile "com.android.support:appcompat-v7:23.0.1"
    compile "com.android.support:appcompat-v7:24.2.1"
    compile "com.facebook.react:react-native:+"
}

sembra che più voci non siano un grosso problema, lo è la mancata corrispondenza della versione


0

Ha funzionato per un compile file('...')conflitto aumentando minSdkVersion a 21 e abilitando multidex. Non sono sicuro che sia la soluzione migliore, ma l'unico modo per farlo funzionare nel mio caso.

Nota: poiché compile file('...')sembra che non sia possibile inserire una excludeclausola in modo che l'opzione non fosse disponibile.


0

Ho avuto lo stesso problema e la mia soluzione sta cambiando la versione di supporto '27. + '(27.1.0) a '27 .0.1'


0

Ho avuto lo stesso problema. Nel mio progetto, avevo le seguenti dipendenze:

  • appcompat-V7
  • Android-support-V13

Per motivi legacy, l'appcompat è stato recuperato dal repository Google Maven, mentre il supporto Android era un .jar locale.

Quando l'ho capito e ho sostituito questo riferimento locale con un riferimento maven, ho risolto il mio problema di build.

Ecco la diff della mia app / build.gradle:

inserisci qui la descrizione dell'immagine


0

Ho risolto tutti i miei problemi aggiungendo questo in project.properties

cordova.system.library.7=com.android.support:appcompat-v7:27.1.0

0

Ricevuto il seguente errore

Esecuzione non riuscita per l'attività ': app: transformDexArchiveWithDexMergerForDebug'.

com.android.build.api.transform.TransformException: com.android.dex.DexException: più file dex definiscono Landroid / support / limitint / ConstraintSet $ ​​1

Correzione: vai a Build -> Clean Project


Ciao, benvenuto in Stack Overflow. Ma per favore non ripetere le risposte, a parte avere già 24 risposte, il clean building è stato già fornito come risposta da ashishduh. Grazie!
Elletlar,
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.