EXCEPCIÓN INESPERADA DE NIVEL SUPERIOR: com.android.dex.DexException: definen múltiples archivos dex

Cuando agrego las configuraciones para Google Analytics a mi proyecto de Android y construyo el proyecto, aparece el siguiente error:

: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é significa esto y cómo puedo evitar este error?

Un poco tarde para el juego aquí, pero es muy probable que sea un problema con las dependencias que ha enumerado en su archivo build.gradle para su aplicación.

Después de muchas pruebas, logré descifrar mi problema y creo que podría ayudar a otros.

Cosas que no recomiendo:

A menos que tenga una absoluta necesidad de habilitar multiDex en su build.gradle NO LO HAGA , esto es solo pasar sobre el problema subyacente en su aplicación y no llegar a la raíz de la misma. También está aumentando innecesariamente el tamaño de su apk, y podría haber lockings inesperados cuando hay un método conflictivo en su archivo dex.

Cosas a tener en cuenta:

Compruebe todas sus dependencias en su archivo build.gradle. ¿Hace referencia a una dependencia que también incluye una dependencia que ya ha incluido? Por ejemplo, si incluye appcompat-v7, no es necesario incluir appcompat-v4, ya que v7 incluye todas las características de v4.

LO QUE ENCONTRÉ REALMENTE (MI PROBLEMA hace que mi aplicación supere el límite del método en mi archivo dex) —-> GOOGLE PLAY SERVICES

Si no necesita todas las dependencias de la biblioteca de servicios de google play, aléjese de esta línea en su build.gradle compile 'com.google.android.gms:play-services:8.3.0' y en su lugar solo use lo que necesite.

Google tiene una lista completa de las bibliotecas para comstackr selectivamente aquí

Con todo lo dicho, probablemente solo necesite incluir esta línea en gradle para su Google Analytics:

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

EDITAR

Además, puede ver el árbol de dependencias yendo a la raíz de su proyecto (o usando la terminal en el estudio de Android) y ejecutando:

 ./gradlew app:dependencies 

Buena suerte y feliz encoding!

Actualizar

Ahora, a partir de Android Studio 2.2, ya no necesita probar y error si necesita usar multi-dex en su aplicación. Utiliza el Apk Analyzer para ver si realmente es necesario.

Explicación: Creación de aplicaciones con más de 65K métodos

Los archivos de la aplicación Android (APK) contienen archivos ejecutables bytecode en forma de archivos ejecutables Dalvik (DEX), que contienen el código comstackdo utilizado para ejecutar su aplicación. La especificación del ejecutable de Dalvik limita el número total de métodos a los que se puede hacer referencia en un único archivo DEX a 65.536 , incluidos los métodos de Framework de Android, los métodos de biblioteca y los métodos en su propio código. Superar este límite requiere que configure el proceso de comstackción de su aplicación para generar más de un archivo DEX, conocido como configuración multidex.

Nota: Esto le permite consultar todos los métodos de la aplicación. Es como si tuviera dos módulos (límite: 2 x 65K) pero compactado en uno. Esto conlleva un costo (tiempo) en el proceso de comstackción.

Solución:

  1. Debería tratar de formatear su código con bibliotecas para eliminar el exceso de clases y tampoco exceder los métodos de límite. Por ejemplo, si usa maps play-services (com.google.android.gms: play-services: 8.1.0), puede cambiar a (comstackr ‘com.google.android.gms: play-services-maps: 8.1. 0 ‘) para eliminar dependencias innecesarias de la biblioteca. Luego sincronice Gradle en AndroidStudio y verifique si se ejecuta. Si no se ejecuta, ve al punto 2.
  2. Agregue esto en build.gradle (módulo de aplicación).
 android { ... defaultConfig { ... multiDexEnabled true } } 

Para mí, se relacionó con el convertidor simplexml para la actualización 2. Y se corrigió por:

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

Soporte Multidex para Android 5.0 y superior

Android 5.0 y versiones posteriores utilizan un tiempo de ejecución llamado ART que admite de forma nativa la carga de múltiples archivos dex desde los archivos APK de la aplicación. ART realiza la precomstackción en el momento de la instalación de la aplicación, que busca archivos de clases (.. N) .dex y los comstack en un solo archivo .oat para su ejecución por el dispositivo Android. Para obtener más información sobre el tiempo de ejecución de Android 5.0, consulte Introducción a ART.

Eso significa que su aplicación funcionaría bien en API nivel 21 o superior.

Soporte Multidex antes de Android 5.0

Las versiones de la plataforma anteriores a Android 5.0 usan el tiempo de ejecución de Dalvik para ejecutar el código de la aplicación. De forma predeterminada, Dalvik limita las aplicaciones a un único archivo de código de bytes de classes.dex por APK. Para evitar esta limitación, puede usar la biblioteca de soporte multidex, que se convierte en parte del archivo DEX primario de su aplicación y luego administra el acceso a los archivos DEX adicionales y el código que contienen.

Entonces, primero asegúrate de haber importado la dependencia correcta, lo cual parece que lo hiciste.

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

En su manifiesto, agregue la clase MultiDexApplication de la biblioteca de soporte multidex al elemento de la aplicación.

 < ?xml version="1.0" encoding="utf-8"?>   ...   

Alternativa a eso, si su aplicación amplía la clase de Application , puede anular el método attachBaseContext() y llamar a MultiDex.install(this) para habilitar multidex .

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

Por último, deberá actualizar su archivo build.gradle como se indica a continuación agregando multiDexEnabled true :

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

Espero que te ayude.

en mi caso, tuve esto dos veces en el archivo build.grade

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

Una vez que eliminé la segunda entrada, funcionó bien.

Exactamente el mismo problema que encontré!

Descubrí que se debía a dependencias duplicadas. En build.gradle, una dependencia ya puede estar incluida en otras, por lo tanto, genera conflictos. Eliminé las dependencias necesarias y resolví mi problema.

Lo que hice para solucionar esto se eliminó de los cambios de gradle desde aquí ( https://developers.google.com/analytics/devguides/collection/android/v4/ ) luego en Android Studio entró en ‘archivo / estructura del proyecto’ y luego hizo clic en análisis y si la casilla está marcada desmarcarla, deje la sincronización gradle y luego marque la casilla nuevamente y haga clic en el botón para iniciar sesión. Después de todo esto para que su rastreador analítico funcione, solo tiene que copiar su identificación de rastreador real en mTracker = analytics.newTracker() mira esta página para obtener ayuda. https://developers.google.com/android/reference/com/google/android/gms/analytics/GoogleAnalytics

Incluye dependencias específicas en el archivo de comstackción.

Si desea agregar mapas a su aplicación, incluya comstackr ‘ com.google.android.gms: play-services-location: 9.2.1


en lugar de comstackr ‘ com.google.android.gms: play-services: 9.2.1

Creo que estás usando google analytic sdk V3 usa V4. En cambio, también tengo el mismo problema cuando uso sdk V3 de google analytic https://developers.google.com/analytics/devguides/collection/android/v4/. Mira este enlace para más información.

Esto podría suceder si actualiza Android Studio a la última versión 1.4. ¿Actualizó las bibliotecas de soporte a las últimas versiones? Su compileSdkVersion debería ser 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' } 

De hecho, descubrí que tener demasiados módulos de Android Studio contribuía a tener este error sin multidex habilitado. Si está tratando de evitar habilitar multidex, el límite parece ser de alrededor de 26 módulos. Esto fue con Android Studio 1.5.1

El mismo problema pero al usar reactjsr-native-svg. Esto me ayudó:

 cd android ./gradlew clean 

Fuente