2015-04-30 13 views
75

Ho ricevuto questo strano errore con gradle, per favore aiutatemi!Gradle terminato con valore di uscita diverso da zero 1 (ic_launcher.png: errore: file duplicato)

/.../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 

Prima che fosse funziona normalmente, ma da quando ho messo classpath com.android.tools.build:gradle:1.2.2, questo mi fa errori

+5

Attualmente l'ultimo plugin gradle stabile è 1.1.3. Usalo. –

+0

Sì, il downgrade a com.android.tools.build:gradle:1.1.3 ha risolto il problema, grazie! –

+1

In breve: è dovuto ai duplicati di 'ic_launcher'. Eliminali - cancella o rinomina –

risposta

19

downgrade a com.android.tools.build:gradle:1.1.3 sloved mio problema

+0

mio è 1.2.3 e ha ancora lo stesso problema – Akshay

+0

@Akshay prova con 1.1.3 –

+0

Hmm Vedo quello che stai dicendo .. quindi questo è bug studio allora? – Akshay

112

Secondo Xavier Durochet's explanation on G+, è a causa di una delle librerie che usi con il proprio ic_launcher.png - che ovviamente non dovrebbero (più su quello in basso).

Le probabilità sono le due icone menzionate nel registro sono diverse: una è la tua e un'altra è probabilmente l'icona Android generica che qualcuno ha dimenticato di rimuovere dalla libreria.

Per vedere la dipendenza incriminato, ha colpito Ctrl + Shift + Ndue volte (per i non-progetto di corrispondenza) e digitare ic_launcher.png (vedere l'ultima riga sullo screenshot) enter image description here

Per aggirare il problema temporanea, aggiungi il qualificatore -v4 alle tue cartelle drawable drawable (o muovi solo ic_launcher.png a *dpi-v4 se hai i tuoi motivi) - crediti a Xavier Durochet per la soluzione. È anche possibile rinominare l'icona in qualcosa d'altro e fare la modifica relativa alla AndroidManifest.xml

enter image description here

Il vero problema è che la lib incriminato porta le icone inutili. Le librerie con le proprie risorse (come ActionBarSherlock o la libreria di supporto v7 di Google) utilizzano schemi di denominazione distintivi per evitare conflitti con i nomi delle risorse (abs_, abc_).

Le icone di avvio non sono presenti in una libreria, pertanto ti invito a informare l'autore della lib che stai utilizzando che hanno dimenticato di rimuovere i file ridondanti ic_launcher.png.

Vale anche la pena menzionare, come Barry Carroll notato molto proprio in the same discussion, questo non significa che le risorse non devono mai sovrapporsi quelli nella biblioteca: ci sono un sacco di legit ragioni per ignorare le risorse di un lib con il proprio (ad esempio cambiando l'aspetto di un'attività fornita dalla libreria) e la logica di fusione delle risorse del plugin gradle lo consente, di proposito.

E 'solo che in questo caso particolare, il conflitto si verifica quando la lib è dietro la versione del plug-in Android Gradle (pre-1.2.2) nel qual caso le risorse finiscono in due diverse cartelle *dpi - con e senza il -v4 qualificatore; ma sono effettivamente nella stessa "risorsa" della risorsa, quindi il sistema li considera duplicati.

Questo glitch fa mettere in evidenza l'inutile ic_launcher.png di override (in realtà, una collisione - a causa del problema tecnico), ma questa situazione non è universalmente male per altri tipi di risorse.

I.e. a volte si ignora intenzionalmente la risorsa di una lib e questo problema causerà comunque la visualizzazione del messaggio di errore.Questa volta non ci sono problemi con i nomi delle risorse, quindi la soluzione temporanea sopra o trattenere la versione del plugin è la strada da percorrere.

+2

Inoltre, ricostruisci quella stessa libreria con l'ultima anche gli strumenti gradle/build risolveranno il problema. – danb

+0

Sono abbastanza sicuro che la mia installazione sia aggiornata: build tools v 22.0.1, gradle v 1.2.2 –

+0

UPD oh, ricostruzione della * libreria *, scusa, ho letto erroneamente questo a prima vista :) Sarebbe un suggerimento per gli autori della biblioteca nel mio caso. Solo curioso - qualche idea sul perché risolve il problema? La libreria di ricostruzione ha i suoi drawable in 'drawable- * dpi' senza il suffisso' -v4'? Se ho capito bene Xavier, c'è un problema tra 'gradle' e' aapt', 'aapt' dovrebbe mettere' -v4' nelle risorse della tua app ma non lo fa - così finiamo con 2 coppie di cartelle. Quindi, di conseguenza, dopo che 'aapt' viene aggiornato, finiremo comunque con le cartelle' -v4' e la lib dovrà essere ricostruita di nuovo, giusto? –

