Gradle не может объединить dex после обновления Android Studio

Несколько дней назад была выпущена Android Studio 3.0. В тот же день я обновил свою версию IDE и все зависимости, включая версию плагина Gradle. Текущие версии моих файлов Gradle: ^

build.gradle (проект)

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0'
        classpath 'com.google.gms:google-services:3.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "http://jzaccone.github.io/SlidingMenu-aar" }
        maven { url "https://jitpack.io" }
        flatDir { dirs "libs" }
    }
}

build.gradle (ммодуль: приложение)

buildscript {
    repositories {
        maven { url 'https://maven.fabric.io/public' }
    }

    dependencies {
        classpath 'io.fabric.tools:gradle:1.24.0'
    }
}

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'

repositories {
    maven { url 'https://maven.fabric.io/public' }
    google()
}

android {
    compileSdkVersion 26
    buildToolsVersion '26.0.2'
    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 26
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    /*Нельзя собрать мужское приложение для казахстана например, не понятно как это делать*/
    flavorDimensions "country", "section"

    productFlavors {

        kz {
            applicationId 'kz.kupivip.android'
            dimension "country"
            buildConfigField "String", "DOMEN", "\"kz\""
            buildConfigField "String", "KNG_API_URL", "\"https://kng.kupivip.kz\""
            buildConfigField "String", "PRE_API_URL", "\"http://kng.pre.kupivip.kz\""
            buildConfigField "String", "DEV_API_URL", "\"http://kng.dev.kupivip.kz\""
            buildConfigField "String", "CALL_CENTER_PHONE_NUMBER", "\"+77172727559\""
            buildConfigField "String", "FCM_APP_NAME", "\"kazahstan\""
            buildConfigField "Integer", "PHONE_DIGIT_LENGTH", "10"
            buildConfigField "Integer", "BASKET_LIMIT", "6"
        }

        by {
            applicationId 'by.kupivip.android'
            dimension "country"
            buildConfigField "String", "DOMEN", "\"by\""
            buildConfigField "String", "KNG_API_URL", "\"https://kng.kupivip.by\""
            buildConfigField "String", "PRE_API_URL", "\"http://kng.pre.kupivip.by\""
            buildConfigField "String", "DEV_API_URL", "\"http://kng.dev.kupivip.by\""
            buildConfigField "String", "CALL_CENTER_PHONE_NUMBER", "\"+375255400529\""
            buildConfigField "String", "FCM_APP_NAME", "\"belarus\""
            buildConfigField "Integer", "PHONE_DIGIT_LENGTH", "9"
            buildConfigField "Integer", "BASKET_LIMIT", "10"
        }

        ru {
            applicationId 'ru.kupivip.android'
            dimension "country"
            buildConfigField "String", "DOMEN", "\"ru\""
            buildConfigField "String", "KNG_API_URL", "\"https://kng.kupivip.ru\""
            buildConfigField "String", "PRE_API_URL", "\"http://pre.web.kupivip.local\""
            buildConfigField "String", "DEV_API_URL", "\"http://dev.web.kupivip.local\""
            buildConfigField "String", "CALL_CENTER_PHONE_NUMBER", "\"+7(495)99-444-99\""
            buildConfigField "Integer", "PHONE_DIGIT_LENGTH", "10"
            buildConfigField "Integer", "BASKET_LIMIT", "10"
        }

        kupivip {
            dimension "section"
            versionCode 83
            versionName "3.8.0"
            buildConfigField "boolean", "SEARCH_SUGGESTS_ON", "true"
            buildConfigField "String", "SEARCH_FILTER", "\"ALL\""
            buildConfigField "String", "FCM_APP_NAME", "\"native\""
        }

        kupivipmale {
            dimension "section"
            applicationId 'ru.kupivip.android.men'
            versionName '3.6.2'
            versionCode 21
            buildConfigField "boolean", "SEARCH_SUGGESTS_ON", "false"
            buildConfigField "String", "SEARCH_FILTER", "\"MALE\""
            buildConfigField "String", "FCM_APP_NAME", "\"men\""
        }

        kupivipkids {
            dimension "section"
            applicationId 'ru.kupivip.android.kids'
            versionName '3.6.2'
            versionCode 10
            buildConfigField "boolean", "SEARCH_SUGGESTS_ON", "false"
            buildConfigField "String", "SEARCH_FILTER", "\"KIDS\""
            buildConfigField "String", "FCM_APP_NAME", "\"kids\""
            buildConfigField "String", "FCM_ALL_APP_NAME", "\"kids\""
        }

        kupivipluxe {
            dimension "section"
            applicationId 'ru.kupivip.android.luxe'
            versionName '3.6.2'
            versionCode 10
            buildConfigField "boolean", "SEARCH_SUGGESTS_ON", "false"
            buildConfigField "String", "SEARCH_FILTER", "\"ALL\""
            buildConfigField "String", "FCM_APP_NAME", "\"premium\""
            buildConfigField "String", "FCM_ALL_APP_NAME", "\"premium\""
        }
    }

    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/license.txt'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/ASL2.0'
        exclude 'META-INF/services/javax.annotation.processing.Processor' // butterknife
    }

    buildTypes {
        release {
            minifyEnabled false
            buildConfigField "String", "AMPLITUDE_KEY", "\"a2e3631d72a8242c628d2580a82c857b\""
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            buildConfigField "String", "PARTNER", "\"none\""
        }

        release_yandex.initWith(buildTypes.release)
        release_yandex {
            buildConfigField "String", "PARTNER", "\"yandex2016\""
        }

        release_aff_admon.initWith(buildTypes.release)
        release_aff_admon {
            buildConfigField "String", "PARTNER", "\"AFF_ADMON\""
        }

        alpha.initWith(buildTypes.debug)
        alpha {
            debuggable true
            buildConfigField "String", "AMPLITUDE_KEY", "\"f62648415b602438f2059f46de739b29\""
            buildConfigField "String", "PARTNER", "\"none\""
            minifyEnabled false
        }
    }

    lintOptions {
        disable "ResourceType"
        // butterknife без этого не дает собрать релиз https://github.com/JakeWharton/u2020/issues/216
    }

    dexOptions {
        jumboMode = true
    }
}

