web-dev-qa-db-fra.com

Plusieurs fichiers dex définissent Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat

Si je lance gradle assembleDebug à partir de la ligne de commande, je reçois soudainement cette erreur:

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)

Si je grep pour v4, je vois deux fichiers dans mon dossier de construction.

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

Mon fichier Gradle comprend uniquement cette bibliothèque de support:

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

Je suis perplexe quant à la manière dont la bibliothèque r7 est incluse d'une manière ou d'une autre. J'ai exécuté gradle clean et il apparaît toujours là lorsque je réexécute assembleDebug.

Si je grep pour r7 dans le répertoire de construction, je le vois dans le fichier: 

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

Si je n'inclue pas la v13, les autres choses ne sont pas compilées.

Mais la v13 n'inclut-elle pas la bibliothèque de support v4?

Est-ce une incompatibilité entre le bundle AAR de play services et la bibliothèque v13?

J'ai attrapé le fichier Gradle de Gradleplease.appspot.com.

La suppression des services de lecture ne résout pas le problème. même erreur.

Mes dépendances dans 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'
}
204
xrd

Exécutezgradle -q dependencies(ougradle -q :projectName:dependencies) pour générer un rapport de dépendance. Vous devriez voir d'où provient r7, par exemple:

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

Ensuite, utilisez la directive exclude pour bloquer cette dépendance. Dans mon cas, cela provient de ma bibliothèque CWAC-Camera, et j'utilise donc:

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

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

(où la deuxième instruction compile indique quelle version vous voulez réellement)

Cela devrait éclaircir les choses, comme vous le verrez si vous exécutez à nouveau le rapport de dépendance:

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
296
CommonsWare

J'ai résolu l'erreur similaire en ajoutant le morceau de code suivant à mon fichier build.gradle dans le bloc Android.

Android {
    dexOptions {
        preDexLibraries = false
    }
}
123
mike.tihonchik

Notez également que vous pouvez voir vos dépendances Android en accédant à la vue Android Studio Gradle et en sélectionnant la cible "androidDependencies". 

Un autre conseil: je rencontrais ce problème jusqu'à ce que je supprime la librairie de support v4 du dossier libs du projet et de mes projets de module/bibliothèque associés. 

33
Ed Manners

Depuis Une image vaut mille mots

Pour que cette tâche soit plus facile et plus rapide avec des débutants comme moi. ce sont les screenshots qui montrent la réponse postée par @ edsappfactory.com qui ont fonctionné pour moi:

D'abord ouvrez la vue Gradle sur le côté droit d'Androidstudio, dans l'élément de votre application, accédez à Tasks, puis Android, puis cliquez avec le bouton droit de la souris sur androidDependencies puis choisissez Run:

 step 1

Second, vous verrez quelque chose comme ceci:

 Step 2

La principale raison pour laquelle j’ai écrit ceci est qu’il n’était pas facile de savoir où exécuter une tâche gradle ou les commandes publiées ci-dessus. C’est donc ici qu’il faut les échanger.

SO, pour exécuter la commande gradle:

Premier:

 first

Seconde:

 second

Aussi simple que ça.

C'est tout. 

Je vous remercie.

32
MBH

J'ai commencé à avoir cette erreur lors de la mise à niveau vers ButterKnife 8.5.1. Aucune des autres réponses ici ne fonctionnait pour moi.

J'ai utilisé gradle -q :app:dependencies pour voir l’arbre, puis j’ai parcouru les fichiers jar jusqu’à ce que j’ai trouvé le conflit. Le conflit était que la dépendance de butterknife sur com.Android.support:support-compat:25.1.0 contient une version de la classe d'accessibilité et que com.Android.support:support-v4:23.1.1 contient également la classe.

Je l'ai résolu en changeant ma dépendance de ceci:

compile 'com.jakewharton:butterknife:8.5.1'

pour ça:

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

Cela ne semble pas affecter le fonctionnement de ButterKnife jusqu'à présent.

Edit: Il existe une meilleure solution, qui consistait à mettre à niveau mes bibliothèques de support Android pour correspondre à celles de 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'
10
user3562927

Au cas où quelqu'un découvrirait que la réponse de CommonsWare ne pourrait pas être appliquée au projet de bibliothèque Android, voici l'extrait de code à corriger 

