Gradle закінчено із ненульовим значенням виходу 1 (ic_launcher.png: помилка: дублікат файлу)


75

Я отримав цю дивну помилку з 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 , це спричиняє помилки


5
На даний момент останнім стабільним плагіном gradle є 1.1.3. Використай це.
Габріеле Маріотті

Так, перехід до com.android.tools.build:gradle:1.1.3 вирішив мою проблему, дякую!
Fayçal

1
Коротше: це через ic_launcherдублікати. Позбудьтеся від них - видаліть або перейменуйте
Ujjwal Singh

Посилання на адресу: stackoverflow.com/questions/29249986/…
Пранава

Відповіді:


109

Згідно з поясненням Ксав'єра Дуроше на G + , це пов'язано з тим, що одна з бібліотек, яку ви використовуєте, має свою власну ic_launcher.png- чого вони, звичайно, не повинні (докладніше про це внизу).

Швидше за все, дві іконки, згадані в журналі, різні: одна ваша, а інша, швидше за все, загальна піктограма андроїда, яку хтось забув видалити з бібліотеки.

Щоб побачити порушувальну залежність, натисніть Ctrl + Shift + N двічі (для відповідності непроекту) та введіть ic_launcher.png(див. Останній рядок на скріншоті) введіть тут опис зображення

Щоб тимчасово обійти проблему , додайте -v4кваліфікатор до своїх папок із ресурсами, які можна малювати (або перейдіть просто ic_launcher.pngдо, *dpi-v4якщо у вас є причини) - кредити Ксав'є Дюрошету за рішення. Ви також можете просто перейменувати свою піктограму в щось інше і внести відповідні зміни вAndroidManifest.xml

введіть тут опис зображення

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

Піктограми панелі запуску не знаходяться в бібліотеці, тому я закликаю вас повідомити автора бібліотеки, яку ви використовуєте, про те, що він забув видалити зайві ic_launcher.pngфайли.

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

Просто в цьому конкретному випадку конфлікт виникає, коли lib відстає у версії плагіна android gradle (до 1.2.2), у цьому випадку ресурси потрапляють у дві різні *dpiпапки - з і без -v4кваліфікатора; але вони насправді знаходяться в одному "відрі" ресурсу, тому система вважає їх дублікатами.

Ця помилка виявляє марну ic_launcher.pngперевизначення (насправді, зіткнення - через помилку), але ця ситуація не є загально поганою для інших видів ресурсів.

Тобто іноді ви навмисно перевизначаєте ресурс бібліотеки, і ця помилка все одно спричинить появу повідомлення про помилку. Цього разу реальних проблем з іменами ресурсів немає, тому тимчасове рішення вище або стримування версії плагіна - це шлях.


2
Крім того, відновлення цієї самої бібліотеки за допомогою найновіших інструментів gradle / build також вирішить проблему.
danb

Я майже впевнений, що моє налаштування є сучасним: інструменти побудови v 22.0.1, gradle v 1.2.2
Іван Барцов

UPD, відновлення бібліотеки , вибачте, неправильно прочитав це на перший погляд :) Це було б пропозицією для авторів бібліотеки у моєму випадку. Просто цікаво - будь-яка ідея, чому це вирішує проблему? Чи є у бібліотеці відновлення можливість розміщення матеріалів drawable-*dpiбез -v4суфікса? Якщо я правильно зрозумів Ксав'єра, є помилка між gradleі aapt, aaptслід помістити -v4в ресурси нашого додатку, але ні - тому ми отримуємо 2 пари папок. Отже, після aaptоновлення ми все одно отримаємо -v4папки, і бібліотеку доведеться знову перебудувати, так?
Іван Барцов

Я розумію, що плагін gradle раніше додавав -v4, а зараз ні. Отже, поки ви використовуєте версії з обох сторін, які або додають / не додають -v4, все працює нормально. Але цілком можливо, я неправильно зрозумів :) у будь-якому випадку я відновив одну з наших бібліотек за допомогою найновіших матеріалів, і проблема пішла.
danb

також переконайтеся, що ваш AndroidManifest.xml не містить неправильного посилання на піктограму програми. Іноді ic_launcher.png міг знаходитись у mipmap / а не у розвідних файлах /
IHeartAndroid

27

У мене була така сама проблема під час використання сторонньої бібліотеки. ( RomainPiel / Shimmer-android library на Github)

Для його вирішення я перемістив свої файли ic_launcher.png із папки, яку можна малювати, у папку mipmap. І проблема вирішена.

введіть тут опис зображення


1
Омг Кен, ти врятував мою хафт день і півночі. Щиро дякую;)
Khai Nguyen