dependencies {
    implementation 'com.android.support:multidex:1.0.2'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    testCompile 'org.mockito:mockito-core:1.10.19'

    // Support
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.android.support:recyclerview-v7:26.1.0'
    implementation 'com.android.support:cardview-v7:26.1.0'
    implementation 'com.android.support:design:26.1.0'
    implementation 'com.android.support:customtabs:26.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'

    // Google Services
    implementation 'com.google.android.gms:play-services-maps:11.4.2'
    implementation 'com.google.android.gms:play-services-analytics:11.4.2'
    implementation 'com.google.android.gms:play-services-location:11.4.2'

    // Firebase
    implementation 'com.google.firebase:firebase-core:11.4.2'
    implementation 'com.google.firebase:firebase-messaging:11.4.2'
    implementation 'com.google.firebase:firebase-appindexing:11.4.2'
    implementation 'com.google.firebase:firebase-config:11.4.2'

    // ImageView with zoom and pan capabilities
    implementation 'it.sephiroth.android.library.imagezoom:imagezoom:2.3.0'

    // Dagger
    implementation 'com.google.dagger:dagger-android:2.11'
    implementation 'com.google.dagger:dagger-android-support:2.11' // if you use the support libraries
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'

    // Butterknife
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    // Robospice
    implementation 'com.octo.android.robospice:robospice:1.4.14'

    // RxJava
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
    implementation 'io.reactivex.rxjava2:rxjava:2.1.3'

    // Retrofit
    implementation 'com.squareup.retrofit:retrofit:1.9.0'
    implementation 'com.squareup.okhttp:okhttp:2.5.0'
    implementation 'com.squareup.okhttp:okhttp-urlconnection:2.5.0'

    // Picasso
    implementation 'com.squareup.picasso:picasso:2.5.2'

    //Заменить на нативный
    implementation 'com.daimajia.swipelayout:library:1.2.0@aar'
    implementation 'me.zhanghai.android.materialprogressbar:library:1.1.6'
    implementation 'org.florescu.android.rangeseekbar:rangeseekbar-library:0.3.0'
    implementation 'com.commit451:PhotoView:1.2.4'

    implementation 'io.branch.sdk.android:library:1.14.5'

    //BottomSheet выводит дилог шаринга снизу
    implementation 'com.flipboard:bottomsheet-core:1.5.3'
    implementation 'com.flipboard:bottomsheet-commons:1.5.3'

    // Crashlytics
    implementation('com.crashlytics.sdk.android:crashlytics:2.5.7@aar') {
        transitive = true;
    }

    implementation 'com.amplitude:android-sdk:2.7.1'
    implementation 'com.facebook.android:facebook-android-sdk:4.20.0'

    implementation 'com.github.bmelnychuk:atv:1.2.9'

    // Appsflyer
    implementation 'com.appsflyer:af-android-sdk:4.7.1@aar'

    implementation ('com.github.tony19:timber-loggly:1.0.1')
}

////

Все зависимости разрешены без наших ошибок во время процесса синхронизации gradle. Модульный тест проходит без проблем. Но когда я пытаюсь собрать приложение - gradle показывает ошибку Unable to merge dex.

Stacktrace из консоли Gradle:

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithDexMergerForRuKupivipAlpha'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
    at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
    at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
    at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
Caused by: java.lang.RuntimeException: com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/CanReadFileFilter;
    at com.android.builder.profile.Recorder$Block.handleException(Recorder.java:55)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:104)
    at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:213)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
    at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
    ... 27 more
Caused by: com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/CanReadFileFilter;
    at com.android.build.gradle.internal.transforms.DexMergerTransform.transform(DexMergerTransform.java:230)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:222)
    at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:218)
    at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
    ... 39 more
Caused by: com.android.dex.DexException: Multiple dex files define Lorg/apache/commons/io/filefilter/CanReadFileFilter;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:661)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:616)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:598)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:198)
    at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:61)
    at com.android.builder.dexing.DexArchiveMergerCallable.call(DexArchiveMergerCallable.java:36)

Что здесь может быть не так?


person Евгений Кравцов    schedule 30.10.2017    source источник
comment
Думаю, у меня была такая же проблема. Попробуйте очистить проект.   -  person Lukasz    schedule 31.10.2017


Ответы (1)


Может быть, это помощь для кого-то.

Эта ошибка из-за commons/io и robospice. (или, возможно, другие зависимости, которые имеют зависимость commons/io) В моем случае это был robospice. Вам нужно добавить Robospice следующим образом:

implementation('com.octo.android.robospice:robospice:1.4.14') {
    exclude module: 'commons-io'
}

С gradle 4.1 и AS 3.0+ Дополнительную информацию об ошибке с commos-io вы можете найти в google. Такой подход помог мне.

person dantes_21    schedule 10.01.2018