compiler (projet (': votreAndroidLibrary')) { module d'exclusion: 'support-v13' }

Vous trouverez des problèmes 

La méthode Gradle DSL non prise en charge a été trouvée: 'exclude ()'

si vous utilisez compile project (': votreAndroidLibrary') { module d'exclusion: 'support-v13' }

Les différences sont le bracelet "(" et ")" avant "projet".

9
Tony Thompson

J'ai eu le même problème et il semble que mon application avait trop de méthodes à cause des bibliothèques: http://developer.Android.com/tools/building/multidex.html

Résolu avec: 

Android {
   defaultConfig {
   ...
   multiDexEnabled = true
   }
}

Plus ici Erreur: L'exécution a échoué pour la tâche ': app: dexDebug'. > comcommand terminé avec une valeur de sortie 2 différente de zéro

8
Giannis P
exclude module: 'support-v4'

Cela ne fonctionnerait pas pour moi avec une dépendance de projet, la seule façon de le faire fonctionner était via la syntaxe suivante:

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

Où: Android-SDK est le nom de votre projet.

7
Pellet

J'ai eu la même erreur mais c'était parce que j'avais récemment changé de v4 à v13. Donc, tout ce que j'avais à faire était de nettoyer le projet.

6
ashishduh

J'ai eu la même erreur sur un projet hérité. Ma faute est que la bibliothèque de support a été incluse deux fois: une fois dans google-play-services lib et une autre en autonome.

Voici comment je l'ai corrigé:

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

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

J'espère que ça aide quelqu'un :-)

5
voghDev

Dans mon cas, le problème était dû à incohérence de version :

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

La solution était simple: faire tout la version 25

3
WindRider

A similaire méthode de résolution du problème dex

gradle.build contenait:

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'

Le problème a été résolu quand j'ai enlevé

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

Mon grade ressemble maintenant à:

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

Il y avait une redondance dans le fichier JAR et le projet gradle compilé 

Recherchez donc avec soin les fichiers de dépendance et les fichiers jar ayant les mêmes classes.

Et supprimez la redondance.
.__ Cela a fonctionné pour moi.

3
shiny vn

C’est un problème gênant, qui peut prendre un certain temps pour découvrir le cas fondamental. La façon dont vous devriez procéder est la réponse @CommonsWare. 

J'ai récemment fait face à ce problème et j'ai eu du mal à le résoudre. 

Mon problème était que j'inclus une bibliothèque par "+" version dans build.gradle. La dernière version de la bibliothèque contenait l’une des versions les plus anciennes de dex et de bang.

Je suis revenu à l'ancienne version de la bibliothèque et l'ai résolue.

Il est bon de gérer vos dépendances android et de voir ce qui se passe réellement. Il est également bon de chercher dans votre dossier de construction. 

Avant tout Android Studio 2.2 / fournit des fonctionnalités de construction permettant de suivre ce problème. 

Joyeux codeurs

2
Arun C

Dans Android Studio, accédez à votre build.gradle (vérifiez les fichiers build.gradle du projet et des modules) et recherchez les dépendances en double. 

Supprimez ceux dont votre projet n'a pas besoin.

2
KadoLakatt

Supprimer tous les fichiers du cache Gradle a résolu mon problème.

sous Linux: 

cd ~/.gradle  
rm -R -f *
2
Yuliia Ashomok

Si vous avez importé votre projet depuis 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

Le scénario auquel j'ai été confronté après l'importation du projet Eclipse dans le studio Android.

J'espère que cela t'aides.. 

2
MobileEvangelist

J'utilise com.google.Android.gms:play-services-analytics:8.3.0 et Android-support-v13.jar et je ne pouvais pas faire fonctionner exclude module: 'support-v4'.

Ce qui a bien fonctionné pour moi, c’était l’artéfact Android-support-v13 plutôt que le fichier Android-support-v13.jar.

C'est à dire. au lieu de

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

}

J'ai utilisé

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

}

2
barry

J'ai enlevé compiler 'com.Android.support:support-v4:18.0.+'in, et cela fonctionne 

1
albert

J'ai eu le même problème, et ma solution change la version de support '27. + '(27.1.0) en '27 .0.1' 

0
Mingyong Gu

J'ai pu résoudre le problème dans mon projet natif de Réaction en ajoutant simplement

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

à la fin de mon fichier Android\app\build.gradle

0
Yusuf Khan

J'ai eu le même problème… .. Dans mon projet, j'avais les dépendances suivantes:

  • appcompat-v7
  • Android-support-v13

Pour des raisons d'héritage, l'appcompat a été extrait du dépôt Maven de Google, alors que le support Android était un fichier .jar local.

Lorsque j'ai compris cela et remplacé cette référence locale par une référence maven, le problème de génération a été résolu.

Voici le diff de mon app/build.gradle:

 enter image description here

0
kall2sollies

J'ai eu le même problème lors de l'ajout de react-native-palette à mon projet, voici l'arbre de mes dépendances:

./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 (*)

J'ai essayé beaucoup de solutions et je ne pouvais pas le réparer, jusqu'à ce que je change la version com.Android.support:appcompat dans Android/app/build.gradle, j'aimerais que cela puisse aider:

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:+"
}

il semble que les entrées multiples ne sont pas un gros problème, la non-concordance de version est

0
matrixer

J'ai résolu tous mes problèmes en ajoutant ceci dans project.properties

cordova.system.library.7=com.Android.support:appcompat-v7:27.1.0
0
eatmeimadanish

A reçu l'erreur suivante

L'exécution a échoué pour la tâche ': app: transformDexArchiveWithDexMergerForDebug'.

com.Android.build.api.transform.TransformException: com.Android.dex.DexException: plusieurs fichiers dex définissent Landroid/support/contrainte/ConstraintSet

Correction: allez dans Construire -> Projet propre

0
Ragunath CR

Je l'ai eu pour un conflit compile file('...') en augmentant minSdkVersion à 21 et en activant multidex. Je ne suis pas sûr que ce soit la meilleure solution, mais le seul moyen de la faire fonctionner dans mon cas.

Remarque: pour compile file('...'), il semble que vous ne puissiez pas insérer de clause exclude afin que cette option ne soit pas disponible.

0
Ben Kleywegt

Enfin, j'ai résolu le problème en modifiant ces attributs dans le fichier gradle du module.

  1. compileSdkVersion 25
  2. targetSdkVersion 25
  3. compiler 'com.Android.support:appcompat-v7:+'
  4. compiler 'com.Android.support:recyclerview-v7:+'
0
Val Martinez