Falha na fusão do material do Android e do manifesto appcompat

223

Eu tenho a próxima série

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.android.material:material:1.0.0-rc01'
}

Mas quando eu quero criar um aplicativo, recebo o próximo log:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

Okey! Vá para manifestar e faça:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

</manifest>

Então eu recebo este erro no meu Logcat:

Manifest merger failed with multiple errors, see logs that I have Linked with it
Евгений Усов
fonte
2
Tente remover estas linhas: implementação 'com.android.support:appcompat-v7:28.0.0-rc01' e implementação 'com.android.support.constraint: restrição de layout de: 1.1.2'
vcapra1
2
Eu acho que pacotes de materiais são todos empacotados em android-design, check it out ...
Marcos Vasconcelos
Eu preciso disso: material.io/design/components/app-bars-bottom.html . Isso é para android-design?
Евгений Усов
Você também pode verificar este: stackoverflow.com/a/54825603/1318946
Pratik Butani
O novo estúdio android tem o recurso de migrar seu aplicativo para o androidX sem problemas. siga o link abaixo. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Respostas:

15

Apenas mude "rc01" na primeira e na última linha dentro das dependências para "alpha1" Isso está funcionando para mim

Anubhav Gupta
fonte
Mais do que um arquivo foi encontrado com o OS independente caminho 'META-INF / androidx.core_core.version
Aliton Oliveira
40
Eu não tenho "rc01" escrito na implementação 'com.android.support:appcompat-v7:28.0.0'. Ainda estou recebendo o problema. Por favor, sugira alguma solução.
avani kothari
10
Esta resposta deveria ter sido um comentário para a pergunta.
Ananth
459

Eu tive um problema semelhante. Adicionadas duas linhas no gradle.propertiesarquivo:

android.useAndroidX=true
android.enableJetifier=true

Essas duas linhas resolveram automaticamente meus conflitos de dependência entre os arquivos do Google e as dependências de terceiros. Aqui está o link a seguir: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project

Abir Hasan
fonte
6
android.useAndroidX = true
Frank Fang
6
Após adicionado este erro, ocorre o seguinte: `` * O que deu errado: Falha na execução da tarefa ': react-native-camera: compileGeneralDebugJavaWithJavac'. > Falha na compilação; consulte a saída de erro do compilador para obter detalhes. * Tente: Execute com a opção --stacktrace para obter o rastreamento da pilha. Execute com a opção --info ou --debug para obter mais saída de log. Execute com --scan para obter informações completas. ``
Dileepa Chandima
@PrinceHamza verifique isso, encontramos uma solução para este github.com/facebook/react-native/issues/…
Dileepa Chandima
9
Essa deve ser a resposta aceita. Isso resolveu o problema.
VishalKale 02/07/19
2
"Mas eu não vejo um 'arquivo gradles.properties'"! Sim, portanto, na pasta raiz do aplicativo no projeto studio, crie esse arquivo (sem extensão) e adicione essas linhas.
user1010160
145

Eu enfrentei o mesmo erro ao tentar adicionar a biblioteca Kotlin-KTX ao meu projeto.

Eu tento a migração AndroidX, e problema corrigido!

Refatorar / migrar para AndroidX

Mete
fonte
1
Isso funciona, mas algumas das instruções de importação geradas usam nomes de pacotes desatualizados. Eu tive que corrigir um monte deles, apenas usando o androidx.*nome do pacote que o IDE sugeriu como uma correção.
Andrew Koster
1
@Mete esta resposta salvou minha vida. Posso te pagar uma cerveja?
girish_vr
@girish_vr Obrigado pela oferta :) Estou feliz que tenha funcionado, isso é o suficiente para me fazer sorrir.
Mete
Corri para esse problema porque estava lançando a versão mais recente da biblioteca "support-v4" no meu arquivo build.gradle ... não é uma boa prática. Se eu estivesse fazendo referência a uma versão específica da biblioteca dentro do meu arquivo gradle, nunca teria encontrado esse problema em primeiro lugar. Além disso, depois de pesquisar um pouco mais, pude ver que o Google estava recomendando a mudança para a biblioteca AndroidX; então, eu decidi morder a bala. Felizmente, todos os problemas foram resolvidos após a atualização ... o desastre foi evitado e LIÇÃO APRENDIDA sobre as referências de classificação.
BluJ IT 27/07/19
104

Motivo da falha

Você está usando a biblioteca de materiais que faz parte do AndroidX . Se você não conhece o AndroidX, siga esta resposta .

Um aplicativo deve usar as bibliotecas AndroidX ou antigas do Suporte Android. Por isso você enfrentou esse problema.

Por exemplo -

No seu gradle, você está usando

  • com.android.support:appcompat-v7 (Parte da antiga --Android Support Library--)
  • com.google.android.material:material(Parte do AndroidX) (artefato de construção do AndroidX com.android.support:design)

