Error de fusión manifiesto error

Estoy en el proceso de mover la gran aplicación de mis proyectos actuales a Android Studio y Gradle. Actualmente estoy atascado en el siguiente problema:

Error:(87, 9) Execution failed for task ':App:processDebugManifest'. > Manifest merger failed : Attribute application@label value=(@string/app_label) from AndroidManifest.xml:87:9 is also present at ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) Suggestion: add 'tools:replace="android:label"' to  element at AndroidManifest.xml:82:5 to override 

Intenté agregar los siguientes atributos al archivo principal AndroidManifest.xml :

 tools:replace="android:label, *App Name*" tools:replace="android:label, @string/app_label" tools:replace="android:label" 

Ninguna de estas definiciones de atributos funciona. ¿Qué estoy haciendo mal?

Prueba esto:

Agregar esto a

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

Agregar esto a

 tools:node="replace" 

En base a esto , debe anular todos los elementos. “Reemplace la statement de menor prioridad por la anotada”.

Fondo

Cuando se combinan los archivos de manifiesto, hay un conflicto con el atributo de label .

En general, hay tres tipos de archivos de manifiesto que deben fusionarse en un solo manifiesto de aplicación resultante, aquí en orden de prioridad:

  1. Los sabores del producto y los tipos de comstackción son archivos de manifiesto específicos.
  2. Archivo de manifiesto principal para la aplicación.
  3. Archivos de manifiesto de biblioteca.

Resoluciones

El conflicto se puede resolver de una de estas dos maneras:

Eliminar la etiqueta conflictiva

Elimine el atributo conflictivo del archivo de manifiesto de la biblioteca (o nivel inferior).

En este caso, ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name) tiene un valor @string/app_name definido que es diferente del de la aplicación principal. Por lo tanto, si no es necesario, elimínelo, simplemente elimine el android:label="@string/app_name" del archivo AndroidManifest.xml archivo de la biblioteca.

Agregue un atributo para permitir una resolución automática del conflicto

Hay varios marcadores de atributos especiales (en el espacio de nombres de las herramientas) que pueden usarse para express una decisión específica sobre cómo resolver conflictos.

En este caso, para provocar explícitamente que la android:label la aplicación principal anule cualquier otra etiqueta de aplicación (por ejemplo, archivo de biblioteca), agregue la definición xmlns:tools="http://schemas.android.com/tools" al nodo y tools:replace="label" al nodo .

Aquí hay un ejemplo: use esto en el archivo AndroidManifest.xml la aplicación principal:

    

Este enfoque también funcionaría con cualquier otro atributo conflictivo; por ejemplo, si el atributo del icon también estaba en conflicto, podría cambiarse a tools:replace="label, icon" .

Si fue afortunado, como yo lo fui, puede solucionar el problema de forma manual con un hacky work-around.

Los archivos AAR son solo archivos .zip con una extensión .aar. En mi caso, descomprimí el archivo .aar, eliminé la android:label del archivo AndroidManifest.xml de la biblioteca y luego rearchivé los archivos restantes con una extensión .aar y todo parece funcionar perfectamente con el nuevo .aar.

FYI, esto parece ser un error conocido en el plugin android gradle .

Solucioné el mismo problema. Solución para mí:

  1. agregue la línea xmlns:tools="http://schemas.android.com/tools" en la etiqueta de manifiesto
  2. agregar tools:replace=.. en la etiqueta de manifiesto
  3. move android:label=... en la etiqueta de manifiesto

Ejemplo aquí