EXCEPTION DE NIVEAU SUPÉRIEUR INEXPECTÉE: com.android.dex.DexException: plusieurs fichiers dex définissent

Lorsque j'ajoute les configurations pour google analytics à mon projet Android et que je crée le projet, j'ai l'erreur suivante:

:app:transformClassesWithDexForDebug UNEXPECTED TOP-LEVEL EXCEPTION: com.android.dex.DexException: Multiple dex files define Ljavax/inject/Inject; 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) FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 * Try: Run with --info or --debug option to get more log output. * Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformClassesWithDexForDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:310) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:90) at org.gradle.tooling.internal.provider.runner.BuildModelActionRunner.run(BuildModelActionRunner.java:54) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:41) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28) at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:49) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74) at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72) at org.gradle.util.Swapper.swap(Swapper.java:38) at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:71) at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41) at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120) at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50) at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54) at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40) Caused by: org.gradle.internal.UncheckedException: com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at org.gradle.internal.UncheckedException.throwAsUncheckedException(UncheckedException.java:45) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:78) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:243) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:230) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:208) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 57 more Caused by: com.android.build.transform.api.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at com.android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.java:411) at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:112) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) ... 63 more Caused by: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:42) at com.android.builder.core.AndroidBuilder.convertByteCode(AndroidBuilder.java:1325) at com.android.build.gradle.internal.transforms.DexTransform.transform(DexTransform.java:396) ... 65 more Caused by: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2 at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:365) at com.android.build.gradle.internal.process.GradleProcessResult.assertNormalExitValue(GradleProcessResult.java:40) ... 67 more 

