Ответ 1
Переход на com.android.tools.build: gradle: 1.1.3 перенесла мою проблему
Я получил эту странную ошибку с 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, это вызывает ошибки
Переход на com.android.tools.build: gradle: 1.1.3 перенесла мою проблему
Согласно объяснение Xavier Durochet на G +, это связано с тем, что одна из библиотек использует собственный ic_launcher.png
- который они конечно, не следует (подробнее об этом внизу).
Скорее всего, два значка, упомянутые в журнале, различны: один принадлежит вам, а другой, скорее всего, является общим символом андроида, который кто-то забыл удалить из библиотеки.
Чтобы увидеть оскорбительную зависимость, дважды нажмите Ctrl + Shift + N
(для сопоставления без проекта) и введите ic_launcher.png
(см. последнюю строку на снимке экрана)
Чтобы временно решить проблему, добавьте квалификатор -v4
в ваши доступные папки для переноса (или переместите только ic_launcher.png
в *dpi-v4
, если у вас есть причины) - кредиты Xavier Durochet для решения. Вы также можете просто переименовать свой значок в другое и внести соответствующее изменение в AndroidManifest.xml
Реальная проблема заключается в том, что оскорбительная библиотека содержит бесполезные значки. Библиотеки, у которых есть свои собственные ресурсы (например, ActionBarSherlock или собственная библиотека поддержки V7 от Google), используют отличительные схемы именования, чтобы избежать столкновений с вашими именами ресурсов (abs_
, abc_
).
Значки Launcher не имеют никакого бизнеса в библиотеке, поэтому я рекомендую вам уведомить автора используемого вами lib, что они забыли удалить избыточные ic_launcher.png
файлы.
Также стоит упомянуть, поскольку Барри Кэрролл очень точно отметил в та же самая дискуссия, это не означает, что ваши ресурсы никогда не должны перекрывать те, что находятся в библиотеке: существует множество законных причин переопределять ресурсы lib с помощью собственных (например, изменение внешнего вида деятельности, предоставляемой библиотекой) и gradle логика объединения ресурсов плагина позволяет это специально.
Именно в этом конкретном случае конфликт возникает, когда lib стоит в версии плагина android gradle (pre-1.2.2), и в этом случае ресурсы попадают в две разные папки *dpi
- с и без квалификатора -v4
; но они фактически находятся в одном и том же ресурсном "ведре", поэтому система считает их дублирующими.
Этот глюк вызывает бесполезное переопределение ic_launcher.png
(на самом деле, столкновение - из-за сбоя), но эта ситуация не является универсальной для других видов ресурсов.
т.е. иногда вы намеренно переопределяете ресурс lib, и этот сбой по-прежнему вызывает сообщение об ошибке. На этот раз нет реальной проблемы с именами ресурсов, поэтому временное решение выше или сдерживание версии плагина - это путь.
У меня была такая же проблема при использовании сторонней библиотеки. (RomainPiel/Shimmer-android библиотека на Github)
Чтобы решить эту проблему, я переместил файлы ic_launcher.png из папки с возможностью переноса в папку mipmap. И проблема решена.
Вот общий метод для поиска проблемы:
Запустить
./gradlew build --stacktrace --info
и вы найдете подробные сведения об ошибках. Я нашел свою ошибку: дублированный класс вызвал ошибку верхнего уровня, и удаление дублированного решения решит проблему.
Для меня простой "чистый проект" и "перестроить проект" сделали трюк.
Обновите до 1.2.3, но убедитесь, что ваши gradle и buildToolsVersion идентичны в вашем проекте и используемых арах.
Если вы используете внешние библиотеки, в которых вы не можете управлять версией gradle/build: Свяжитесь с автором или проверьте источники по своему усмотрению. В некоторых библиотеках есть неиспользуемые значки запуска, которые вызовут этот конфликт. Удаление этих значков поможет решить вашу проблему. Идентичные источники (например, menu.xml) также могут вызвать эту проблему в редких случаях. Легким обходным решением было бы переименование вашего ресурса.
Просто переименуйте ic_launcher.png в нечто другое (например, ico_launcher.png)
В моем случае я добавил apostrophe s (s) в файл strings.xml. Проверяйте ребят за любую такую ошибку и удаляйте ее, безусловно, поможет. Это так раздражает, что IDE не может корректно отобразить ошибку, а делает все ресурсы несинхронизируемыми.
Я знаю, что это не тот случай, который задан в вопросе, но ошибка такая же, i.e. Gradle выполнение не получилось.
Просто Rename
Image
(Rightclick on the Image, Select Refactor and select Rename
). Это решит проблему, поскольку проблема возникла, поскольку один из library
также использует Image
с same name
.
У меня была одна и та же проблема, и для меня это работало:
tools:replace="android:icon"
в тэг <application>
в манифестеВы можете попробовать только первый шаг, но у меня все еще были проблемы при объединении файлов манифеста. Таким образом, он должен переопределить любой ресурс, используемый в библиотеке.
Следуйте по этой ссылке Здесь
или
Сделайте изменение следующим образом.
repositories {
maven {url "https://clojars.org/repo/"}
}
dependencies {
compile 'frankiesardo:icepick:{{latest-version}}'
**provided** 'frankiesardo:icepick-processor:{{latest-version}}'
}
Обновление до новейшего gradle плагина 1.5.0 разрешило эту проблему. Обновление после script в корневом файле build.gradle
buildscript {
...
dependencies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
...
}
Мне удалось вызвать эту проблему из-за несогласованной капитализации расширений имени файла. У меня было изображение .jpg в одном рисоваемом каталоге, но изображение того же имени файла, но .JPG в другой доступной директории. Имена файлов и каталоги были правильными, но расширения не были.