2015-03-08 6 views
8

Sto tentando di aggiornare il mio appcompat-v7 nel progetto Android Studio dalla v20.0.0 alla 21.0.0 per l'utilizzo del componente di progettazione del materiale, ma ho sempre il stesso errore:Errore: l'attributo "colore" è già stato definito, aggiornamento appcompat v-7

"errore: attributo 'colore' è già stato definito"

non ho idea di cosa fare per correggere questo errore, ho cercato in internet, ma non posso ottenere la risposta. Ecco il mio Gradle:

android { 

    compileOptions.encoding = "iso-8859-1" 
    compileSdkVersion 21 
    buildToolsVersion "21.1.1" 

    defaultConfig { 
     applicationId "com.test" 
     minSdkVersion 11 
     targetSdkVersion 22 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 
     } 
    } 
} 

dependencies { 

    compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:support-v4:20.0.0' 
    compile 'com.google.http-client:google-http-client-gson:1.19.0' 
    compile 'com.google.code.gson:gson:2.2.4' 
    compile "com.android.support:appcompat-v7:21.0.+" 

} 

Ecco il percorso in cui il conflitto esiste

C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\21.0.3\res\values\values.xml 

e questo è un altro errore:

Error:Execution failed for task ':app:processDebugResources'. 
> com.android.ide.common.internal.LoggedErrorException: Failed to run command: 
    C:\Users\Abel Dominguez\AppData\Local\Android\sdk1\build-tools\build-tools-21.1.1\aapt.exe package -f --no-crunch -I C:\Users\Abel Dominguez\AppData\Local\Android\sdk1\platforms\android-21\android.jar -M C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\manifests\full\debug\AndroidManifest.xml -S C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\res\debug -A C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\assets\debug -m -J C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\generated\source\r\debug -F C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\res\resources-debug.ap_ --debug-mode --custom-package com.wherefriend -0 apk --output-text-symbols C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\symbols\debug 
Error Code: 
    1 
Output: 
    C:\Users\Abel Dominguez\Documents\PROYECTOS_ANDROID\definitivos\d2\app\build\intermediates\res\debug\values\values.xml:94: error: Attribute "color" has already been defined 
+0

Usa compilazione 'com.android.support:support-v4:21.0.3' invece di compilazione 'com.android.support:support-v4:20.0.0' –

risposta

14

Il mio problema è stato risolto dopo aver letto la risposta di @petey. Se si guarda la riga visualizzata nel messaggio di errore, è possibile determinare con precisione quale attributo sta causando problemi.

Nel mio caso, si trattava di un attributo denominato color in un file xpersonalizzato. Quella vista personalizzata non è stata utilizzata, quindi ho appena commentato quella linea e il problema è stato risolto.

Possibile soluzione passi

  1. uscita Controllo errori per trovare il percorso per il numero di file e la linea che sta causando problemi

  2. Vai a quel file attraverso il vostro explorer file system e cercare la riga in questione

  3. Questa riga deve indicare quale vista (personalizzata) ha un attributo che è già definito da qualche parte.

  4. Indietro nel progetto in IDE, trovare quell'attributo e se non viene utilizzato commento, altrimenti se viene utilizzato, modificare il suo nome.

+1

Questo era esattamente il lo stesso problema che ho avuto. Qualcuno ha aggiunto l'attributo "color" per la loro visualizzazione personalizzata. Anche se il compilatore non mi ha mai informato su quale riga e dove si è verificato l'errore. Grazie per questo! – Elliott

+0

Lo stesso per me. Grazie per la risposta. –

+0

Sarebbe bello se l'autore della domanda accettasse questa risposta se fosse stata utile - @AbelMorgan – mdzeko

3

Si dovrebbe rimuovere questa riga

compile 'com.android.support:support-v4:20.0.0' 

e utilizzare la stessa dipendenza utilizzati dal appcompat:

compile 'com.android.support:support-v4:21.0.+' 

Anche io suggerisco di risolvere il 21.0.3, invece di 21,0 +

.
+2

Sì, 'appcompat-v7: 21.0.3' aggiungerà anche' support-v4: 21.0.3' che entrerà in conflitto con ' supporto-v4: 20.0.0'. Utilizzare sempre versioni aggiornate delle librerie di supporto. –

+0

Questo aiuta, ma il problema può persistere se ci sono due attributi di visualizzazione con lo stesso nome – mdzeko

0

Fusione risorsa gradle unisce tutte le cartelle di risorse di tutte le pendenze e inserire in una singola cartella. Nel caso ci siano duplicati il ​​processo di compilazione fallirà.

Fortunatamente, se si guarda sotto Output: etichetta, si troverà la giusta via per il problema.

Ecco un esempio

enter image description here

nel tuo caso è android-support-v7-appcompat\res\values\attrs.xml:476: error: Attribute "attributeName" has already been defined

È anche possibile costruire il vostro progetto dalla riga di comando e ottenere il giusto cammino. attributeName All'interno dei valori del file \ attrs.xml sulla riga 476 si troverà una proprietà con nome "attributeName". Molto probabilmente è il tuo stile personale che devi cambiare per eliminare il duplicato.

Così ora, quando si conosce il motivo, è possibile individuare quella proprietà nel modulo del progetto e sostituirla con un nome diverso.

0

In alcuni casi questo potrebbe essere di aiuto. Questa non è una risposta specifica però.

Ci possono essere molti indicatori relativi agli attributi su qualsiasi elemento particolare per risolvere tutti gli attributi in conflitto.

<tools:strict=”x, y, z”> 

Modalità implicita di default per l'attributo, genera un errore quando si tenta la dichiarazione di attributo di priorità inferiore di fusione con un valore diverso.

<tools:remove=”x, y, z”> 

Rimuovere il x, y, z attributi da qualsiasi dichiarazione priorità inferiore quando si unisce in.

<tools:replace=”x, y, z”> 

Sostituire la x, y, z attributi da qualsiasi dichiarazione priorità inferiore con il valore fornito (mosto essere presenti sullo stesso nodo).

REF: http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger#TOC-tools:attr-markers

Problemi correlati