Intereting Posts
ZXing на Android PDF417 Использование нового идентификатора рекламодателя Android внутри SDK Push-уведомления в платформе Android Поддержка Unicode для Android Не удалось настроить SDK: Ошибка: модуль «приложение»: платформа «Google Inc.:Google APIs: 21» не найден Как поместить RecyclerView под панелью инструментов и над TabLayout и ViewPager также обрабатывать ответы на свитки по-своему? InstantiateItem в PagerAdapter и AddView в замешательстве ViewPager Как получить / бесплатно sdcard пространство в android с командой adb Должен использовать android: showAsAction, если вы не используете библиотеку appcompat Остановка и воспроизведение Android MediaPlayer Как отправить данные с одного устройства Android на другой? Что такое Neon в отношении Android? Сделать Android WebView не хранить файлы cookie или пароли Проверены ли «ожидаемый ресурс типа» Android Studio? Отладчик Android Studio не останавливается на контрольных точках в библиотечных модулях

Android: Дублировать ошибки класса в proguard

При компиляции моего приложения я получаю следующую ошибку (отредактированные уязвимые фрагменты пути)

Execution failed for task ':app:proguardDebug'. > java.io.IOException: Can't write [/projects/app/build/intermediates/classes-proguard/debug/classes.jar] (Can't read [/.gradle/caches/modules-2/files-2.1/commons-codec/commons-codec/1.4/4216af16d38465bbab0f3dff8efa14204f7a399a/commons-codec-1.4.jar(;;;;;;!META-INF/MANIFEST.MF)] (Duplicate zip entry [commons-codec-1.4.jar:org/apache/commons/codec/binary/Base64.class])) 

Это указывает на то, что компилятор видит два места, где приложение пытается использовать commons.codec.binary.Base64.class в качестве зависимости. Я проверил и проверил мои библиотеки снова, но только одна библиотека (Amazon AWS) пытается ее использовать.

Над этой ошибкой, я получаю некоторые другие предупреждения, которые также поднимают красный флаг для меня:

 Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-lang3-3.1.jar:META-INF/LICENSE.txt]) Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-lang3-3.1.jar:META-INF/NOTICE.txt]) Warning:can't write resource [META-INF/LICENSE.txt] (Duplicate zip entry [commons-codec-1.4.jar:META-INF/LICENSE.txt]) Warning:can't write resource [META-INF/NOTICE.txt] (Duplicate zip entry [commons-codec-1.4.jar:META-INF/NOTICE.txt]) 

Я явно не использую commons-codec-1.4 или commons-lang3-3.1 в своем приложении вообще, подумал, что я использовал lang3 до более позднего его удаления. Зачем они ссылаются в журнале компиляции? Может ли одна из моих библиотек maven использовать их? Я включу список библиотек maven ниже в моем файле gradle.

Вот мои файлы proguard и gradle для справки:

Proguard

 -keep class org.w3c.dom.bootstrap.** { *; } -keep class org.joda.time.** { *; } -keep class com.facebook.** { *; } -keep class org.apache.commons.** { *; } -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -dontwarn org.codehaus.jackson.map.ext.** -dontwarn oauth.** -dontwarn com.amazonaws.** -dontwarn org.joda.time.** -dontwarn org.apache.commons.codec.** -dontwarn com.fasterxml.jackson.databind.ext.** 

Gradle

 apply plugin: 'com.android.application' android { compileSdkVersion 20 buildToolsVersion '20.0.0' defaultConfig { applicationId 'com.my.package' minSdkVersion 14 targetSdkVersion 20 versionCode 9 versionName '1.2' } buildTypes { release { debuggable false runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } debug { debuggable true runProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' } } lintOptions { checkReleaseBuilds false } packagingOptions { exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/MANIFEST.MF' } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) //noinspection GradleDependency compile 'com.google.android.gms:play-services:5.0.89' compile 'com.nineoldandroids:library:2.4.0' compile 'com.viewpagerindicator:library:2.4.1@aar' compile 'se.emilsjolander:StickyScrollViewItems:1.1.0' compile 'se.emilsjolander:stickylistheaders:2.5.0' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.2' compile project(':facebook') compile 'com.tumblr:jumblr:0.0.10' compile 'com.android.support:support-v4:20.0.0' } 

Лучше всего предположить, что одна или несколько из этих библиотек используют apache lang3 и кодек в качестве собственных зависимостей, что приводит к конфликту при компиляции приложения. Эта проблема возникает только тогда, когда я включаю Amazon в качестве необходимой банки, поэтому я знаю, что она каким-то образом выступает в качестве виновника, но я не знаю, что еще противоречит ей.

Я читал что-то об использовании -injars с proguard, но, согласно их документации, Android не должен использовать вас.

Любой совет будет очень благодарен, спасибо!

Solutions Collecting From Web of "Android: Дублировать ошибки класса в proguard"

Я не уверен, что это поможет вам или нет, но я отправляю свой ответ здесь, если другие считают это полезным. Моя проблема заключалась в том, что у меня было 2 ссылки в моем описании зависимостей. Я использовал библиотеку Universal Image Loader, и мое заявление выглядело так:

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.android.support:support-v4:22.1.1' compile 'uk.co.chrisjenx:calligraphy:2.0.2' /* UIL was the failing reference */ compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3' compile 'com.google.android.gms:play-services:7.3.0' } 

Проблема с этим я осознал (после того, как наступил удар головой) было то, что я уже упоминал UIL через папку libs (т. compile fileTree(dir: 'libs', include: ['*.jar']) Он уже скомпилирован командой compile fileTree(dir: 'libs', include: ['*.jar']) Поэтому он компилировал его один раз через libs и один раз с помощью явного вызова для компиляции ссылки на UIL. Я удалил явный вызов и очистил ошибку. Возможно, вы вызываете что-то в своей директории libs которая также содержит Ссылку на библиотеку-нарушитель, а затем, когда он пытается скомпилировать службы AWS, у нее уже есть версия библиотеки общин и pukes.

Причиной этой проблемы является дублирование файлов jar.

В своем каталоге проекта попробуйте найти и удалить

/projects/app/build/intermediates/classes-proguard/debug/classes.jar] (Невозможно прочитать [/. Gradle / caches / modules-2 / files-2.1 / commons-codec / commons-codec / 1.4 / 4216af16d38465bbab0f3dff8efa14204f7a399a /commons-codec-1.4.jar

Этот файл jar и посмотреть, что-нибудь изменится. Кроме того, если в этой же или верхней директории есть commons-lang3-3.1.jar, попробуйте удалить это и перестроить.

Надеюсь, поможет!