services para google app java android android-studio gradle google-analytics

java - para - google analytics swift 4



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

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?


¡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, generar conflictos. Eliminé las dependencias necesarias y resolví mi problema.



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


Desde el sitio web para desarrolladores de Android:

Android 5.0 (API nivel 21) y superior utiliza un tiempo de ejecución llamado ART que ingenuamente admite cargar múltiples archivos DEX desde archivos APK.

Establecí el SDK mínimo en 21 y me resolvió el problema (por supuesto, debe verificar su caso específico si está bien configurar min-SDK en 21 o superior)


El mismo problema pero cuando se usa react-native-svg. Esto me ayudó a:

cd android ./gradlew clean

Source


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


Incluir dependencias específicas en el archivo de compilación.

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

en lugar de compilar '' com.google.android.gms: play-services: 9.2.1 ''


Lo que hice para solucionar esto es eliminar 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 haga clic en análisis y, si la casilla está marcada, desactívela, deje que Gradle sincronice, marque la casilla nuevamente y haga clic en el botón para iniciar sesión. Después de todo esto para que su rastreador de análisis funcione, solo tiene que copiar su identificación de rastreador real en mTracker = analytics.newTracker(<here>) mira esta página para obtener ayuda. https://developers.google.com/android/reference/com/google/android/gms/analytics/GoogleAnalytics


Para mí, estaba relacionado con el convertidor simplexml para la actualización 2. Y se solucionó mediante:

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


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, acerté con éxito mi problema y creo que podría ser de ayuda para otros.

Cosas que no recomiendo:

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

Cosas a tener en cuenta:

Verifique 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 funciones de v4.

LO QUE ENCONTRÉ REALMENTE (MI PROBLEMA hace que mi aplicación exceda el límite de método en mi archivo dex) ----> SERVICIOS DE GOOGLE PLAY

Si no necesita todas las dependencias de la biblioteca de servicios de Google Play, MANTÉNGASE ALEJADO de esta línea en su build.gradle compile ''com.google.android.gms:play-services:8.3.0'' y, en su lugar, ¡use lo que necesita!

Google tiene una lista completa de las bibliotecas para compilar selectivamente here

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 codificación!

Actualizar

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


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.


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

Los archivos de la aplicación de Android (APK) contienen archivos ejecutables de bytecode en forma de archivos Dalvik Executable (DEX), que contienen el código compilado utilizado para ejecutar su aplicación. La especificación ejecutable Dalvik limita el número total de métodos a los que se puede hacer referencia dentro de un solo archivo DEX a 65.536 , incluidos los métodos de marco 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 compilació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 compactados en uno. Esto conlleva un costo (tiempo) en el proceso de construcción.

Solución:

  1. Debe intentar formatear su código con bibliotecas para eliminar el exceso de clases y no exceder los métodos de límite. Por ejemplo, si usa mapas play-services (com.google.android.gms: play-services: 8.1.0), puede cambiar a (compilar ''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 corre, vaya al punto 2.
  2. Agregue esto en build.gradle (módulo de aplicación).

android { ... defaultConfig { ... multiDexEnabled true } }


Soporte Multidex para Android 5.0 y superior

Android 5.0 y superior utiliza un tiempo de ejecución llamado ART que admite de forma nativa la carga de múltiples archivos dex desde archivos APK de aplicaciones. ART realiza la precompilación en el momento de la instalación de la aplicación que escanea los archivos .dex de clases (.. N) y los compila 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 el nivel de API 21 o superior.

Soporte Multidex anterior a Android 5.0

Las versiones de la plataforma anteriores a Android 5.0 utilizan el tiempo de ejecución Dalvik para ejecutar el código de la aplicación. Por defecto, Dalvik limita las aplicaciones a un solo archivo de código de bytes 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 al código que contienen.

Entonces, en primer lugar, asegúrese de haber importado la dependencia correcta, lo que parece que lo hizo.

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"?> <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>

Alternativa a eso, si su aplicación extiende la clase 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); }

Finalmente, deberá actualizar su archivo build.gradle como se muestra 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.