android com.android.support:design - Plusieurs fichiers dex définissent Landroid / support / v4 / accessibilityservice / AccessibilityServiceInfoCompat




12 Answers

Exécutez gradle -q dependencies (ou gradle -q :projectName:dependencies ) pour générer un rapport de dépendance. Vous devriez voir d'où vient r7 , comme:

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, il provient de ma bibliothèque CWAC-Camera, et j'utilise:

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 déclaration de compile indique quelle version vous voulez réellement)

Cela devrait éclaircir les choses, comme vous le verrez si vous réexécutez 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
28 26

Si gradle assembleDebug 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 inclut uniquement cette bibliothèque de support:

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

Je suis perplexe quant à la façon 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 quand je relance 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 v13, alors d'autres choses ne compilent pas.

Mais v13 ne comprend pas la bibliothèque de support v4?

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

J'ai attrapé le fichier gradle de gradleplease.appspot.com.

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

Mes dépendances à l'intérieur de 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'
}



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

Une astuce supplémentaire: j'avais ce problème, jusqu'à ce que je supprime la librairie de support v4 du dossier libs dans le projet et dans le (s) projet (s) module / bibliothèque associé (s).




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

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

Vous trouverez des problèmes

Méthode DSL Gradle non prise en charge trouvée: 'exclude ()'

si vous utilisez le projet de compilation (': yourAndroidLibrary') {exclure le module: 'support-v13'}

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




J'ai commencé à recevoir cette erreur lors de la mise à niveau vers ButterKnife 8.5.1. Aucune des autres réponses ici n'a fonctionné pour moi.

J'ai utilisé gradle -q :app:dependencies pour voir l'arbre, puis j'ai regardé les fichiers jar jusqu'à ce que je trouve 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 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 l'opération de ButterKnife jusqu'ici.

Edit: Il existe une meilleure solution, qui consistait à mettre à jour mes bibliothèques de support android pour qu'elles correspondent à 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'



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




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

Build tools 25
compileSdk 24
targetSdk 24
Support library 24

La solution était simple: Faire tout ce que la version 25




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..




C'est un problème ennuyant, qui peut prendre un certain temps pour trouver le cas racine. La façon dont vous devriez procéder est @CommonsWare réponse.

J'ai fait face à ce problème récemment et je l'ai trouvé difficile à résoudre.

Mon problème était que j'incluais une bibliothèque par "+" version dans build.gradle. La dernière version de la bibliothèque contenait l'un des plus anciens dex et bang.

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

Il est bon d'exécuter votre androidDependencies 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 fournir dans les fonctionnalités de construction pour suivre ce problème.

Heureux gars de codage




J'ai supprimé compiler 'com.android.support:support-v4:18.0.+' dans les dépendances, et cela fonctionne




Enfin, je l'ai résolu en modifiant ces attributs sur 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:+'



Je l'ai eu pour un conflit de compile file('...') en augmentant minSdkVersion à 21 et en activant multidex. Je ne sais pas si c'est la meilleure solution, mais la seule façon de le faire fonctionner dans mon cas.

Note: pour le compile file('...') il semble que vous ne puissiez pas mettre une clause d' exclude sorte que cette option n'était pas disponible.




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 héritées, l'appcompat a été récupéré dans le dépôt Google Maven, alors que le support android était un .jar local.

Quand j'ai compris cela, et remplacé cette référence locale par une référence maven, cela a juste résolu mon problème de build.

Voici la différence de mon application / build.gradle:




Related

android gradle android-support-library android-gradle