El material de Android y la fusión del manifiesto de appcompat fallaron

223

Tengo siguiente grado

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

Pero cuando quiero compilar la aplicación obtengo el siguiente registro:

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.

¡Bueno! Ve a manifestar y hazlo:

<?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>

Entonces recibo este error en mi Logcat:

Manifest merger failed with multiple errors, see logs that I have Linked with it
Евгений Усов
fuente
2
Intente eliminar estas líneas: implementación 'com.android.support:appcompat-v7:28.0.0-rc01' e implementación 'com.android.support.constraint: restrict-layout: 1.1.2'
vcapra1
2
Creo que los paquetes de materiales están incluidos en el diseño de Android, échale un vistazo ...
Marcos Vasconcelos
Necesito esto: material.io/design/components/app-bars-bottom.html . Esto está en el diseño de Android?
Евгений Усов
También puedes consultar este: stackoverflow.com/a/54825603/1318946
Pratik Butani
El nuevo estudio de Android tiene la función de migrar su aplicación a AndroidX sin problemas. siga el siguiente enlace. github.com/material-components/material-components-android/…
Ravi Jaggarapu

Respuestas:

15

Simplemente cambie "rc01" en la primera y última línea dentro de las dependencias a "alpha1" Esto está funcionando para mí

Anubhav Gupta
fuente
Se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / androidx.core_core.version
Aliton Oliveira
40
No tengo "rc01" escrito en la implementación 'com.android.support:appcompat-v7:28.0.0'. Aún tengo el problema. Por favor sugiera alguna solución.
avani kothari
10
Esta respuesta debería haber sido un comentario a la pregunta.
Ananth
459

Tuve un problema similar Se agregaron dos líneas en el gradle.propertiesarchivo:

android.useAndroidX=true
android.enableJetifier=true

Estas dos líneas resolvieron automáticamente mis conflictos de dependencia entre los archivos de Google y las dependencias de terceros. Aquí está el enlace a seguir: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project

Abir Hasan
fuente
66
android.useAndroidX = true
Frank Fang
66
después de agregar este error siguiente ocurre `` `* Lo que salió mal: la ejecución falló para la tarea ': react-native-camera: compileGeneralDebugJavaWithJavac'. > La compilación falló; vea la salida del error del compilador para más detalles. * Intente: Ejecutar con la opción --stacktrace para obtener el seguimiento de la pila. Ejecute con la opción --info o --debug para obtener más resultados de registro. Ejecute con --scan para obtener información completa. `` `
Dileepa Chandima
@PrinceHamza revisa esto, encontramos una solución para este github.com/facebook/react-native/issues/…
Dileepa Chandima
99
Esta debería ser la respuesta aceptada. Esto resolvió el problema.
VishalKale
2
"¡Pero no veo un 'archivo gradles.properties'"! Sí, así que en la carpeta raíz de la aplicación en el proyecto de estudio, cree ese archivo (sin extensión) y agregue esas líneas.
user1010160
145

Me enfrenté al mismo error cuando intento agregar la biblioteca Kotlin-KTX a mi proyecto.

¡Intento la migración de AndroidX y el problema se solucionó!

Refactorizar / migrar a AndroidX

Asignar
fuente
1
Esto funciona, pero algunas de las declaraciones de importación que genera utilizan nombres de paquetes obsoletos. Tuve que arreglar un montón de ellos, simplemente usando cualquier androidx.*nombre de paquete que el IDE sugiriera como solución.
Andrew Koster
1
@Mete esta respuesta me ha salvado la vida. ¿Puedo comprarte una cerveza?
girish_vr
@girish_vr Gracias por la oferta :) Me alegro de que haya funcionado, eso es suficiente para hacerme sonreír.
Mete
Me encontré con este problema porque estaba sacando la última versión de la biblioteca "support-v4" en mi archivo build.gradle ... no es una buena práctica. Si hubiera estado haciendo referencia a una versión específica de la biblioteca dentro de mi archivo gradle, en primer lugar nunca me habría encontrado con este problema. Además, después de investigar un poco más, pude ver que Google estaba recomendando cambiar a la biblioteca de AndroidX; Entonces, decidí morder la bala. Afortunadamente, todos los problemas se resolvieron después de la actualización ... se evitó el desastre y la LECCIÓN APRENDIÓ sobre las referencias de gradle.
BluJ IT
104

Razón del fracaso

Está utilizando la biblioteca de materiales que forma parte de AndroidX . Si no conoce AndroidX, lea esta respuesta .

