Android: ricezione dell'errore "Fusione manifest non riuscita" dopo l'aggiornamento a una nuova versione di gradle


108

Dopo aver accettato di aggiornare il progetto alla nuova versione di gradle, ricevo questo errore:

Error:Execution failed for task ':app:processDebugManifest'.
Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-alpha1) from [com.android.support:cardview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38
    is also present at [com.android.support:design:25.3.1] AndroidManifest.xml:27:9-31 value=(25.3.1).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:22:5-24:41 to override.

Come posso risolvere questo problema? Questo è il build.gradlefile della mia app :

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.sample.bookReader"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    ...
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:+'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support:design:25+'
    compile 'com.jakewharton:butterknife:8.2.1'
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
    ...
}

E questo è il progetto build.gradle:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://www.jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Come posso correggere questo errore mantenendo le modifiche apportate aggiornando la versione gradle?

Risposte:


212

Mettilo alla fine del modulo build.gradle della tua app:

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '25.3.0'
            }
        }
    }
}

Ringraziamo Eugen Pechanec


1
Bello, questa è la soluzione che ha funzionato per me durante la creazione della mia app nativescript
ded

7
Questo ha funzionato anche per me, grazie @Vishal. Puoi solo spiegare cosa sta succedendo qui?
Ismail Iqbal

3
Assicurati di utilizzare l'ultima versione della libreria di supporto, che al momento della scrittura è questa details.useVersion '27.0.0'. Altrimenti non avrai le ultime funzionalità di supporto, come l'eliminazione ridondante del view casting.
Drew Szurko

9
Si prega di aggiungere una descrizione bit su di esso.
Funziona

1
Se qualcun altro aveva l'errore "Impossibile risolvere il simbolo DependencyResolveDetails", l'ho risolto rimuovendo "DependencyResolveDetails" (ho letto da qualche parte su StackOverflow di non averne bisogno dal suo Groovy, quindi può risolverlo dinamicamente)
knjk04

90

Stai utilizzando più versioni delle librerie di supporto Android:

compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
compile 'com.android.support:cardview-v7:26.0.0-alpha1'
compile 'com.android.support:design:25+'

Due sono 26.0.0-alpha1e uno sta usando 25+.

Scegli una versione concreta e usala per tutti e tre questi. Poiché il tuo compileSdkVersionnon lo è O, usa 25.3.1per tutte e tre queste librerie, ottenendo:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:cardview-v7:25.3.1'
compile 'com.android.support:design:25.3.1'

utilizzando 25.3.1per le librerie di supporto o buildToolsVersion? perché buildToolsVersionottengo un errorePackage Unavailable
tux-world

@ tux-world: "usando 25.3.1 per le librerie di supporto o buildToolsVersion?" - per le biblioteche di supporto. Vedi la mia risposta aggiornata.
CommonsWare

1
lo provo, ma il mio problema non si risolve, quale versione deve essere installata compileSdkVersion?
tux-world

ricevo questo messaggioAll com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 26.0.0-alpha1, 25.3.1. Examples include com.android.support:support-compat:26.0.0-alpha1 and com.android.support:animated-vector-drawable:25.3.1
tux-world

1
@ tux-world: Niente nel tuo build.gradledovrebbe più fare riferimento 26.0.0-alpha1. Prova a pulire il tuo progetto (Crea> Pulisci progetto) e verifica se il problema scompare. In caso contrario, dovrai rintracciare ciò che sta arrivando com.android.support:support-compat:26.0.0-alpha1, ad esempio eseguendo un rapporto sulle dipendenze di Gradle.
CommonsWare

18

Ho cambiato tutte le versioni della libreria di supporto alla 25.3.1 e ho funzionato a meraviglia:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'

È inoltre necessario modificare compileSdkVersion e targetSdkVersion in 25:

compileSdkVersion 25
targetSdkVersion 25

d'accordo, risposte sopra buone, ma il motivo dell'errore è che hai impostato versioni diverse nel tuo file gradle. Usa solo il supporto 26 o 25
Andrew V.

Nel mio caso è a causa di minSdkVersion.
Frutta

10

Puoi scoprire quale libreria dipende da una versione sbagliata della libreria di supporto ed escluderla in questo modo:

compile ('com.stripe:stripe-android:5.1.1') {
    exclude group: 'com.android.support'
  }

stripe-android nel mio caso.


