Подтвердить что ты не робот

НЕОПРЕДЕЛЕННОЕ ТОП-УРОВЕННОЕ ИСКЛЮЧЕНИЕ: com.android.dex.DexException: несколько файлов dex определяют

Когда я добавляю конфигурацию для google analytics в свой проект Android и создаю проект, я получаю следующую ошибку:

: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

Что это значит и как я могу предотвратить эту ошибку?

4b9b3361

Ответ 1

Немного поздно в игре здесь, но это скорее всего проблема с зависимостями, которые вы указали в своем файле build.gradle для вашего приложения.

После многих испытаний я успешно преследовал свою проблему и считаю, что она может помочь другим.

Вещи, которые я не рекомендую:

Если у вас нет абсолютной необходимости, чтобы включить multiDex в свой build.gradle НЕ ДЕЛАЙТЕ ЭТО, это просто перешагнуло основную проблему в вашем приложении и не получило к его корню. Вы также неоправданно увеличиваете размер вашего apk, и могут возникнуть непредвиденные сбои, когда в вашем файле dex есть конфликтный метод.

Что нужно искать:

Проверьте все ваши зависимости в файле build.gradle. Вы ссылаетесь на зависимость, которая также включает зависимость, которую вы уже включили? Например, если в вашем приложении appcompat-v7 нет необходимости включать appcompat-v4, поскольку v7 включает все функции из v4.

ЧТО Я НАСТОЯЩИМ НАЙТИ (МОЙ ВОПРОС, заставляя мое приложение превышать ограничение метода в моем файле dex) ---- > УСЛУГИ GOOGLE PLAY

Если вам не нужны все зависимости в библиотеке служб Google Play STAY AWAY от этой строки в файле build.gradle compile 'com.google.android.gms:play-services:8.3.0' и вместо этого используйте только то, что вам нужно!

В Google есть полный список библиотек для выборочной компиляции здесь

При всем том, что вам, вероятно, нужно включить эту строку в gradle для вашей Google Analytics:

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

ИЗМЕНИТЬ

Кроме того, вы можете просмотреть дерево зависимостей, перейдя в корень вашего проекта (или используя терминал в студии Android) и выполнив:

./gradlew app:dependencies

Удачи и счастливого кодирования!

Обновление

Теперь, начиная с Android Studio 2.2, вам больше не нужно проверять и не пытаться использовать мульти-dex в своем приложении. Используйте Apk Analyzer, чтобы узнать, действительно ли это необходимо!

Ответ 2

Экспликация Создание приложений с более чем 65K методами

Файлы приложения Android (APK) содержат исполняемые файлы байт-кода в виде файлов Dalvik Executable (DEX), которые содержат скомпилированный код, используемый для запуска вашего приложения. Спецификация исполняемого файла Dalvik ограничивает общее количество методов, на которые можно ссылаться в одном файле DEX, до 65 536, включая методы каркаса Android, библиотечные методы и методы в вашем собственном коде. Чтобы преодолеть этот предел, необходимо настроить процесс сборки приложения для создания более одного файла DEX, известного как многопользовательская конфигурация.

Примечание: Это позволяет вам ссылаться на все методы приложения. Это похоже на то, что у вас есть два модуля (предел: 2 x 65K), но сжимается в один. Это влечет за собой затраты (время) в процессе сборки.

Решение:

  • Вам следует попытаться отформатировать свой код с библиотеками, чтобы удалить лишние классы, а также не превышать лимитные методы. Например, если вы используете игровые сервисы карт (com.google.android.gms: play-services: 8.1.0), вы можете изменить (compile 'com.google.android.gms: play-services-maps: 8.1. 0 ') для устранения ненужных зависимостей библиотек. Затем синхронизируйте Gradle в AndroidStudio и проверьте, запущен ли он. Если ни один прогон не переходит в точку 2.
  • Добавьте это в build.gradle (модуль приложения).
android {
   ...
   defaultConfig {
      ...
      multiDexEnabled true
   }
}

Ответ 3

Для меня это было связано с преобразователем simplexml для модификации 2. И это исправлено:

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

Ответ 4

Поддержка нескольких приложений для Android 5.0 и выше

