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'
}
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
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
}
}
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.
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
:
Second, vous verrez quelque chose comme ceci:
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:
Seconde:
Aussi simple que ça.
C'est tout.
Je vous remercie.
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'
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".
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
}
}
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.
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.
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 :-)
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
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.
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
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.
Supprimer tous les fichiers du cache Gradle a résolu mon problème.
sous Linux:
cd ~/.gradle
rm -R -f *
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..
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')
}
J'ai enlevé compiler 'com.Android.support:support-v4:18.0.+'in, et cela fonctionne
J'ai eu le même problème, et ma solution change la version de support '27. + '(27.1.0) en '27 .0.1'
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
J'ai eu le même problème… .. Dans mon projet, j'avais les dépendances suivantes:
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:
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
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
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
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.
Enfin, j'ai résolu le problème en modifiant ces attributs dans le fichier gradle du module.