Ich habe diesen seltsamen Fehler mit gradle, bitte hilf mir!
/.../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
Bevor es normal funktionierte, aber da ich den Klassenpfad com.android.tools.build:gradle:1.2.2 eingefügt habe , verursacht dies Fehler
android-studio
gradle
android-resources
aapt
aar
Back Packer
quelle
quelle
ic_launcher
Duplikaten.Antworten:
Laut Xavier Durochets Erklärung zu G + liegt es daran, dass eine der Bibliotheken, die Sie verwenden, eine eigene hat
ic_launcher.png
- was sie natürlich nicht sollten (mehr dazu unten).Wahrscheinlich unterscheiden sich die beiden im Protokoll genannten Symbole: eines gehört Ihnen und eines ist höchstwahrscheinlich das generische Android-Symbol, das jemand vergessen hat, aus der Bibliothek zu entfernen.
Um die störende Abhängigkeit zu sehen, drücken Sie
Ctrl + Shift + N
zweimal (für Nicht-Projekt-Matching) und geben Sie einic_launcher.png
(siehe letzte Zeile auf dem Screenshot).Um das Problem vorübergehend
-v4
zu umgehen , fügen Sie das Qualifikationsmerkmal zu Ihren zeichnbaren Ressourcenordnern hinzu (oder wechseln Sie einfachic_launcher.png
zu,*dpi-v4
wenn Sie Ihre Gründe haben) - Gutschriften an Xavier Durochet für die Lösung. Sie können Ihr Symbol auch einfach in etwas anderes umbenennen und entsprechende Änderungen an vornehmenAndroidManifest.xml
Das eigentliche Problem ist, dass die beleidigende Bibliothek die nutzlosen Symbole enthält. Bibliotheken mit eigenen Ressourcen (wie ActionBarSherlock oder Googles eigene Support v7-Bibliothek) verwenden unterschiedliche Namensschemata, um Kollisionen mit Ihren Ressourcennamen (
abs_
,abc_
) zu vermeiden .Launcher-Symbole haben nichts damit zu tun, sich in einer Bibliothek zu befinden. Ich empfehle Ihnen daher, den Autor der von Ihnen verwendeten Bibliothek darüber zu informieren, dass er vergessen hat, die redundanten
ic_launcher.png
Dateien zu entfernen .Erwähnenswert ist auch , wie Barry Carroll in derselben Diskussion sehr genau bemerkte , dass Ihre Ressourcen niemals die in der Bibliothek überschneiden sollten: Es gibt viele legitime Gründe, die Ressourcen einer Bibliothek mit Ihren eigenen zu überschreiben (z. B. das Aussehen zu ändern Dies ermöglicht dies absichtlich durch die Zusammenführungslogik des Gradle-Plugins.
Es ist nur so, dass in diesem speziellen Fall der Konflikt auftritt, wenn die Bibliothek in der Android Gradle Plugin-Version (vor 1.2.2) zurückliegt. In diesem Fall landen Ressourcen in zwei verschiedenen
*dpi
Ordnern - mit und ohne-v4
Qualifizierer. Sie befinden sich jedoch tatsächlich in derselben Ressource "Bucket", sodass das System sie als doppelt betrachtet.Dieser Fehler führt zwar zu einer nutzlosen
ic_launcher.png
Übersteuerung (eigentlich eine Kollision - aufgrund des Fehlers), aber diese Situation ist für andere Arten von Ressourcen nicht allgemein schlecht.Das heißt, manchmal überschreiben Sie absichtlich die Ressource einer Bibliothek, und dieser Fehler führt immer noch dazu, dass die Fehlermeldung angezeigt wird. Dieses Mal gibt es kein wirkliches Problem mit Ressourcennamen. Daher ist die obige temporäre Lösung oder das Zurückhalten der Plugin-Version der richtige Weg.
quelle
drawable-*dpi
ohne das-v4
Suffix? Wenn ich Xavier richtig verstanden habe, gibt es einen Fehler zwischengradle
undaapt
,aapt
der-v4
in die Ressourcen unserer App aufgenommen werden sollte, dies aber nicht tut - so dass wir am Ende zwei Ordnerpaare haben.aapt
Folglich werden wir nach der Aktualisierung immer noch-v4
Ordner haben und die Bibliothek muss erneut erstellt werden, oder?Ich hatte das gleiche Problem bei der Verwendung einer Drittanbieter-Bibliothek ( RomainPiel / Shimmer-Android- Bibliothek auf Github).
Um das Problem zu lösen, habe ich meine ic_launcher.png-Dateien aus dem zeichnbaren Ordner in den mipmap-Ordner verschoben. Und Problem gelöst.
quelle
Ein Downgrade auf com.android.tools.build:gradle:1.1.3 hat mein Problem behoben
quelle
Hier ist die allgemeine Methode, um das Problem zu finden:
Lauf
und Sie finden die Details der Fehler. Ich habe meinen Fehler gefunden: Eine doppelte Klasse hat einen TOP-Level-Fehler verursacht, und das Entfernen der doppelten Klasse wird das Problem lösen.
quelle
Für mich hat ein einfaches "sauberes Projekt" und "Projekt neu erstellen" den Trick gemacht.
quelle
./gradlew clean
weil ich auf Jenkins lief. Vielen Dank!Aktualisieren Sie auf 1.2.3, stellen Sie jedoch sicher, dass Ihr gradle und buildToolsVersion in Ihrem Projekt und den verwendeten aars identisch sind.
Falls Sie externe Bibliotheken verwenden, in denen Sie die Gradle / Build-Version nicht steuern können: Wenden Sie sich an den Autor oder überprüfen Sie die Quellen selbst. Einige Bibliotheken verfügen über nicht verwendete Startsymbole, die diesen Konflikt verursachen. Das Entfernen dieser Symbole löst Ihr Problem. Identisch benannte Quellen (z. B. menu.xml) können dieses Problem in seltenen Fällen ebenfalls verursachen. Eine einfache Problemumgehung wäre das Umbenennen Ihrer Ressource.
quelle
Benennen Sie ic_launcher.png einfach in etwas anderes um (z. B. ico_launcher.png).
quelle
In meinem Fall habe ich der Datei strings.xml Apostroph (e) hinzugefügt. Überprüfen Sie die Leute auf solche Fehler und entfernen Sie sie auf jeden Fall. Es ist so ärgerlich, dass die IDE den Fehler nicht richtig anzeigen kann, sondern alle Ressourcen nicht mehr synchron sind.
Ich weiß, dass dies nicht der Fall ist, der in Frage gestellt wird, aber der Fehler ist ziemlich gleich, dh die Ausführung von Gradle schlägt fehl.
quelle
Einfach
Rename
dasImage
(Rightclick on the Image, Select Refactor and select Rename
). Es wird das Problem lösen, da das Problem aufgetreten ist, da einer derlibrary
auch dasimage
mit dem verwendetsame name
.quelle
Ich hatte das gleiche Problem und das Folgende hat bei mir funktioniert:
tools:replace="android:icon"
Ihrem<application>
Tag im Manifest hinzuSie können nur den ersten Schritt versuchen, aber ich hatte immer noch Probleme beim Zusammenführen der Manifestdateien. Auf diese Weise sollte die in der Bibliothek verwendete Ressource überschrieben werden.
quelle
Folgen Sie diesem Link hier
Oder
Nehmen Sie so eine Änderung vor.
quelle
Das Update auf das neueste Gradle-Plugin 1.5.0 hat dieses Problem behoben. Aktualisieren Sie folgende Skript in der
build.gradle
Stammdateiquelle
Ich habe es geschafft, dieses Problem durch inkonsistente Großschreibung von Dateinamenerweiterungen auszulösen. Ich hatte ein JPG-Bild in einem Zeichenverzeichnis, aber ein Bild mit demselben Dateinamen, aber JPG in einem anderen Zeichenverzeichnis. Die Dateinamen und Verzeichnisse stimmten, die Erweiterungen jedoch nicht.
quelle