Android: erro “Manifest merger failed” após atualizar para uma nova versão do Gradle

108

Depois de aceitar atualizar o projeto para a nova versão do gradle, recebo este erro:

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 posso resolver esse problema? Este é o build.gradlearquivo do meu aplicativo :

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 este é o projeto 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
}

Como corrijo esse erro enquanto mantenho as alterações feitas ao atualizar a versão do Gradle?

mundo do smoking
fonte

Respostas:

212

Coloque isso no final do módulo build.gradle do aplicativo:

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 para Eugen Pechanec

Vishal
fonte
1
Boa, esta é a solução que funcionou para mim ao construir meu aplicativo nativescript
deduzido de
7
Isso funcionou para mim também, obrigado @Vishal. Você pode explicar o que está acontecendo aqui :)
Ismail Iqbal
3
Certifique-se de usar a versão mais recente da biblioteca de suporte, que no momento da redação deste artigo é details.useVersion '27.0.0'. Caso contrário, você não terá os recursos de suporte mais recentes, como eliminação redundante de visualização.
Drew Szurko em
9
Por favor, adicione uma descrição bit sobre ele. Está funcionando, mas funcionará para a versão atualizada e recursos
Ghanshyam Nayma
1
Se alguém mais tivesse o erro 'Não é possível resolver o símbolo DependencyResolveDetails', eu o corrigi removendo 'DependencyResolveDetails' (eu li em algum lugar no StackOverflow sobre não precisar dele desde que é Groovy, para que possa resolver isso dinamicamente)
knjk04
90

Você está usando várias versões das bibliotecas de suporte do 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+'

Dois estão 26.0.0-alpha1e um está usando 25+.

Escolha uma versão concreta e use-a para todas as três. Como o seu compileSdkVersionnão é O, use 25.3.1para todas as três bibliotecas, resultando em:

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
fonte
usando 25.3.1para bibliotecas de suporte ou buildToolsVersion? for buildToolsVersioni get errorPackage Unavailable
tux-world
@ tux-world: "usando 25.3.1 para bibliotecas de suporte ou buildToolsVersion?" - para as bibliotecas de suporte. Veja minha resposta atualizada.
CommonsWare
1
eu testo isso, mas meu problema não resolve, qual versão deve estar ligada compileSdkVersion?
tux-world
eu recebo esta mensagemAll 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: Nada em seu build.gradledeveria estar se referindo 26.0.0-alpha1mais. Tente limpar seu projeto (Build> Clean Project) e veja se o problema desaparece. Caso contrário, você precisará rastrear o que está puxando com.android.support:support-compat:26.0.0-alpha1, por exemplo, executando um relatório de dependência do Gradle.
CommonsWare
18

Mudei todas as versões da biblioteca de suporte para 25.3.1 e funcionou perfeitamente:

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

Você também precisa alterar compileSdkVersion e targetSdkVersion para 25:

compileSdkVersion 25
targetSdkVersion 25
Darush
fonte
concordo, respostas acima de boas, mas o motivo do erro é que você definiu diferentes versões em seu arquivo gradle. Basta usar o suporte ou 26 ou 25
Andrew V.
No meu caso é por causa de minSdkVersion.
Frutas de
10

Você pode descobrir qual biblioteca depende de uma versão errada da biblioteca de suporte e excluí-la desta forma:

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

stripe-android No meu caso.

pagar
fonte
Como você descobriu isso?
Zapnologica
@Zapnologica tenta listar dependências de tarefas do Gradle, como stackoverflow.com/questions/21645071/…
pagamento em
6

Não estou usando versões diferentes de bibliotecas e obtive o mesmo erro, aconteceu depois de remover buildToolsVersionno AS RC 1, mas adicionar tools:node="replace" resolveu, basta adicionar em seu manifest.xml dentro do <application ..../>bloco:

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

fonte
1
existem efeitos colaterais ao fazer isso? Ele ainda está funcionando para você com o novo Android Studio 3?
Sakiboy
5

Aconteceu a mesma coisa comigo. Veja em Gradle -> Build Gradle -> e certifique-se de que a compatibilidade corresponde nas linhas de compilação "app compat" e "support design", elas devem ter a mesma versão.

Então para ter certeza de que irá iniciar sem problemas, vá em Arquivo -> Estrutura do Projeto -> aplicativo e verifique na aba propriedade a versão das ferramentas de construção, deve ser a mesma que sua linha de compilação de suporte, caso eu coloque a versão do SDK de destino como 25 também na guia 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'*
}

Foi o que fiz e trabalhei. Boa sorte!

Brenda Yanela Conzi
fonte
3
  • Atualize sua biblioteca de suporte para a última versão

  • Abra Manifest Filee adicione-o ao arquivo de manifesto

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

  • E adicione para visualização de reciclagem em >> build.gradle Module app:

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

  • E clique em: Sync Now

AmmAr Yasser
fonte
3

Eu resolvo isso colocando isso no final do meu módulo de 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'
        }
    }
  }
}
Maryam Azhdari
fonte
Você realmente fez o meu dia.
Hamed Jaliliani
2

A resposta é aceita, mas uma coisa que você também pode fazer é definir as bibliotecas a partir da estrutura do projeto. O que você pode fazer é:

  1. Comente todas as bibliotecas nas quais o problema está chegando
  2. Vá para a estrutura do seu projeto
  3. Adicione bibliotecas de lá e ele será sincronizado automaticamente e o problema desaparecerá.
  4. Se o problema persistir, tente verificar no log de erros qual biblioteca está exigindo depois de seguir todas as 3 etapas acima.

O que acontece é que as bibliotecas predefinidas estão desligadas, agora estou pegando o appcompat: 26.0.0-alpha1 ele usa a versão mais antiga das coisas quando você adiciona algo novo e tenta resolver com os itens antigos. Quando você adiciona a partir da estrutura do seu projeto, ele adiciona a mesma coisa, mas com as novas coisas para resolvê-lo. Seu problema seria resolvido.

Alok
fonte
0

O erro para mim foi:

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.

A solução para mim estava no arquivo Gradle do meu projeto de que precisava para alterar minha versão com.google.gms: google-services.

Eu estava usando a versão 3.1.1:

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

E o erro foi resolvido depois de transferi-lo para a versão 3.2.1:

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

Eu tinha acabado de atualizar todas as minhas bibliotecas para a mais recente, incluindo v27.1.1 de todas as bibliotecas de suporte e v15.0.0 de todas as bibliotecas do Firebase, quando vi o erro.

Lucy
fonte
0

Eu atualizei o projeto android antigo para o Wear OS. Recebi esta mensagem de erro ao construir o projeto:

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.

Meu app build.gradle para Wear contém estas dependências:

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

SOLUÇÃO :

Adicionar implementation 'com.android.support:support-v4:28.0.0'às dependências resolveu meu problema.

Malder
fonte
0

Tente excluir os metadados e reconstruir o projeto.

Anga
fonte