2
це повинна бути правильна відповідь! Потім на «Маніфесті» змініть логотип або піктограму з правильним файлом: @ mipmap / ic_launcher
Guilherme Simão Couto

У новіших версіях android studio / gradle вам потрібно помістити ic_launcher всередину папок mipmap, навіть якщо там немає бібліотек, які його використовують (це вирішить помилку).
Сагітс

це має бути прийнятою відповіддю, якщо оновлення через розрив між інструментом побудови раніше від 23 до 23+
том шляхтич

19

Перехід до com.android.tools.build:gradle:1.1.3 вирішив мою проблему


у мене 1.2.3 і досі така сама проблема
Акшай

@Akshay спробуйте з 1.1.3
Fayçal

Хм, я розумію, про що ви говорите .. отже, це студійний баг?
Акшай

@Akshay Я не знаю вибач: /
Файсал

13
А що таке ДОБРЕ рішення?
Fayçal,

14

Ось загальний метод пошуку проблеми:

Біжи

./gradlew build --stacktrace --info

і Ви знайдете деталі помилок. Я знайшов свою помилку: дублікат класу спричинив помилку ТОП-рівня, а видалення дубльованого вирішить проблему.


@Praveen Радий допомогти вам.
herbertD

1
Дякую, це мені допомогло. Це найбільш корисна відповідь, оскільки для цієї проблеми існує кілька джерел.
біодів

10

Для мене простий "чистий проект" і "проект відновлення" зробив свою справу.


Це працювало для мене, але використовувало, ./gradlew cleanтому що я працював на Дженкінса. Дякую!
epool

2

Оновіть до версії 1.2.3, але переконайтеся, що ваш gradle та buildToolsVersion однаково відповідають вашому проекту та використаному aars.

Якщо ви використовуєте зовнішні бібліотеки, де ви не можете контролювати версію gradle / build: зв’яжіться з автором або перевірте джерела самостійно. У деяких бібліотеках є невикористані піктограми панелі запуску, що спричинить цей конфлікт. Видалення цих піктограм вирішить вашу проблему. Ідентично названі джерела (наприклад, menu.xml) також можуть спричинити цю проблему в рідкісних випадках. Простим обхідним шляхом було б перейменувати ваш ресурс.


Це вирішило мою проблему (а також говорить про відповідь Івана Барцова вище в розділі "Варто згадати"). У проекті бібліотеки (який я імпортував з Eclipse) у його build.gradle було визначено старішу "buildToolsVersion". Це спричинило помилку gradle із сміттям "дубліката файлу" під час створення додатків, що використовували цю бібліотеку. Переконавшись, що "buildToolsVersion" бібліотеки був таким самим, як і "buildToolsVersion" gradle, програма перестала "бути проклятим gradle" і зібрала всі версії OK. Чи не існує перевірки ворсинок чи чогось іншого, щоб дати кращий опис помилки?
dell116

1

Просто перейменуйте ic_launcher.png на щось інше (наприклад, ico_launcher.png)


Якщо ви використовуєте кілька бібліотек, кожна з яких має ic_launcher, це не рішення
Даніель Вілсон,

У мене була та ж проблема з іншим файлом png, який не був ic_launcher, і перейменування вирішило проблему.
Тот Зам

1

У моєму випадку я додав апостроф s ('s) у файл strings.xml. Перевірте хлопців на наявність такої помилки і видаліть це, безумовно, допоможе. Це так дратує, що IDE не може правильно показати помилку, а робить усі ресурси несинхронізованими.

Я знаю, що це не той випадок, який задається у Запитанні, але помилка зовсім однакова, тобто виконання Gradle не вдається.


1

Просто ( ). Це вирішить проблему, оскільки проблема виникла, оскільки одна з них також використовує за допомогою .RenameImageRightclick on the Image, Select Refactor and select Renamelibraryimagesame name


1

У мене була та ж проблема, і те, що далі, працювало для мене:

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

Ви можете спробувати лише перший крок, але у мене все ще були проблеми при об’єднанні файлів маніфесту. Таким чином він повинен замінити будь-який ресурс, який використовувався в бібліотеці.


0

Перейдіть за цим посиланням тут

Або

Внесіть такі зміни.

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

0

Оновлення до останнього плагіна gradle 1.5.0 вирішило цю проблему. Оновіть наступний сценарій у своєму кореневому build.gradleфайлі

buildscript {
    ...
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
    }
    ...
}

0

Мені вдалося викликати цю проблему через непослідовне написання великих літер розширень імен файлів. У мене було зображення .jpg в одному каталозі, який можна малювати, але зображення з тим самим іменем файлу, але .JPG, в іншому каталозі, що малюється. Імена файлів та каталоги були правильними, але розширення - ні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.