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.