Двойная запись Zip после Gradle Plugin v0.13.1

Я использовал плагин Gradle Android v0.12, но я решил обновить его до новой версии, потому что мне нужны были новые функциональные возможности (а улучшенная скорость всегда плюс).

После обновления до нового v0.13.1 я продолжаю получать "Duplicate Zip Entry" (от Proguard), пока все работало раньше. Полная ошибка:

java.io.IOException: Не могу написать [/Users/.../classes-proguard/net Netherlands/release/classes.jar] (Не могу прочитать [/Users/.../.gradle/caches/modules-2/files-2.1/org.apache.commons/commons-io/1.3.2/b6dde38349ba9bb5e6ea6320531eae969985dae5/commons-io-1.3.2.jar(;;;;;;!META-INF/MANIFEST.MF)] (дубликат zip entry [commons-io-1.3.2.jar:org/apache/commons/io/CopyUtils.class])) (ранее CopyUtils был FileUtils).

Я использую следующие варианты упаковки:

{ 
   exclude 'AndroidManifest.xml' 
   exclude 'META-INF/DEPENDENCIES' 
   exclude 'META-INF/notice.txt' 
   exclude 'META-INF/license.txt' 
   exclude 'META-INF/LICENSE.txt' 
   exclude 'META-INF/NOTICE.txt' 
   exclude 'META-INF/MANIFEST.MF' 
   exclude '!META-INF/MANIFEST.MF' 
   exclude 'META-INF/services/javax.annotation.processing.Processor' 
}

Как вы можете сказать, я исключаю файлы манифеста...

Просто чтобы проверить это, я переключился обратно на версию 0.12.0, и все снова работает, обратно на 0.13.* И оно ломается (но мне нужно 0.13.*)!

Далее я использую следующие библиотеки:

  1. Robospice
  2. модифицировать
  3. OkHttp
  4. дротик
  5. Ледоруб
  6. Нож для масла
  7. гренок для супа
  8. SmoothProgressBar
  9. NineoldsAndroid (в библиотеке BetterPickers)

Кто-нибудь тоже сталкивался с этой проблемой? Если да, может ли кто-нибудь помочь мне (я ломаю голову над этим вопросом уже 2 дня!)? Спасибо!

4 ответа

Решение

У меня была такая же проблема при обновлении до плагина Android Gradle 0.13. Мне удалось это исправить, в том числе retrofit таким образом в моем build.gradle файл:

compile('com.squareup.retrofit:retrofit:1.6.1') {
    exclude group: 'commons-io', module: 'commons-io'
}

Изменить: и может сделать это на всех retrofit а также robospice Зависимости сразу с:

compile('com.octo.android.robospice:robospice-retrofit:1.4.14') {
    exclude group: 'commons-io', module: 'commons-io'
}

Он получит все основные зависимости автоматически (retrofit, robospice-core, robospice-cache...)

Я была такая же проблема. В моем случае я не делал сборки в течение нескольких месяцев и обнаружил, что зависимость compile 'org.apache.commons:commons-io:1.3.2' больше не действителен (хотя я думаю, что банки все еще были в моем локальном хранилище).

Однажды я изменил это на compile 'commons-io:commons-io:1.3.2'ProGuard работает нормально.

Используя ответ CjS, я смог решить эту проблему. Даже Gaetan Ответ тоже работает.

В дополнение к этому я решил проблему с помощью этого, если ваш compileSdkVersion равен 19(В моем случае)

compile ('org.apache.httpcomponents:httpmime:4.3'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile ('org.apache.httpcomponents:httpcore:4.4.1'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile 'commons-io:commons-io:1.3.2'

иначе, если ваш compileSdkVersion равен 23, используйте

android {
useLibrary 'org.apache.http.legacy'
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    }
}

Проблема в библиотеках, которые вы используете.

Добавить в Gradle файл:

android {
    packagingOptions {
        exclude 'META-INF/DEPENDENCIES'
        exclude 'META-INF/notice.txt'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
    }
}
Другие вопросы по тегам