Intereting Posts
WebView java.lang.SecurityException: нет разрешения на изменение данного потока Android Studio: интеграция Butterknife? Как начать новую строку с места для следующей строки в Html.fromHtml для просмотра текста в android Поддельный входящий звонок Android Как добавить (вертикальный) разделитель в горизонтальный LinearLayout? Элемент View Recycler заполняет всю высоту просмотра ресайклера после обновления библиотеки поддержки с "23.1.1" до "23.2.1" Как скрыть один элемент в Android Spinner Android.content.res.Resources $ NotFoundException: Не удается найти идентификатор ресурса # 0xffffffff Вручную установите Gradle и используйте его в Android Studio Ошибка раздувания фрагмента в диалоге второй раз Получение DrawerLayout для перемещения по ActionBar Разработка приложения похожа на «Google сейчас» – возможно ли использовать распознавание голоса без ввода ключа? Android: как я могу сказать, отображается ли мягкая клавиатура или нет? Android: вызов методов в потоке пользовательского интерфейса из метода AsyncTask doInBackground Знаки оси Force BarChart Y являются целыми числами?

Предупреждения 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]) 

В этом проекте есть пара модулей, и на 2 из них используется android-support-v13.jar . Я думал, что это проблема, поэтому я удалил эту библиотеку из папки libs, добавил ее в качестве библиотеки проектов и добавил зависимость для обоих модулей. Это ничего не решило, предупреждение сохраняется, и я не понимаю, почему.

Я знаю, что эти предупреждения ничего не влияют, но чистая сборка – это счастливая конструкция!

Solutions Collecting From Web of "Предупреждения Proguard "не могут писать ресурс (Дублирование записи zip)""

Возможно, проблема «proguard.cfg». Включает ли он какие-либо «-инджеры»? Если ваш проект включает другой проект в качестве библиотеки, банки могут обрабатываться дважды. Не могли бы вы разместить свой «proguard.cfg»?

Выдержка из http://proguard.sourceforge.net/index.html#manual/troubleshooting.html :

Ваши входные банки содержат несколько файлов ресурсов с тем же именем. ProGuard продолжает копировать файлы ресурсов, как обычно, пропуская любые файлы с ранее использованными именами. Еще раз предупреждение может быть признаком некоторой проблемы, хотя, поэтому рекомендуется удалить дубликаты. Удобный способ сделать это – указать фильтры на входных баночках. Невозможно отключить эти предупреждения.

ОПЦИЯ 1:

Поскольку вы не можете публиковать свои «-injars», проверьте, включают ли они «android-support-v13.jar» или библиотеку, включенную в ваш проект, которая также включает в себя «android-support-v13.jar».

Предполагая, что вы работаете с Ant внутри IntelliJ IDEA, вы не должны добавлять опции -injars, -outjars или -libraryjars; Сценарий Ant уже делает это для вас.

ВАРИАНТ № 2:

Хотя предупреждения безвредны, чистая сборка – это счастливая сборка, поэтому попробуйте:

http://www.dancartoon.com/2012/01/14/fixing-proguard-warning-cant-write-resource-meta-infmanifest-mf/

а также

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) на что-то похожее здесь .

Лучшее решение, которое я нашел, это скопировать цель -obfuscate из /tools/ant/build.xml в custom_rules.xml вашего проекта. Затем необходимо изменить только один блок:

 <pathconvert property="project.all.classes.value" refid="project.all.classes.path"> <firstmatchmapper> <regexpmapper from='^([^ ]*)( .*)$$' to='"\1\2"(!META-INF/MANIFEST.MF)'/> <identitymapper/> </firstmatchmapper> </pathconvert> 

Единственным добавленным битом является (!META-INF/MANIFEST.MF) . Это исключает все файлы манифеста, которые в любом случае не будут скопированы в окончательный APK.

Я использовал 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 .

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

Dependments {compile 'com.android.support:support-v13:XXX'}, где XXX – это правильный номер версии, основанный на том, с каким API вы компилируете. Если вы включите эту зависимость через пользовательский интерфейс в структуре проекта> (ваш модуль)> «Зависимости»> «Кнопка»> «Зависимость от библиотеки», это поможет вам выбрать правильный номер версии.

Вы также можете считать удобным включить другие зависимости через координаты Maven вместо того, чтобы спорить с их банками; Тот же пользовательский интерфейс зависимостей библиотеки имеет функцию поиска, которая поможет вам находить библиотеки.

Не забудьте удалить эту библиотеку из libs или любой другой папки, в которой она находилась внутри

Add -dontwarn to proguard.cfg игнорировать предупреждения