Предупреждения Proguard “не могут писать ресурс (Дублирование записи в zip)”
Я использую IntelliJ и запускаю Proguard в режиме отладки, но я не могу избавиться от таких предупреждений, как:
ProGuard: [MyApplication] Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [android-support-v13.jar:META-INF/MANIFEST.MF])
В этом проекте имеется несколько модhive, а для 2 из них используется android-support-v13.jar
. Я подумал, что это проблема, поэтому я удалил эту библиотеку из папки libs, добавил ее в качестве библиотеки проектов и добавил зависимость для обоих модhive. Это ничего не решило, предупреждение сохраняется, и я не понимаю, почему.
Я знаю, что эти предупреждения не влияют ни на что, но чистая assembly – счастливая конструкция!
- Вставить библиотеку Zxing без использования приложения сканера штрих-кода
- Простой пример использования и в XML-макетах Android
- Есть ли способ автоматически обновлять приложение на Android?
- Как установить текст в EditText
- Lazy загружает изображения в gridView
- Android настроенная кнопка; изменение цвета текста
- Есть ли простой пример classа PopupWindow с помощью Android v2.0?
- Android ADB прекратит применение команды, например, «force-stop» для ненарушенных устройств
- Как остановить stream?
- Как поместить изображение в AlertDialog? Android
- Получать MMS-сообщения в Android KitKat
- Как изменить название пакета Android Project в Eclipse?
- Использование CursorLoader без ContentProvider
Возможно, проблема «proguard.cfg». Включает ли он какие-либо «-инджары»? Если ваш проект включает в себя другой проект в качестве библиотеки, банки могут обрабатываться дважды. Не могли бы вы разместить свой «proguard.cfg»?
Выдержка из http://proguard.sourceforge.net/index.html#manual/troubleshooting.html :
Ваши входные банки содержат несколько файлов ресурсов с тем же именем. ProGuard продолжает копировать файлы ресурсов, как обычно, пропуская любые файлы с ранее использованными именами. Еще раз предупреждение может быть признаком некоторой проблемы, хотя, поэтому рекомендуется удалить дубликаты. Удобный способ сделать это – указать фильтры на входных баночках. Невозможно отключить эти предупреждения.
ОПЦИЯ 1:
Если вы не можете опубликовать свои «-injars», проверьте, include ли они «android-support-v13.jar» или библиотеку, включенную в ваш проект, которая также включает в себя «android-support-v13.jar».
Предполагая, что вы работаете с Ant внутри IntelliJ IDEA, вы не должны добавлять опции -injars, -outjars или -libraryjars; скрипт Ant уже делает это для вас.
ВАРИАНТ № 2:
Хотя предупреждения безвредны, чистая assembly – это счастливая assembly, поэтому попробуйте:
а также
https://gist.github.com/paulpv/4439012
ВАРИАНТ № 3:
Включить (!META-INF/MANIFEST.MF)
после каждой команды ‘-injars’
-injars library.jar(!META-INF/MANIFEST.MF)
ВАРИАНТ № 4: Дублирующее определение Android Proguard
Исправлено это, переместив сторонние библиотеки в другой каталог, в моем случае «lib». Затем добавили
-injars lib/jmdns.jar
в файл proguard.cfg.
ВАРИАНТ № 5: Android – ошибка повторной записи zip-защиты Proguard
Если ваш конфигурационный файл Proguard включает следующую строку, удалите его:
-injars bin/classes
ВАРИАНТ № 6: Android obfuscate приложение, использующее proguard, поддерживает обфускацию библиотечных банок – или это так?
Я нашел еще один способ заставить библиотеки Proguard оставить библиотеку в одиночку, чтобы попросить ее сохранить имена своих пакетов, например:
-keep class javax. ** {*; } -keep class org. ** {*; } -keep class twitter4j. ** {*; }
ВАРИАНТ № 7:
Странное решение (удаление папки META-INF в папке src) на что-то похожее здесь .
Я использовал build.gradle
с exclude
в build.gradle
, и у меня такие же проблемы с вами.
Вы можете исправить это, используя это.
packagingOptions { pickFirst 'META-INF/services/javax.annotation.processing.Processor' pickFirst 'META-INF/DEPENDENCIES.txt' pickFirst 'META-INF/DEPENDENCIES' pickFirst 'META-INF/LICENSE.txt' pickFirst 'META-INF/LICENSE' pickFirst 'META-INF/NOTICE.txt' pickFirst 'META-INF/NOTICE' pickFirst 'META-INF/LGPL2.1' }
Замените pickFirst
с exclude
.
Лучшее решение, которое я нашел, это скопировать цель -обновить с /tools/ant/build.xml в custom_rules.xml вашего проекта. Затем необходимо изменить только один блок:
Единственным добавленным битом является (!META-INF/MANIFEST.MF)
. Это исключает все файлы манифеста, которые в любом случае не будут скопированы в окончательный APK.
Не ссылайтесь на библиотеку поддержки, включив ее банку напрямую; когда вы это делаете, система сборки не может устранить неоднозначность между несколькими версиями, и вы получаете ошибки этого типа. Включите его, указав его координаты Maven:
зависимостей {compile ‘com.android.support:support-v13:XXX’}, где XXX – это правильный номер версии, основанный на том, с каким API вы компилируете. Если вы включите эту зависимость через пользовательский интерфейс в структуре проекта> (ваш модуль)> «Зависимости»> «Кнопка»> «Зависимость от библиотеки», это поможет вам выбрать правильный номер версии.
Вам также может быть удобно включать другие зависимости через координаты Maven вместо того, чтобы спорить с их баночками; тот же пользовательский интерфейс зависимостей библиотеки имеет функцию поиска, которая поможет вам найти библиотеки.
обязательно удалите эту библиотеку из библиотек или любой другой папки, в которой она была
add -dontwarn
to proguard.cfg игнорировать предупреждения