Gradle завершен с ненулевым значением выхода 1 (ic_launcher.png: ошибка: дубликат файла)

Я получил эту странную ошибку с Gradle, пожалуйста, помогите мне!

/.../app/build/intermediates/res/debug/drawable-xxhdpi-v4/ic_launcher.png:
    error: Duplicate file
/.../app/build/intermediates/res/debug/drawable-xxhdpi/ic_launcher.png:
    Original is here. The version qualifier may be implied.
Error:Execution failed for task ':app:processDebugResources'.
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException:
Process 'command '/.../sdk/build-tools/22.0.1/aapt'' finished with non-zero exit value 1

Прежде чем он работал нормально, но так как я поставил classpath com.android.tools.build:gradle:1.2.2, это вызывает у меня ошибки

13 ответов

Решение

Понижение до com.android.tools.build:gradle:1.1.3 разгромило мою проблему

Согласно объяснению Ксавье Дюроке о G +, это связано с тем, что одна из используемых вами библиотек имеет свою собственную ic_launcher.png - что они, конечно, не должны (подробнее об этом внизу).

Скорее всего, две иконки, упомянутые в журнале, разные: одна ваша, а другая, скорее всего, общая иконка андроида, которую кто-то забыл удалить из библиотеки.

Чтобы увидеть оскорбительную зависимость, нажмите Ctrl + Shift + N дважды (для сопоставления без проекта) и введите ic_launcher.png (См. Последнюю строку на скриншоте)

Чтобы временно обойти проблему, добавьте -v4 квалификатор для ваших нарисованных папок ресурсов (или просто переместите ic_launcher.pngв*dpi-v4 если у вас есть причины) - кредиты Xavier Ducrohet для решения. Вы также можете просто переименовать свою иконку во что-то другое и внести соответствующие изменения вAndroidManifest.xml

Реальная проблема заключается в том, что нарушающая библиотека содержит ненужные значки. Библиотеки, которые имеют свои собственные ресурсы (такие как ActionBarSherlock или собственная библиотека Google Support v7), используют отличительные схемы именования, чтобы избежать конфликтов с именами ваших ресурсов (abs_,abc_).

Значки запуска не имеют никакого смысла в нахождении в библиотеке, поэтому я рекомендую вам уведомить автора используемой вами библиотеки о том, что они забыли удалить избыточныйic_launcher.pngфайлы.

Также стоит упомянуть, как Барри Кэрролл очень точно отметил в том же обсуждении, это не означает, что ваши ресурсы никогда не должны перекрывать ресурсы в библиотеке: есть многозаконных причин для переопределения ресурсов библиотеки своими (например, изменение внешнего вида). действия, предоставляемого библиотекой), и логика слияния ресурсов подключаемого модуля действительно позволяет это специально.

Просто в данном конкретном случае конфликт возникает, когда lib отстает в версии плагина Android Gradle (до 1.2.2), и в этом случае ресурсы оказываются в двух разных*dpiпапки - с и без-v4классификатор; но они фактически находятся в одном и том же "ресурсе", поэтому система считает их дубликатами.

Этот глюк выявляет бесполезный ic_launcher.png переопределить (на самом деле, столкновение - из-за сбоя), но эта ситуация не всегда плоха для других видов ресурсов.

Т.е. иногда вы намеренно переопределяете ресурс библиотеки, и этот сбой по-прежнему вызывает появление сообщения об ошибке. На этот раз нет реальной проблемы с именами ресурсов, так что временное решение выше или сдерживание версии плагина - путь.

У меня была такая же проблема при использовании сторонней библиотеки (библиотека https://github.com/RomainPiel/Shimmer-android на Github)

Чтобы решить эту проблему, я переместил свои файлы ic_launcher.png из папки drawable в папку mipmap. И проблема решена.

Вот общий метод, чтобы найти проблему:

Бежать

./gradlew build --stacktrace --info

и вы найдете детали ошибок. Я обнаружил свою ошибку: дублирующий класс вызвал ошибку TOP-Level, и удаление дублированного решит проблему.

Для меня простой "чистый проект" и "проект перестройки" сделали свое дело.

Обновитесь до 1.2.3, но убедитесь, что ваш gradle и buildToolsVersion одинаково в вашем проекте и используемых aars.

Если вы используете внешние библиотеки, где вы не можете управлять версией gradle/build: свяжитесь с автором или проверьте источники самостоятельно. В некоторых библиотеках есть неиспользуемые значки запуска, которые вызывают этот конфликт. Удаление этой иконки решит вашу проблему. Идентично названные источники (например, menu.xml) также могут вызывать эту проблему в редких случаях. Простой обходной путь - переименовать ваш ресурс.

В моем случае я добавил апостроф (ы) в файл strings.xml. Проверьте парней на наличие любой такой ошибки, и ее устранение определенно поможет. Это так раздражает, что среда IDE не может правильно отображать ошибку, а делает все ресурсы не синхронизированными.

Я знаю, что это не тот случай, который задают в Вопросе, но ошибка совершенно та же, то есть выполнение Gradle завершается неудачно.

Просто Rename Image (Rightclick on the Image, Select Refactor and select Rename). Это решит проблему, поскольку Проблема возникла как один из library также использует image с same name,

У меня была такая же проблема, и что сработало для меня:

  • переименуйте свою иконку
  • добавлять tools:replace="android:icon" на ваш <application> тег в манифесте

Вы можете попробовать только первый шаг, но у меня все еще были проблемы при объединении файлов манифеста. Таким образом, он должен переопределять любой ресурс, использованный в библиотеке.

Просто переименуйте ic_launcher.png в другое (например, ico_launcher.png)

Перейдите по этой ссылке здесь

Или же

Внести изменения, как это.

repositories {
maven {url "https://clojars.org/repo/"}
}
dependencies {
compile 'frankiesardo:icepick:{{latest-version}}'
**provided** 'frankiesardo:icepick-processor:{{latest-version}}'
}

Мне удалось вызвать эту проблему из-за непоследовательной прописной буквы расширений файлов. У меня было изображение.jpg в одном каталоге для рисования, но изображение с тем же именем файла, но.JPG в другом каталоге для рисования. Имена файлов и каталогов были правильными, а расширения - нет.

Обновление до новейшего подключаемого модуля Gradle 1.5.0 решило эту проблему. Обновите следующий скрипт в вашем корне build.gradle файл

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
    }
    ...
}
Другие вопросы по тегам