Solução

Portanto, a solução é usar o AndroidX ou a antiga Biblioteca de suporte. Eu recomendo usar o AndroidX, porque o Android não atualizará as bibliotecas de suporte após a versão 28.0.0. Veja as notas de versão da Biblioteca de Suporte.

Basta migrar para o AndroidX. Aqui está minha resposta detalhada para migrar para o AndroidX. Estou colocando aqui as etapas necessárias dessa resposta.

Antes de migrar, é altamente recomendável fazer backup do seu projeto.

Projeto existente

  • Android Studio> Menu Refatorar> Migrar para AndroidX ...
  • Ele analisará e abrirá a janela Refractor na parte inferior. Aceite as alterações a serem feitas.

imagem

Novo projeto

Coloque essas bandeiras no seu gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Marque @ mapeamentos da biblioteca para obter o mesmo pacote AndroidX .

Verifique @ página oficial de Migrar para AndroidX

O que é o Jetifier?

Khemraj
fonte
Ainda tinha um erro mais tarde, mas esta resposta ajudou: stackoverflow.com/a/49525685/1972372
Big_Chair
3
Por favor, lembre-se de clicar em "Do refactor" no canto inferior esquerdo depois de clicar em "Migrar para AndroidX"
Supaham
88

No meu caso, isso está funcionando perfeitamente. Adicionei abaixo de dois códigos de linha no arquivo manifest

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

O crédito vai para esta resposta .

Exemplo de arquivo de manifesto

Muhaiminur Rahman
fonte
4
Não sei se terei um problema no meu aplicativo mais tarde, mas funcionou!
Aliton Oliveira 07/06/19
4
Sim, eu tive um problema: mais do que um ficheiro foi encontrado com o OS caminho independente 'META-INF / androidx.core_core.version
Aliton Oliveira
3
então eu recebo um erro informando que as ferramentas não estão vinculadas à tag do aplicativo.
Travis Delly
Você pode postar logcat completo?
Muhaiminur Rahman
Eu tinha de ferramentas para o namespace: github.com/magus/react-native-facebook-login/issues/...
Filtro Johannes
29

Soluções simples - migre para o AndroidX

no gradle.properties, basta adicionar abaixo dois scripts

android.useAndroidX=true
android.enableJetifier=true

Qual foi o motivo ↓

Todos os pacotes no AndroidX vivem em um espaço para nome consistente, começando com a cadeia androidx. Os pacotes da Biblioteca de suporte foram mapeados para os pacotes androidx. * Correspondentes. Para um mapeamento completo de todas as classes antigas e construir artefatos para as novas, consulte a página Refatoração de Pacotes.

Consulte a página Refatoração de pacotes

EJ Chathuranga
fonte
Não existe esse arquivo gradle.properties no meu projeto. (Ele é originalmente criado em eclipse anos atrás e mais tarde mudou-se para estúdio android)
Sujith Manjavana
Oh ... Eu não enfrentar tal situação, eu encontrei abaixo segmento que pode ajudá-lo a stackoverflow.com/a/37389861/6917362 tentar fazer comentário, por favor
EJ Chathuranga
Apenas crie esse arquivo próximo ao build.gradle principal, se ele não existir, e sincronize o projeto.
Fedir Tsapana 6/01
13

Basta remover a dependência android.support

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

Citação de diretrizes de materiais

Se você ainda não deseja mudar para os novos pacotes androidx e com.google.android.material, poderá usar os Componentes de materiais através da dependência com.android.support:design:28.0.0-alpha3.

Nota: Você não deve usar as dependências com.android.support e com.google.android.de seu aplicativo ao mesmo tempo.

Apenas remover essa dependência funciona bem

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

Aqui está um exemplo de dependências completas

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       testImplementation 'junit:junit:4.12'
       androidTestImplementation 'com.android.support.test:runner:1.0.2'
       androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
   }
Arfat Binkileb
fonte
1
Essa é a resposta mais precisa.
18719 Fran Franzozo
1
@FranMarzoa Não é. O que acontece quando a biblioteca compat é importada de outra dependência?
M0skit0
1
@ m0skit0 que você teria que colocar uma questão diferente aqui, eu acho ...;)
Fran Marzoa
12

Veja esta imagem e adicione esta linha no seu AndroidManifest.xml android

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

insira a descrição da imagem aqui

Prashant Arvind
fonte
o que significa string?
Kishore Kumar
@KishoreKumar, você pode adicionar qualquer nome de string como appName também.
Prashant Arvind
para ser mais preciso, o queString deve ser um nome de classe completo que estenda AppComponentFactory. por exemplo, uma classe definida personalizada com.xxx.MyFactory estende AppComponentFactory
jiashie
11