Come lo scopri?
Zapnologica

@Zapnologica cercare di lista Gradle relazioni tra le attività, come stackoverflow.com/questions/21645071/...
paynd

6

Non sto usando versioni diverse di librerie e ho ricevuto lo stesso errore, è successo dopo la rimozione buildToolsVersionin AS RC 1, ma l'aggiunta tools:node="replace" ha funzionato, basta aggiungerlo nel tuo <application ..../>blocco manifest.xml all'interno :

<meta-data 
 tools:node="replace"
 android:name="com.google.android.gms.version"
 android:value="@integer/google_play_services_version" />

1
ci sono effetti collaterali quando si esegue questa operazione? Funziona ancora con il nuovo Android Studio 3?
Sakiboy

5

A me è successa la stessa cosa. Vedi su Gradle -> Build Gradle -> e assicurati che la compatibilità corrisponda a entrambe le linee di compilazione "compat app" e "support design", dovrebbero avere la stessa versione.

Quindi per essere assolutamente sicuro che si avvierà senza problemi, vai su File -> Struttura del progetto -> app e controlla nella scheda proprietà la versione degli strumenti di compilazione, dovrebbe essere la stessa della riga di compilazione del supporto, nel caso in cui lo metto anche la versione 25 dell'SDK di destinazione nella scheda Flavors.

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-
   core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    *compile 'com.android.support:appcompat-v7:25.3.1'*
    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    testCompile 'junit:junit:4.12'
    *compile 'com.android.support:design:25.3.1'*
}

Questo è quello che ho fatto e lavorato. In bocca al lupo!


3
  • Aggiorna la tua libreria di supporto all'ultima versione

  • Apri Manifest Filee aggiungilo al file manifest

  • <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>

  • E aggiungi per la revisione in >> build.gradle Module app:

  • compile 'com.android.support:recyclerview-v7:25.3.1'

  • E fai clic su: Sync Now


3

Lo risolvo inserendo questo alla fine del mio modulo app build.gradle:

    configurations.all {
     resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == 'com.android.support') {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion '26.0.0'
        }
    }
  }
}

Mi hai davvero reso la giornata.
Hamed Jaliliani

2

La risposta è accettata, ma una cosa che potresti anche fare è definire le librerie dalla struttura del tuo progetto. Quello che puoi fare è:

  1. Commenta tutte le biblioteche in cui sta arrivando il problema
  2. Vai alla struttura del tuo progetto
  3. Aggiungi le librerie da lì e si sincronizzerà automaticamente e il problema scompare.
  4. Se il problema persiste, prova a cercare dal registro degli errori quale libreria richiede dopo aver seguito tutti i 3 passaggi precedenti.

Quello che succede è che le librerie predefinite ora sono spente ora sto prendendo l' appcompat: 26.0.0-alpha1 usa la versione precedente delle cose quando aggiungi qualcosa di nuovo e cerca di risolverlo con i vecchi oggetti. Quando lo aggiungi dalla struttura del tuo progetto, aggiungerà la stessa cosa ma con i nuovi elementi per risolverlo. Il tuo problema sarebbe stato risolto.


0

L'errore per me è stato:

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
    is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

La soluzione per me era nel file Gradle del mio progetto di cui avevo bisogno per caricare la mia versione com.google.gms: google-services.

Stavo usando la versione 3.1.1:

classpath 'com.google.gms:google-services:3.1.1

E l'errore è stato risolto dopo averlo spostato alla versione 3.2.1:

classpath 'com.google.gms:google-services:3.2.1

Avevo appena aggiornato tutte le mie librerie all'ultima inclusa la v27.1.1 di tutte le librerie di supporto e la v15.0.0 di tutte le librerie Firebase quando ho visto l'errore.


0

Ho aggiornato il vecchio progetto Android per il sistema operativo Wear. Ho ricevuto questo messaggio di errore durante la creazione del progetto:

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.

La mia app build.gradle per Wear contiene queste dipendenze:

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.google.android.support:wearable:2.4.0'
implementation 'com.google.android.gms:play-services-wearable:16.0.1'
compileOnly 'com.google.android.wearable:wearable:2.4.0'}

SOLUZIONE :

L'aggiunta implementation 'com.android.support:support-v4:28.0.0'alle dipendenze ha risolto il mio problema.


0

Prova a eliminare i metadati e ricostruisci il progetto.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.