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

Duplicate Zip Entry после Gradle Плагин v0.13.1

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

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

java.io.IOException: Невозможно записать [/Users/.../classes-proguard/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) ] (Duplicate zip entry [commons-io-1.3.2.jar: org/apache/commons/io/CopyUtils.class])) (CopyUtils ранее был FileUtils).

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

{ 
   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. *)!

Кроме того, я использую следующие библиотеки:

  • Robospice
  • Переоборудование
  • OkHttp
  • Дарт
  • щипцы для льда
  • нож для масла
  • Crouton
  • SmoothProgressBar
  • NineoldsAndroid (в библиотеке BetterPickers)

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

4b9b3361

Ответ 1

У меня была такая же проблема при обновлении до 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,...).

Ответ 2

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

Как только я изменил его на compile 'commons-io:commons-io:1.3.2', proGuard побежал нормально.

Ответ 3

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

Добавление к этому Я решил проблему, используя это, если ваша compileSdkVersion равна 19 (IN MY CASE)

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'

else, если ваш 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'
    }
}

Ответ 4

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

Добавить в 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'
    }
}