27

Ho avuto lo stesso problema durante l'utilizzo di una libreria di terze parti. (RomainPiel/Shimmer-android biblioteca su Github)

Per risolverlo, ho spostato i miei file ic_launcher.png dalla cartella drawable alla cartella mipmap. E il problema è risolto.

enter image description here

+1

Omg Can, hai salvato il mio giorno di ritrovo e la mezza notte. Grazie mille;) – khaintt

+2

questa dovrebbe essere la risposta corretta!Quindi su Manifest cambia il logo o l'icona con il file corretto: @ mipmap/ic_launcher –

+0

Nella versione più recente di android studio/gradle devi inserire il tuo ic_launcher nelle cartelle mipmap, anche se non ci sono librerie che lo usano (questo risolverà l'errore). – sagits

2

aggiornamento a 1.2.3, ma assicurarsi che il vostro Gradle e buildToolsVersion sono identicamente nel progetto e le Aars utilizzati.

Se si utilizzano librerie esterne in cui non è possibile controllare la versione gradle/build: Contattare l'autore o controllare le proprie risorse. Alcune librerie hanno icone di avvio non utilizzate che causeranno questo conflitto. La rimozione di queste icone risolverà il tuo problema. Anche fonti identiche (ad esempio menu.xml) potrebbero causare questo problema in rari casi. Una facile soluzione sarebbe quella di rinominare la risorsa.

+0

Questo ha risolto il mio problema (e parla anche della risposta di Ivan Bartsov nella sezione "degni di nota"). Un progetto di libreria (che ho importato da Eclipse) aveva un vecchio "buildToolsVersion" definito nel suo build.gradle. Ciò ha causato il fallimento di gradle con la spazzatura del "file duplicato" durante la creazione delle applicazioni che utilizzavano quella libreria. Dopo aver verificato che la versione "buildToolsVersion" della libreria fosse la stessa del gradino "buildToolsVersion", l'applicazione si fermò "essendo un dannato gradino" e compilò tutte le versioni OK. Non c'è qualche controllo sulla lanuggine o qualcosa per dare una descrizione migliore dell'errore? – dell116

1

Basta rinominare ic_launcher.png a qualcos'altro (ad esempio ico_launcher.png)

+0

Se si utilizzano più librerie che hanno un ic_launcher, questa non è una soluzione –

+0

Ho avuto lo stesso problema con un altro file PNG che non era ic_launcher, e rinominandolo ha risolto il problema. –

13

Ecco il metodo generale per trovare il problema:

Run

./gradlew build --stacktrace --info

e troverete i dettagli di errori. Ho trovato il mio errore: una classe duplicata ha causato un errore TOP-Level e rimuovere quella duplicata risolverà il problema.

+0

grazie amico .. Questo mi ha aiutato – Praveen

+0

@Praveen Felice di aiutarti. – herbertD

+1

@herbertD my best thx! –

10

Per me un semplice "progetto pulito" e "progetto di ricostruzione" ha fatto il trucco.

+0

Grazie funziona. – Sandeep

+0

Questo ha funzionato per me ma usando './gradlew clean' perché stavo correndo su Jenkins. Grazie! – epool

0

segui questo link Here

O

cambiamento Fai come questo.

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

Nel mio caso ho aggiunto apostrofo (s) al file strings.xml. Controllate ragazzi per qualsiasi errore di questo tipo e rimuovilo sarà sicuramente d'aiuto. E 'così fastidioso l'IDE non può mostrare l'errore correttamente piuttosto rende tutte le risorse fuori sincrono ..

io so che non è il caso che viene chiesto in questione, ma l'errore è abbastanza stessa esecuzione cioè Gradle viene fallito.

+0

QUESTO !!! .... GRAZIE !! – yUdoDis

1

Semplicemente Rename il Image (Rightclick on the Image, Select Refactor and select Rename). Risolverà il problema con l'insorgere del problema in quanto uno dei library utilizza anche lo image con lo same name.

1

Ho avuto lo stesso problema e quello che segue ha lavorato per me:

  • rinominare l'icona
  • aggiungere tools:replace="android:icon" al tag <application> nel Manifesto

Si può provare solo il primo passo , ma ho ancora avuto problemi durante l'unione dei file manifest. In questo modo dovrebbe sovrascrivere qualsiasi risorsa utilizzata nella libreria.

0

Aggiornamento al più recente plug-in gradle 1.5.0 risolto questo problema. Aggiornamento seguente script nella root build.gradle file di

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

sono riuscito a innescare questo problema per capitalizzazione incoerente di estensioni dei file. Avevo un'immagine jpg in una directory disegnabile, ma un'immagine dello stesso nome di file ma .JPG in una diversa directory disegnabile. I nomi dei file e le directory erano giusti, ma le estensioni non lo erano.