Adicione essas linhas no arquivo AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"
Ajay
fonte
1
ferramentas está ficando vermelho ao adicioná-lo. existem outras coisas necessárias para adicionar?
Natsumiyu 23/07/19
Não há mais nada a acrescentar. Talvez uma das razões seja a sua versão gradle ser incompatível. Você pode mostrar seu código de arquivo AndroidManifest.xml?
Ajay
Tentei migrar para o androidx e continuo com a falha na execução da tarefa ': app: compileDebugJavaWithJavac'. > Falha na compilação; consulte a saída de erro do compilador para obter detalhes.
Natsumiyu 24/07/19
Aqui está o meu manifesto android <android app: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: usesCleartextTraffic = "true "android: supportRtl =" true "android: theme =" @ style / AppTheme "ferramentas: replace =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu
1
Ótima solução, economizei meu tempo.
Umair Iqbal
9

basta adicionar essas duas linhas de código ao seu arquivo de manifesto

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"
Manoj Alwis
fonte
8

Siga esses passos:

  • Vá para Refatorar e clique em Migrar para AndroidX
  • Clique em Refatorar
Perda de sangue
fonte
Isso não fará o refator inteiro :(
Mohsin
6

Esse problema ocorreu principalmente para dependências antigas .

Existem 2 soluções:

Primeiro:

Atualize todos old dependenciese ClassPaths dos Project level gradlearquivos.

classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'

O segundo:

Seu projecto Migrate to AndroidX

No menu do Android Studio -> Refanctor -> Migrate to AndroidX

Obrigado, deixe-me saber se alguém ajudar com esta resposta.

Hasib Akter
fonte
6

Finalmente, encontrei uma solução rápida e fácil adicionando duas linhas no android/build.gradlearquivo.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Por favor, siga este 100% correto.

Manoj Alwis
fonte
1
Onde adicionar isso?
Travis Delly
Adicione isso no arquivo android / build.gradle
Manoj Alwis
2
@ManojAlwis em qual seção do arquivo build.gradle precisamos colocar isso?
Keval Langalia 12/07/19
@KevalLangalia, basta adicionar essas duas linhas ao arquivo android -> build.gradle. por exemplo: buildscript {ext {buildToolsVersion = "28.0.3" minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion = "16. +" firebaseVersion = "17.3.4")
Manoj Alwis
1
realmente útil ... Obrigado
Vasudev Vyas
6

É tudo sobre a compatibilidade das versões da biblioteca

Eu estava enfrentando esse estranho bug de duas horas. Resolvi esse erro executando estas etapas

altere suas dependências build.gradle para

  implementation 'com.google.android.gms:play-services-maps:17.0.0'

para

  implementation 'com.google.android.gms:play-services-maps:15.0.0'
Kashif Ahmed
fonte
1
Honestamente eu fiz o mesmo e funcionou, então eu acho que é tudo sobre a compatibilidade versões biblioteca após a fusão proccess
Milos
6

Somente se você não quiser usar o androidx

Portanto, no meu caso, estou usando uma biblioteca que estava usando o androidx, mas não estou usando o androidx; portanto, ao fazer o downgrade dessa versão da biblioteca, o problema foi resolvido.

No meu caso:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

a biblioteca acima mencionada cria o problema 13. + receberá automaticamente uma nova versão da biblioteca que usa androidx. Então, fiz o downgrade da versão da biblioteca para:

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'

E o problema foi resolvido.

Suraj Vaishnav
fonte
6
  1. Vá para Refatorar-> Migrar-> Migrar para o Android X.

  2. Adicione isso ao seu gradle.propertiesarquivo:

    android.enableJetifier=true
    android.useAndroidX=true

E execute a sincronização.

Girish BR
fonte
Você pode, por favor, explicar qual é a sua situação agora?
Girish BR
O projeto que herdei tem meia década. Tentei implementar novas análises de Fabric / Firebase que o Google está empurrando. E essa nova biblioteca está usando bibliotecas de compatibilidade com Androidx, e meu projeto usa AppCompat. Agora, eu tive que lidar com toneladas de atualizações de dependência e outras coisas. Parei e tentei várias coisas, incluindo esses comandos, e preciso deles por causa das novas coisas do Firebase. Depois que liguei isso, recebi toneladas de erros do compilador. Corrigido isso, mas agora tenho erros provenientes de arquivos xi da interface do usuário. Portanto, terei que abandonar tudo e tentar com versões mais antigas.
Martin Berger
Após mais uma hora de corrigir manualmente os namespaces de classe no androidx, ele parece funcionar agora. O problema é que o compilador não pôde detectar no xml que, por exemplo: "android.support.v7.widget.AppCompatSpinner" precisa ser "androidx.appcompat.widget.AppCompatSpinner". Este documento foi útil: developer.android.com/jetpack/androidx/migrate
Martin Berger
Espero que esteja funcionando agora, deixe-me saber se algo der errado. Vamos trabalhar nisso!
Girish BR
4

Crie um novo projeto e compare seus arquivos build.gradle e substituiu todos

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

e outras dependências com o mesmo que estavam em um novo projeto algo assim

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'androidx.core:core-ktx:1.0.0-alpha3'

E depois consertava as importações para usar o androidx nos arquivos kotlin.

Muhammad Zahab Ahmed Khan
fonte
Por alguma razão, eu não quero usar o androidx.
shaby 6/01
4

Tudo o que fiz foi ir para a opção "Refatorar" no menu superior.

Em seguida, selecione "Migrar para AndroidX"

Aceite para salvar o projeto como um arquivo zip.

Atualize o Android Studio e o Gradle para garantir que nenhum problema seja encontrado.

d4rkcon
fonte
4

1.Adicione esses códigos no final do seu app / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }

2.Modificado sdk e versão de ferramentas para 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3. No seu arquivo AndroidManifest.xml, você deve adicionar duas linhas:

<application
    android:name=".YourApplication"
    android:appComponentFactory="AnyStrings"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

Ou simplesmente

  • Vá para Refatorar (Estúdio -> Menu -> Refatorar)
  • Clique no botão Migrar para AndroidX. está funcionando
  • está funcionando.
Attaullah
fonte
2
  • Ir para Refatorar ( Imagem )
  • Clique no botão Migrar para AndroidX. está funcionando
  • está funcionando.
Aydın Üzmez
fonte
1
Um link para uma solução é bem-vindo, mas garanta que sua resposta seja útil sem ela: adicione contexto ao link para que seus colegas usuários tenham uma idéia do que é e por que está lá, depois cite a parte mais relevante da página que você ' reencaminhando para o caso de a página de destino não estar disponível. Respostas que são pouco mais que um link podem ser excluídas.
Matthew
2

Se você não pretende migrar para o AndroidX, siga as etapas abaixo

  1. No tipo de terminal gradlew app: dependencies
  2. Após as dependências serem mostradas na janela, pressione Ctrl + f e digite androidX
  3. Você encontrará todas as dependências que estão usando a lib androidx internamente. Talvez seja necessário fazer o downgrade ou usar uma alternativa para garantir que não esteja mais usando as libs androidX internamente.
Swapnil
fonte
1

Eu tive esse mesmo problema por três dias.

É como o Android quer que usemos o Kotlin ou o AndroidX, eles estão acabando com o Android.

Mas foi assim que eu resolvi.

  • Migrei meu projeto para o AndroidX. Isso não gera erros relacionados a esse problema em questão; ele atualiza os arquivos, respectivamente. Nenhum método, classe ou nome de variável precisa ser alterado no seu aplicativo.

NB: Você deve estar usando as bibliotecas mais recentes (arquivo build.grudle) na versão estável mais recente do android studio 3.4.1

THEMBO CHARLES LWANGA
fonte
1

Eu não sei, esta é a resposta correta ou não, mas funcionou para mim

Aumentar propriedade do wrapper de grade

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

e construa o Gridle para

    classpath 'com.android.tools.build:gradle:3.4.2'

mostrando erro por causa da versão.

akshay shetty
fonte
Eu acho que a string deve ser androidx.core.app.AppComponentFactory, seqüências arbitrárias causarão erros aleatórios algumas vezes.,
seyedrezafar 01/04
0

Antes de tudo, certifique-se de adicionar esta linha na tag manifest

xmlns:tools="https://schemas.android.com/tools"

Em seguida, adicione ferramentas para substituir a sugerida no Android studio

Shubham Kumar Gupta Ggps
fonte
0

Altere proguardFile em build.gradle (Module: app) para o seguinte

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

ao invés de

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Isso funcionou para mim

David Wanjohi
fonte
0

Para resolver esse problema, eu recomendaria definir explicitamente a versão para as variáveis ​​ext no android/build.gradleprojeto raiz

ext {
    googlePlayServicesVersion = "16.1.0" // default: "+"
    firebaseVersion = "15.0.2" // default: "+"

    // Other settings
    compileSdkVersion = <Your compile SDK version> // default: 23
    buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
    targetSdkVersion = <Your target SDK version> // default: 23
    supportLibVersion = "<Your support lib version>" // default: 23.1.1
}

referência https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941

Govan
fonte
0

Também estou enfrentando o mesmo problema: para o seu estúdio Android, você acabou de alterar a versão do plugin Gradle para Android 3.3.2 e a versão Gradle é 5.1.1

Shiva Kanumala
fonte
0

no meu caso, eu sou adicionar no arquivo de manifesto `

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

etiqueta de aplicação, é claro, funcionará

vinod yadav
fonte