it-swarm.com.ru

Как решить Java.util.Zip.ZipException?

При попытке отладки и развертывания приложения Android (в Android Studio 0.9) я получаю следующую ошибку:

Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
Java.util.Zip.ZipException: duplicate entry: Android/support/multidex/BuildConfig.class

Чтобы прояснить ситуацию, вот краткая история моих действий:

  1. Этим утром проект работал нормально
  2. Добавлены некоторые дополнительные классы и методы
  3. Сломал лимит и получил эту ошибку: Unable to execute dex: method ID not in [0, 0xffff]: 65536
  4. Решил добавить поддержку multiDex в мой проект, так как уменьшение зависимости не было возможным

С тех пор я продолжаю получать описанную ошибку сразу после добавления multiDex в свой проект, следуя этой SO записи Использование Gradle для разделения внешних библиотек в отдельные файлы dex для устранения ограничения методов Android Dalvik 64k .

Вот мой файл build.gradle:

apply plugin: 'com.Android.application'

repositories {
    jcenter()
}

Android {
    compileSdkVersion 21
    buildToolsVersion '21.1.0'

    defaultConfig {
        applicationId "com.stackoverflow.application"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
        multiDexEnabled = true
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }

    dexOptions {
        preDexLibraries = false
    }
}

afterEvaluate {
    tasks.matching {
        it.name.startsWith('dex')
    }.each { dx ->
        if (dx.additionalParameters == null) {
            dx.additionalParameters = []
        }
        dx.additionalParameters += '--multi-dex'
        dx.additionalParameters += "--main-dex-list=$projectDir/<filename>".toString() // enable the main-dex-list
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':viewPagerIndicatorLibrary')
    compile 'com.google.Android:multidex:0.1'
    compile 'com.j256.ormlite:ormlite-Android:4.48'
    compile 'com.j256.ormlite:ormlite-core:4.48'
    compile 'de.greenrobot:eventbus:2.2.1'
    compile 'se.emilsjolander:stickylistheaders:2.5.1'
    compile 'joda-time:joda-time:2.5'
    compile 'com.makeramen:roundedimageview:1.4.0'
    compile 'javax.inject:javax.inject:1'
    compile 'com.squareup.picasso:picasso:2.3.4'
    compile 'com.googlecode.libphonenumber:libphonenumber:6.3.1'
    compile('com.google.api-client:google-api-client-gson:1.18.0-rc') {
        exclude module: 'httpclient'
    }

    compile 'com.google.Android.gms:play-services:6.1.71'
    compile('com.google.api-client:google-api-client:1.17.0-rc') {
        exclude(group: 'xpp3', module: 'xpp3')
        exclude(group: 'org.Apache.httpcomponents', module: 'httpclient')
        exclude(group: 'junit', module: 'junit')
        exclude(group: 'com.google.Android', module: 'Android')
    }
    compile('com.google.api-client:google-api-client-Android:1.17.0-rc') {
        exclude(group: 'com.google.Android.google-play-services', module: 'google-play-services')
    }
    compile('com.google.http-client:google-http-client-Android:1.17.0-rc') {
        exclude(group: 'com.google.Android', module: 'Android')
    }
    compile 'com.google.guava:guava:18.0'
}

У меня также есть другие зависимости проекта для использования библиотеки viewPagerIndicator, а также несколько jar-файлов в папке my/libs:

  • Android-асинхронный HTTP-1.4.6.jar
  • guice-3,0-no_aop.jar
  • jsr305-1.3.9.jar
  • roboguice-2.0.jar

Любые советы о том, как я могу решить эту проблему, не удаляя ни одной из моих необходимых зависимостей, приветствуются!

50
Aymeric

Edit: это ошибка, и исправление необходимо. См. https://code.google.com/p/Android/issues/detail?id=81804

У меня тоже есть эта проблема, и у меня нет ответа. Но вот что я могу добавить:

