Android: aparece el error "Error de fusión de manifiesto" después de actualizar a una nueva versión de gradle

108

Después de aceptar actualizar el proyecto a la nueva versión de gradle, aparece este error:

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.

¿Como puedó resolver esté problema? Este es el build.gradlearchivo de mi aplicación :

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'
    ...
}

Y este es el proyecto 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
}

¿Cómo soluciono este error manteniendo los cambios realizados al actualizar la versión de gradle?

tux-mundo
fuente

Respuestas:

212

Pon esto al final de tu módulo de aplicación 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 '25.3.0'
            }
        }
    }
}

Crédito a Eugen Pechanec

Vishal
fuente
1
Buena, esta es la solución que funcionó para mí cuando construí mi aplicación nativescript
ded
7
Esto también funcionó para mí, gracias @Vishal. ¿Puedes explicar lo que está sucediendo aquí :)
Ismail Iqbal
3
Asegúrese de utilizar la última versión de la biblioteca de soporte, que en el momento de redactar este documento es details.useVersion '27.0.0'. De lo contrario, no tendrá las funciones de soporte más recientes, como la eliminación de transmisión de vistas redundantes.
Drew Szurko
9
Agregue una pequeña descripción al respecto. Está funcionando, pero funcionará para la versión y las características actualizadas
Ghanshyam Nayma
1
Si alguien más tenía el error 'No se puede resolver Symbol DependencyResolveDetails', lo solucioné eliminando 'DependencyResolveDetails' (leí en algún lugar de StackOverflow sobre no necesitarlo desde su Groovy, por lo que puede resolverlo dinámicamente)
knjk04
90

Está utilizando varias versiones de las bibliotecas de soporte de 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+'

Dos son 26.0.0-alpha1, y uno está usando25+ .

Elija una versión concreta y úsela para las tres. Como compileSdkVersionno lo es O, utilícelo 25.3.1para las tres bibliotecas, lo que da como resultado:

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'
CommonsWare
fuente
utilizando 25.3.1para bibliotecas de soporte o buildToolsVersion? porque buildToolsVersionme sale un errorPackage Unavailable
tux-world
@ tux-world: "¿usa 25.3.1 para las bibliotecas de soporte o buildToolsVersion?" - para las bibliotecas de soporte. Vea mi respuesta actualizada.
CommonsWare
1
Lo pruebo, pero mi problema no se resuelve, ¿qué versión debe estar encendida compileSdkVersion?
tux-world
recibo este mensajeAll 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: Ya nada en tu build.gradledebería estar refiriéndose 26.0.0-alpha1. Intente limpiar su proyecto (Crear> Proyecto limpio) y vea si el problema desaparece. De lo contrario, necesitará rastrear lo que se está com.android.support:support-compat:26.0.0-alpha1produciendo, por ejemplo, ejecutando un informe de dependencia de Gradle.
CommonsWare
18

Cambié todas las versiones de la biblioteca de soporte a 25.3.1 y trabajé como un encanto:

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

También debe cambiar compileSdkVersion y targetSdkVersion a 25:

compileSdkVersion 25
targetSdkVersion 25
Darush
fuente
de acuerdo, las respuestas anteriores son buenas, pero la razón del error es que configuró diferentes versiones en su archivo gradle. Solo use o soporte 26 o 25
Andrew V.
En mi caso es por minSdkVersion.
Fruta
10

Puede averiguar qué biblioteca depende de una versión incorrecta de la biblioteca de soporte y excluirla de esta manera:

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

stripe-android en mi caso.

pagar
fuente
¿Cómo te enteras?
Zapnologica
@Zapnologica intenta enumerar las dependencias de tareas de Gradle, como stackoverflow.com/questions/21645071/…
paynd
6

No estoy usando diferentes versiones de bibliotecas y obtuve el mismo error, sucedió después de eliminar buildToolsVersionen AS RC 1, pero agregar tools:node="replace" hizo el truco, solo agregue esto en su manifest.xml dentro del <application ..../>bloque:

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

fuente
1
¿Hay efectos secundarios al hacer esto? ¿Sigue funcionando para usted con el nuevo Android Studio 3?
Sakiboy
5

A mí me pasa lo mismo. Consulte Gradle -> Build Gradle -> y asegúrese de que la compatibilidad coincida en las líneas de compilación "compatibilidad de aplicaciones" y "diseño de soporte", deben tener la misma versión.

Luego, para estar muy seguro de que se iniciará sin problemas, vaya a Archivo -> Estructura del proyecto -> aplicación y verifique en la pestaña Propiedades la versión de Herramientas de compilación, debe ser la misma que la línea de compilación de soporte, en caso de que coloque la versión de SDK de destino como 25 también en la pestaña Sabores.

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'*
}

Eso es lo que hice y trabajé. ¡Buena suerte!

Brenda Yanela Conzi
fuente
3
  • Actualice su biblioteca de soporte a la última versión

  • Ábralo Manifest Filey agréguelo al archivo de manifiesto

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

  • Y agregue para la vista del reciclador en >> build.gradle Module app:

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

  • Y haga clic en: Sync Now

AmmAr Yasser
fuente
3

Lo resuelvo poniendo esto al final de mi módulo de aplicación 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'
        }
    }
  }
}
Maryam Azhdari
fuente
Realmente me alegraste el día.
Hamed Jaliliani
2

Se aceptan las respuestas, pero una cosa que también puede hacer es definir las bibliotecas a partir de la estructura de su proyecto. Lo que puedes hacer es:

  1. Comenta todas las bibliotecas en las que viene el problema
  2. Ir a la estructura de su proyecto
  3. Agregue bibliotecas desde allí y se sincronizará automáticamente y el problema desaparecerá.
  4. Si el problema persiste, intente buscar en el registro de errores qué biblioteca está demandando después de seguir los 3 pasos anteriores.

Lo que sucede es que las bibliotecas predefinidas están apagadas ahora, ahora estoy tomando el appcompat: 26.0.0-alpha1 , usa la versión anterior de las cosas cuando agrega algo nuevo e intenta resolverlo con las cosas antiguas. Cuando lo agregue desde la estructura de su proyecto, agregará lo mismo pero con las nuevas cosas para resolverlo. Su problema estaría resuelto.

Alok
fuente
0

El error para mí fue:

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 solución para mí estaba en mi archivo de proyecto Gradle que necesitaba para aumentar mi versión com.google.gms: google-services.

Estaba usando la versión 3.1.1:

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

Y el error se resolvió después de que lo cambié a la versión 3.2.1:

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

Acababa de actualizar todas mis bibliotecas a la última, incluida la v27.1.1 de todas las bibliotecas de soporte y la v15.0.0 de todas las bibliotecas de Firebase cuando vi el error.

Lucy
fuente
0

He actualizado el antiguo proyecto de Android para Wear OS. Recibo este mensaje de error mientras construyo el proyecto:

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.

Mi aplicación build.gradle for Wear contiene estas dependencias:

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'}

SOLUCION :

Agregar implementation 'com.android.support:support-v4:28.0.0'a las dependencias resolvió mi problema.

Malder
fuente
0

Intente eliminar los metadatos y reconstruir el proyecto.

Anga
fuente