Una aplicación debe usar AndroidX o antiguas bibliotecas de soporte de Android. Por eso te enfrentaste a este problema.

Por ejemplo -

En tu gradle, estás usando

  • com.android.support:appcompat-v7 (Parte de la antigua --Android Support Library--)
  • com.google.android.material:material(Parte de AndroidX) (artefacto de compilación de AndroidX de com.android.support:design)

Solución

Entonces, la solución es usar AndroidX o la antigua Biblioteca de soporte. Recomiendo usar AndroidX, porque Android no actualizará las bibliotecas de soporte después de la versión 28.0.0. Consulte las notas de la versión de la Biblioteca de soporte.

Simplemente migra a AndroidX. Aquí está mi respuesta detallada para migrar a AndroidX. Estoy poniendo aquí los pasos necesarios de esa respuesta.

Antes de migrar, se recomienda hacer una copia de seguridad de su proyecto.

Proyecto existente

  • Android Studio> Menú Refactor> Migrar a AndroidX ...
  • Analizará y abrirá la ventana Refractor en la parte inferior. Aceptar los cambios a realizar.

imagen

Nuevo proyecto

Pon estas banderas en tu gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Verifique las asignaciones de @ Library para obtener el mismo paquete de AndroidX .

Consulte @ Página oficial de Migrar a AndroidX

¿Qué es el chorro de agua?

Khemraj
fuente
Todavía tuve un error después, pero esta respuesta ayudó: stackoverflow.com/a/49525685/1972372
Big_Chair
3
Recuerde hacer clic en "Hacer refactorización" en la parte inferior izquierda después de hacer clic en "Migrar a AndroidX"
SupaHam
88

En mi caso, esto funciona perfectamente. He agregado debajo de dos códigos de línea dentro del archivo de manifiesto

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

El crédito va a esta respuesta .

Ejemplo de archivo de manifiesto

Muhaiminur Rahman
fuente
44
No sé si tendré un problema en mi aplicación más adelante, ¡pero funcionó!
Aliton Oliveira
44
Sí, tuve un problema: se encontró más de un archivo con la ruta independiente del sistema operativo 'META-INF / androidx.core_core.version
Aliton Oliveira
3
entonces recibo un error que indica que las herramientas no están vinculadas a la etiqueta de la aplicación.
Travis Delly
¿Puedes publicar logcat completo?
Muhaiminur Rahman
Tuve que herramientas para el espacio de nombres: github.com/magus/react-native-facebook-login/issues/…
Johannes Filter
29

Soluciones simples: migre a AndroidX

en el gradle.properties, solo agregue debajo de dos scripts

android.useAndroidX=true
android.enableJetifier=true

¿Cuál fue la razón? ↓

Todos los paquetes en AndroidX viven en un espacio de nombres consistente que comienza con la cadena androidx. Los paquetes de la biblioteca de soporte se han mapeado en los paquetes androidx. * Correspondientes. Para obtener una asignación completa de todas las clases antiguas y crear artefactos con las nuevas, consulte la página Refactorización de paquetes.

Por favor vea la página de Refactorización de paquetes

EJ Chathuranga
fuente
No existe tal archivo gradle.properties en mi proyecto. (Se creó originalmente en eclipse hace años y luego se mudó al estudio de Android)
Sujith Manjavana
Oh ... No enfrenté tal situación, encontré debajo del hilo que podría ayudarte a stackoverflow.com/a/37389861/6917362 Intenta y comenta por favor
EJ Chathuranga
Simplemente cree ese archivo cerca de build.gradle principal si no existe y sincronice el proyecto.
Fedir Tsapana
13

Simplemente elimine la dependencia de android.support

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

Citando de pautas materiales

Si aún no desea cambiar a los nuevos paquetes androidx y com.google.android.material, puede usar Componentes materiales a través de la dependencia com.android.support:design:28.0.0-alpha3.

Nota: No debe usar las dependencias com.android.support y com.google.android.dependencies en su aplicación al mismo tiempo.

Simplemente eliminar esta dependencia funciona bien

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

Aquí hay un ejemplo completo de dependencias

    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
fuente
1
Esta es la respuesta más precisa.
Fran Marzoa
1
@FranMarzoa No lo es. ¿Qué sucede cuando la biblioteca de compatibilidad se importa desde otra dependencia?
m0skit0
1
@ m0skit0 que tendrías que publicar una pregunta diferente aquí, supongo ...;)
Fran Marzoa
12

Vea esta imagen y agregue esta línea en su Android AndroidManifest.xml

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

ingrese la descripción de la imagen aquí