Qu'est-ce que cela signifie et comment puis-je éviter cette erreur?

  • Android: comment organiser les ressources du projet?
  • Comment puis-je vérifier si ma table sqlite contient des données?
  • AlertDialog avec case à cocher Dans Android
  • Comment définir la couleur de la bordure de la case à cocher
  • Android Studio - Exécutez une application sans activité de lanceur
  • GooglePlayServicesUtil.getErrorDialog est nul
  • Quelle est la famille de polices par défaut dans Android?
  • Désinstaller les anciennes versions de SDK d'Android
  • Faire face aux problèmes liés à la résolution des images de 9 patch dans le studio Android
  • Tests Android avec Appium et Gradle
  • Comment jouer en streaming audio / vidéo à partir d'une URL?
  • Quels capteurs utilisés pour Sensor.TYPE_ROTATION_VECTOR
  • 12 Solutions collect form web for “EXCEPTION DE NIVEAU SUPÉRIEUR INEXPECTÉE: com.android.dex.DexException: plusieurs fichiers dex définissent”

    Un peu en retard dans le jeu ici, mais il est très probable qu'un problème avec les dépendances que vous avez énumérées dans votre fichier build.gradle pour votre application.

    Après de nombreux tests, j'ai réussi à chasser mon problème et je crois qu'il pourrait être utile pour les autres.

    Ce que je ne recommande pas:

    À moins que vous ayez un besoin absolu d'activer MultiDex dans votre build.gradle, NE PAS FAIRE , cela ne fait que remonter le problème sous-jacent dans votre application et ne pas en arriver à la racine. Vous augmentez inutilement la taille de votre apk, et il pourrait y avoir des collisions inattendues lorsqu'il existe une méthode conflictuelle dans votre fichier dex.

    Des choses à surveiller:

    Vérifiez toutes vos dépendances dans votre fichier build.gradle. Faites-vous référence à une dépendance qui comprend également une dépendance que vous avez déjà incluse? Par exemple, si vous incluez appcompat-v7, il n'est pas nécessaire d'inclure appcompat-v4 car v7 inclut toutes les fonctionnalités de v4.

    QU'EST-CE QUE J'AI MIEUX TROUVER (L'ÉMISSION causant que mon application dépasse la limite de méthode dans mon fichier dex) —-> GOOGLE PLAY SERVICES

    Si vous n'avez pas besoin de toutes les dépendances de la bibliothèque de services Google Play, restez à l'écart de cette ligne dans votre build.gradle compile 'com.google.android.gms:play-services:8.3.0' et utilisez simplement ce dont vous avez besoin!

    Google dispose d'une liste complète des bibliothèques pour la compilation sélective ici

    Avec tout ce que vous dites, vous devez probablement inclure cette ligne unique dans gradle pour votre Google Analytics:

      dependencies{ compile 'com.google.android.gms:play-services-analytics:8.3.0' } 

    MODIFIER

    De plus, vous pouvez afficher l'arborescence des dépendances en allant à la racine de votre projet (ou en utilisant le terminal dans le studio Android) et en cours d'exécution:

     ./gradlew app:dependencies 

    Bonne chance et bon codage!

    Mettre à jour

    Maintenant, depuis Android Studio 2.2, vous n'avez plus besoin d'essai et d'erreur si vous devez utiliser multi-dex dans votre application. Utilisez l' analyseur Apk pour voir s'il est vraiment nécessaire!

    Explication: Création d' applications avec plus de 65K Méthodes

    Les fichiers d'application Android (APK) contiennent des fichiers bytecode exécutables sous la forme de fichiers DEV (Dalvik Executable), qui contiennent le code compilé utilisé pour exécuter votre application. La spécification Dalvik Exécutable limite le nombre total de méthodes pouvant être référencées dans un seul fichier DEX à 65 536 , y compris les méthodes de cadre Android, les méthodes de bibliothèque et les méthodes dans votre propre code. Après cette limite, vous devez configurer votre processus de création d'application pour générer plus d'un fichier DEX, connu sous le nom de configuration multidex.

    Remarque: Cela vous permet de se référer à toutes les méthodes de l'application. C'est comme si vous disposiez de deux modules (limite: 2 x 65K) mais compactés en un seul. Cela implique un coût (temps) dans le processus de construction.

    Solution:

    1. Vous devriez essayer de formater votre code avec les bibliothèques pour supprimer les classes excédentaires et ne pas dépasser les méthodes limites. Par exemple, si vous utilisez les services de jeu de cartes (com.google.android.gms: play-services: 8.1.0), vous pouvez modifier (compilez 'com.google.android.gms: play-services-maps: 8.1. 0 ') pour éliminer les dépendances inutiles de la bibliothèque. Ensuite, synchronisez Gradle dans AndroidStudio et vérifiez s'il s'exécute. Si aucune course ne va au point 2.
    2. Ajoutez ceci sur build.gradle (module d'application).
     android { ... defaultConfig { ... multiDexEnabled true } } 

    Pour moi, il était lié au convertisseur simplexml pour la rénovation 2. Et il a été corrigé par:

    compile ("com.squareup.retrofit2:converter-simplexml:2.0.0-beta4"){ exclude module: 'stax' exclude module: 'stax-api' exclude module: 'xpp3'}

    Support Multidex pour Android 5.0 et supérieur

    Android 5.0 et supérieur utilise un temps d'exécution appelé ART qui supporte nativement le chargement de plusieurs fichiers dex à partir des fichiers APK d'application. ART effectue une pré-compilation au moment de l'installation de l'application qui analyse les classes (… N) .dex et les compile dans un seul fichier .oat pour l'exécution par l'appareil Android. Pour plus d'informations sur le temps d'exécution Android 5.0, voir Introduction à ART.

    Cela signifie que votre application fonctionnerait bien sur le niveau API 21 ou supérieur.

    Support Multidex avant Android 5.0

    Les versions de la plate-forme avant Android 5.0 utilisent l'exécution Dalvik pour l'exécution du code de l'application. Par défaut, Dalvik limite les applications à un seul fichier de bytecode classes.dex par APK. Pour contourner cette limitation, vous pouvez utiliser la bibliothèque de support multidéx, qui fait partie du fichier DEX principal de votre application, puis gère l'accès aux fichiers DEX supplémentaires et au code qu'ils contiennent.

    Alors, d'abord, assurez-vous d'avoir importé une dépendance correcte, ce qui semble que vous l'avez fait.

     dependencies { compile 'com.android.support:multidex:1.0.1' } 

    Dans votre manifeste, ajouter la classe MultiDexApplication de la bibliothèque de support multidéx à l'élément de l'application.

     <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> <application ... android:name="android.support.multidex.MultiDexApplication"> ... </application> </manifest> 

    Alternative à cela, si votre application étend la classe Application , vous pouvez remplacer la méthode attachBaseContext() et appeler MultiDex.install(this) pour activer multidex .

      @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } 

    Enfin, vous devrez mettre à jour votre fichier build.gradle comme ci-dessous en ajoutant multiDexEnabled true :

     defaultConfig { applicationId '{Project Name}' minSdkVersion 15 targetSdkVersion 23 versionCode 1 versionName "1.0" multiDexEnabled true } 

    J'espère que cela vous aidera.

    Dans mon cas, j'ai eu deux fois dans le fichier build.grade

     compile 'com.google.android.gms:play-services-auth:8.4.0' 

    Une fois que j'ai retiré la 2ème entrée, cela a bien fonctionné.

    Ce que j'ai fait pour résoudre ce problème, il a été supprimé les changements de gradle à partir d'ici ( https://developers.google.com/analytics/devguides/collection/android/v4/ ) puis dans Android Studio est entré dans 'file / Project Structure' puis cliquez sur Et si la case est cochée, décochez la case, laissez la synchronisation de Gradle puis cochez la case et cliquez sur le bouton pour vous connecter. Après tout cela pour que votre analyseur fonctionne, il vous suffit de copier votre identifiant de suivi réelle dans mTracker = analytics.newTracker(<here>) consultez cette page pour obtenir de l'aide. https://developers.google.com/android/reference/com/google/android/gms/analytics/GoogleAnalytics

    Exactement le même problème que j'ai rencontré!

    J'ai découvert que cela dépend des dépendances en double. Dans build.gradle, une seule dépendance peut être déjà incluse dans d'autres, générant ainsi des conflits. J'ai supprimé les dépendances nécessaires et résolu mon problème.

    Inclure des dépendances spécifiques dans le fichier de construction.

    Si vous souhaitez ajouter des cartes dans votre application, incluez compile ' com.google.android.gms: play-services-location: 9.2.1 '


    Au lieu de compiler ' com.google.android.gms: play-services: 9.2.1 '

    Je pense que vous utilisez google analytic sdk V3 utiliser V4 à la place, j'ai également eu le même problème lors de l'utilisation de sdk V3 de Google Analytics https://developers.google.com/analytics/devguides/collection/android/v4/ voir ce lien pour Plus d'information.

    Cela pourrait se produire si vous avez mis à jour Android Studio vers la dernière version 1.4. Avez-vous mis à jour les bibliothèques de support vers les dernières versions? Votre compileSdkVersion devrait être de 23.

     apply plugin: 'com.android.application' android { compileSdkVersion 23 //update this to 23 buildToolsVersion "21.1.2" defaultConfig { applicationId "your.package.name" minSdkVersion 16 targetSdkVersion 21 multiDexEnabled true //enable this } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } } dependencies { // update these to 23 if you have them and add the multidex compile 'com.android.support:support-v4:23.0.1' compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' compile 'com.google.android.gms:play-services:+' compile 'com.android.support:multidex:1.0.1' } 

    J'ai effectivement constaté qu'avoir trop de modules Android Studio contribuait à ce que cette erreur sans multidex soit activée. Si vous essayez d'éviter l'activation de multidex, la limite semblait être d'environ 26 modules. Cela a été avec Android Studio 1.5.1

    Le même problème, mais lors de l'utilisation de réact-native-svg. Cela m'a aidé:

     cd android ./gradlew clean 

    La source

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.