Класс BuildConfig - это магический класс, сгенерированный как часть процесса сборки. По какой-то причине существует версия с одинаковым полным именем (Android.support.multidex.BuildConfig) как в mutildex-1.0.0, так и multidex-instrumentation-1.0.0 aars.

Я не верю, что мы сделали что-то не так. Я думаю, что это симптом того, что ты на переднем крае. Я поднял сообщение об ошибке .

13
Synesso

Тема немного старая, но я тоже получил эту ошибку.

Моя проблема заключалась в том, что я использовал две разные Com.google.Android.gms: версии play-services в моем файле gradle.

compile 'com.google.Android.gms:play-services-gcm:7.5.0'
compile 'com.google.Android.gms:play-services-analytics:7.3.0' // WRONG!

Убедитесь, что вы всегда используете одни и те же версии, такие как:

compile 'com.google.Android.gms:play-services-gcm:7.5.0'
compile 'com.google.Android.gms:play-services-analytics:7.5.0'
32
Dennis Allert

Чтобы диагностировать и исправить эту проблему, выполните команду gradle:

./gradlew clean app:dependencies

это перечислит все зависимости в вашем приложении в дереве. Найдите результаты для дублирующего класса и добавьте 

compile('naughty.library') {
    exclude group: 'foo', module: 'bar'
}

удалить дубликат.

12
bsautner

У меня недавно была эта ошибка, и после просмотра моих «Внешних библиотек» в Android-студии выяснилось, что одна из моих библиотек была включена под двумя номерами версий. (В данном случае это были проводные версии 1.5.1 и 1.5.2).

Я бы порекомендовал заглянуть внутрь «Внешних библиотек» в представлении «Проект» и посмотреть, есть ли там лишние библиотеки. Он также включает транзитивные зависимости, так что вы можете найти там что-то, что вас удивит.

6
Aaron Sarazan

1. обновить сервис Google Play

2.Add

compile 'com.google.Android.gms:play-services-fitness:8.1.0'
compile 'com.google.Android.gms:play-services-wearable:8.1.0'

вместо compile 'com.google.Android.gms:play-services:8.1.0'

в файле build.gradle.

3.

defaultConfig {
    multiDexEnabled true
}

dependencies {
    compile 'com.Android.support:multidex:1.0.1'
}
3
Sanjoy Saha

В моем случае причина была в Android Android SDK. Просто исключите переходную зависимость:

compile('com.facebook.Android:facebook-Android-sdk:+') {
    exclude group: 'com.Android.support', module: 'multidex'
}

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

1
mixel

Этот тип ошибки, такой как повторяющаяся запись, возникает, когда какой-то класс находится в нескольких местах. Чтобы преодолеть эту проблему, просто найдите класс, который показывает повторяющиеся записи в проекте. Он покажет вам все пути, где этот класс представлен более чем в одном месте. В Windows CNTRL + N - это сочетание клавиш для поиска в файлах. Просто попробуйте удалить один из lib или файл, и проблема решена.

0
Mahendra Chhimwal

Вы добавляете такую ​​библиотеку 
(А). скомпилировать файлы ('libs/YOUR_LIBRARY.jar')
и этот пакет библиотеки уже доступен в вашем коде. 
Прокомментируйте как или удалите эту строку 
// компилируем файлы ('libs/YOUR_LIBRARY.jar')

Как узнать дубликат-копию библиотеки в вашем проекте:
Разархивируйте ваш "YOUR_LIBRARY.jar" и увидите то же имя класса в вашем коде. 

0
Satendra Behre

Если вы включаете multiDex, вам следует прекратить выполнять логику в afterEvaluate {}. Поддержка multi-dex позаботится о главном списке dex для вас.

0
Xavier Ducrohet
tools:overrideLibrary="com.google.Android.gms.location, com.google.Android.gms.internal"

Сделал трюк для меня (я думаю, вы должны изменить местоположение с любой библиотекой Google, которую вы используете)

0
Meltzer