Prashant Arvind
fuente
lo que sea que signifique cuerda?
Kishore Kumar el
@KishoreKumar puede agregar cualquier nombre de cadena como appName también.
Prashant Arvind
para ser precisos, whateverString debería ser un nombre de clase completo que extienda AppComponentFactory. por ejemplo, una clase personalizada definida com.xxx.MyFactory extiende AppComponentFactory
jiashie
11

Agregue estas líneas dentro en el archivo AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"
Ajay
fuente
1
las herramientas se vuelven rojas al agregarlo. ¿Hay otras cosas necesarias para agregar?
natsumiyu
No hay nada más que agregar. Quizás una de las razones es que su versión gradle no coincide. ¿Puedes mostrar tu código de archivo AndroidManifest.xml?
Ajay
Intenté migrar a androidx y sigo teniendo la ejecución fallida para la tarea ': aplicación: compileDebugJavaWithJavac'. > La compilación falló; vea la salida del error del compilador para más detalles.
natsumiyu
Aquí está mi manifiesto de Android <aplicación android: allowBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: usesCleartextTraffic = "true "android: supportsRtl =" true "android: theme =" @ style / AppTheme "herramientas: replace =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu
1
Gran solución, me ahorró tiempo.
Umair Iqbal
9

simplemente agregue estas dos líneas de código a su archivo Manifiesto

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

Sigue estos pasos:

  • Ir a Refactor y hacer clic en Migrar a AndroidX
  • Haga clic en Refactorizar