Android 5.0 и выше использует время выполнения, называемое ART, которое изначально поддерживает загрузку нескольких файлов dex из файлов APK приложения. ИЗОБРАЗИТЕЛЬНОЕ ИСКУССТВО выполняет предварительную компиляцию во время установки приложения, которая сканирует классов (..N).dex и скомпилирует их в один файл .oat для исполнение на устройстве Android. Для получения дополнительной информации об Android 5.0, см. Знакомство с ART.

Это означает, что ваше приложение будет работать нормально на уровне API 21 или выше.

Поддержка Multidex до Android 5.0

Версии платформы до Android 5.0 используют время работы Dalvik для выполнения кода приложения. По умолчанию Dalvik ограничивает приложения одним classes.dex для каждого APK. Чтобы обойти это ограничение, вы можете использовать библиотеку поддержки multidex, которая становится часть основного файла DEX вашего приложения, а затем управляет доступом к дополнительные файлы DEX и код, который они содержат.

Итак, во-первых, убедитесь, что вы импортировали правильную зависимость, которая кажется, что вы это сделали.

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

В манифесте добавьте класс MultiDexApplication из библиотеки поддержки multidex в элемент приложения.

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

Альтернативно этому, если ваше приложение расширяет класс Application, вы можете переопределить метод attachBaseContext() и вызвать MultiDex.install(this), чтобы включить multidex.

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

Наконец, вам нужно будет обновить файл build.gradle, как показано ниже, добавив multiDexEnabled true:

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

Я надеюсь, что это поможет вам.

Ответ 5

в моем случае, у меня было это дважды в файле build.grade

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

Как только я удалил вторую запись, она отлично работала.

Ответ 6

Точно такая же проблема, как я столкнулся!

Я узнал, что это связано с дублированием зависимостей. В build.gradle одна зависимость может быть уже включена в другие, что порождает конфликты. Я удалил необходимые зависимости и решил свою проблему.

Ответ 7

Что я сделал, чтобы исправить это, здесь были удалены изменения gradle (https://developers.google.com/analytics/devguides/collection/android/v4/), затем в Android Studio вошли в файл /Project Structure ', затем щелкните в аналитике, и если флажок установлен, снимите флажок, пусть gradle sync, затем снова установите флажок и нажмите кнопку для входа. После всего этого, чтобы заставить отслеживать ваш аналитик, вам просто нужно скопировать фактический идентификатор трекера в mTracker = analytics.newTracker(<here>) просмотрите эту страницу для справки. https://developers.google.com/android/reference/com/google/android/gms/analytics/GoogleAnalytics

Ответ 8

Включить определенные зависимости в файл сборки.

Если вы хотите добавить карты в свое приложение, тогда включить компилировать com.google.android.gms: играть-сервисов местоположение: 9.2.1


вместо компилировать com.google.android.gms: play-services: 9.2.1 '

Ответ 9

Я думаю, что вы используете google analyttic sdk V3, используя V4, вместо этого у меня также есть одна проблема с использованием sdk V3 аналитики google https://developers.google.com/analytics/devguides/collection/android/v4/ см. эту ссылку для получения дополнительной информации.

Ответ 10

Это может произойти, если вы обновили Android Studio до последней версии 1.4. Вы обновили библиотеки поддержки до последних версий? Ваш compileSdkVersion должен быть 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'

}

Ответ 11

На самом деле я обнаружил, что слишком большое количество модулей Android Studio способствовало возникновению этой ошибки без поддержки multidex. Если вы пытаетесь избежать включения multidex, это ограничение, по-видимому, составляет около 26 модулей. Это было с Android Studio 1.5.1

Ответ 12

Те же проблемы, но при использовании response-native-svg. Это помогло мне:

cd android
./gradlew clean

Источник

Ответ 13

С сайта разработчика Android:

Android 5.0 (уровень API 21) и выше использует среду выполнения под названием ART, которая наивно поддерживает загрузку нескольких файлов DEX из файлов APK.

Я установил min SDK на 21, и это решило проблему для меня (конечно, вам нужно проверить ваш конкретный случай, если вам подходит установка min-SDK на 21 или выше)