Pérdida de sangre
fuente
Esto no hará todo el refactor :(
Mohsin
6

Este problema ocurrió principalmente para dependencias antiguas .

Hay 2 soluciones:

El primero:

Actualice todos old dependenciesy ClassPaths desde Project level gradlearchivos.

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

Segundo:

Tu proyecto Migrate to AndroidX

Desde el menú de Android Studio -> Refanctor -> Migrate to AndroidX

Gracias, avíseme si alguien ayuda con esta respuesta.

Hasib Akter
fuente
6

Finalmente encontré una solución rápida y fácil agregando dos líneas en el android/build.gradlearchivo.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Por favor, siga esto 100% correcto.

Manoj Alwis
fuente
1
¿Dónde incluso agregar esto?
Travis Delly
Añadir este en el archivo / build.gradle Android
Manoj Alwis
2
@ManojAlwis ¿en qué sección del archivo build.gradle necesitamos poner esto?
Keval Langalia
@KevalLangalia, solo agregue estas dos líneas a Android -> build.gradle file. por ejemplo: 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 ... Gracias
Vasudev Vyas
6

Se trata de la compatibilidad de las versiones de la biblioteca.

Me enfrenté a este extraño insecto un par de 2 horas. Resolví este error siguiendo estos pasos

ahorque sus dependencias build.gradle en

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

a

  implementation 'com.google.android.gms:play-services-maps:15.0.0'
Kashif Ahmed
fuente
1
Honestamente yo hice lo mismo y funcionó, así que supongo que todo es cuestión de la compatibilidad versiones biblioteca después de la fusión de proccess
Milos
6

Solo si no quieres usar androidx

Entonces, en mi caso, estoy usando una biblioteca que estaba usando androidx pero no estoy usando androidx, así que cuando degradé esa versión de la biblioteca, el problema se resolvió.

En mi caso:

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

la biblioteca mencionada anteriormente causa el problema 13. + obtendrá automáticamente una nueva versión de la biblioteca que usa androidx. Así que bajé la versión de la biblioteca a:

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

Y el problema fue resuelto.

Suraj Vaishnav
fuente
6
  1. Vaya a Refactor-> Migrar-> Migrar a Android X.

  2. Agregue esto a su gradle.propertiesarchivo:

    android.enableJetifier=true
    android.useAndroidX=true

Y realizar sincronización.

BR Girish
fuente
¿Puede explicarme cuál es su situación ahora?
Girish BR
El proyecto que heredé tiene media década. Traté de implementar nuevos análisis de Fabric / Firebase que Google está impulsando. Y esa nueva biblioteca está usando bibliotecas de compatibilidad con Androidx, y mi proyecto usa AppCompat. Ahora, tuve que lidiar con toneladas de actualizaciones de dependencia y esas cosas. Me detuve, y luego probé varias cosas, incluidos estos comandos, y los necesito debido a las nuevas cosas de Firebase. Después de encender esto, obtuve toneladas de errores de compilación. Se corrigió eso, pero ahora tengo errores provenientes de los archivos ui xml. Por lo tanto, tendré que abandonar todo e intentar con versiones anteriores.
Martin Berger
Después de una hora más de arreglar manualmente los espacios de nombres de clase a androidx, parece que funciona ahora. El problema es que el compilador no pudo detectar en xml que, por ejemplo: "android.support.v7.widget.AppCompatSpinner" debe ser "androidx.appcompat.widget.AppCompatSpinner". Este documento fue útil: developer.android.com/jetpack/androidx/migrate
Martin Berger
Espero que esté funcionando ahora, avíseme si algo sale mal. ¡Trabajaremos en ello!
Girish BR
4

Crea un nuevo proyecto y compara tus archivos build.gradle y reemplaza todos

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

y otras dependencias con lo mismo que en un nuevo proyecto, algo así

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'

Y luego se arreglaron las importaciones para usar androidx en archivos kotlin.

Muhammad Zahab Ahmed Khan
fuente
Por alguna razón, no quiero usar androidx.
Shaby
4

Todo lo que hice fue ir a la opción "Refactorizar" en el menú superior.

Luego seleccione "Migrar a AndroidX"

Acepte guardar el proyecto como un archivo zip.

Actualice Android Studio y Gradle para asegurarse de que no se encuentren problemas.

d4rkcon
fuente
4

1.Añadió estos códigos al final de su aplicación / build.gradle:

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

2.Sdk modificado y versión de herramientas a 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3.En su archivo AndroidManifest.xml, debe agregar dos líneas:

<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">

O simplemente

  • Vaya a Refactor (Studio -> Menú -> Refactor)
  • Haga clic en Migrar a AndroidX. esta funcionando
  • esta funcionando.
Attaullah
fuente
2
  • Ir a Refactor ( Imagen )
  • Haga clic en Migrar a AndroidX. esta funcionando
  • esta funcionando.
Aydın Üzmez
fuente
1
Un enlace a una solución es bienvenido, pero asegúrese de que su respuesta sea útil sin él: agregue contexto alrededor del enlace para que sus otros usuarios tengan una idea de qué es y por qué está allí, luego cite la parte más relevante de la página volver a vincular en caso de que la página de destino no esté disponible. Se pueden eliminar las respuestas que son poco más que un enlace.
Mateo
2

Si no tiene intención de migrar a AndroidX, siga los pasos a continuación.

  1. En la aplicación gradlew de tipo terminal: dependencias
  2. Después de que se muestren las dependencias en la ventana, presione Ctrl + fy escriba androidX
  3. Encontrará todas las dependencias que usan androidx lib internamente, es posible que deba degradar eso o usar una alternativa para garantizar que ya no use androidX libs internamente.
Swapnil
fuente
1

Tuve este mismo problema durante tres días.

Es como si Android quisiera que usáramos Kotlin o AndroidX, están eliminando Android.

Pero así es como lo resolví.

  • Migré mi proyecto a AndroidX. Esto no trae ningún error relacionado con este tema en cuestión, actualiza los archivos respectivamente. Ningún método, clase o nombre de variable necesita ser cambiado en su aplicación.

NB: debe utilizar las últimas bibliotecas (archivo build.grudle) en la última versión estable de Android Studio 3.4.1

THEMBO CHARLES LWANGA
fuente
1

No sé si esta es la respuesta correcta o no, pero funcionó para mí.

Aumentar propiedad de envoltura de cuadrícula

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

y construir cuadrícula para

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

muestra error debido a la versión.

akshay shetty
fuente
Creo que la cadena debe ser androidx.core.app.AppComponentFactory, las cadenas arbitrarias ocasionarán errores aleatorios algunas veces.,
seyedrezafar
0

En primer lugar, asegúrese de agregar esta línea en la etiqueta de manifiesto

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

Luego, agregue herramientas, reemplace la sugerida en Android Studio

Shubham Kumar Gupta Ggps
fuente
0

Cambie proguardFile en build.gradle (Módulo: aplicación) a lo siguiente

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

en vez de

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

Esto funciono para mi

David Wanjohi
fuente
0

Para resolver este problema, recomendaría definir explícitamente la versión para las variables ext en el android/build.gradleproyecto raíz

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
}

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

Govan
fuente
0

También estoy enfrentando el mismo problema, para su estudio de Android, solo cambia la versión 3.3.2 del complemento Gradle de Android y la versión Gradle es 5.1.1

Shiva Kanumala
fuente
0

en mi caso, agrego en el archivo de manifiesto `

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

etiqueta de aplicación, por supuesto, funcionará

vinod yadav
fuente