Estoy usando un proyecto gradle con muchas dependencias de biblioteca diferentes y estoy usando la nueva fusión de manifiesto. En mi <application />
etiqueta lo tengo configurado como tal:
<application tools:replace="android:icon, android:label, android:theme, android:name"
android:name="com.example.myapp.MyApplcation"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/application_name"
android:logo="@drawable/logo_ab"
android:theme="@style/AppTheme"
>
....
</application>
Sin embargo, estoy recibiendo el error:
/android/MyApp/app/src/main/AndroidManifest.xml:29:9 Error:
Attribute application@icon value=(@drawable/ic_launcher) from AndroidManifest.xml:29:9
is also present at {Library Name} value=(@drawable/app_icon)
Suggestion: add 'tools:replace="android:icon"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:30:9 Error:
Attribute application@label value=(@string/application_name) from AndroidManifest.xml:30:9
is also present at {Library Name} value=(@string/app_name)
Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:27:9 Error:
Attribute application@name value=(com.example.myapp.MyApplication) from AndroidManifest.xml:27:9
is also present at {Another Library}
Suggestion: add 'tools:replace="android:name"' to <application> element at AndroidManifest.xml:26:5 to override
/android/MyApp/app/src/main/AndroidManifest.xml:32:9 Error:
Attribute application@theme value=(@style/AppTheme) from AndroidManifest.xml:32:9
is also present at {Library Name} value=(@style/AppTheme)
Suggestion: add 'tools:replace="android:theme"' to <application> element at AndroidManifest.xml:26:5 to override
android
android-gradle-plugin
agrosner
fuente
fuente
<application>
etiqueta repetida en el proyecto. Por favor asegúrese de que solo haya uno<application>
.Respuestas:
Declara tu encabezado manifiesto de esta manera
Luego puede agregar a su etiqueta de aplicación el siguiente atributo:
Por ejemplo, necesito reemplazar el ícono y la etiqueta. ¡Buena suerte!
fuente
tools:node="replace"
:<meta-data tools:node="replace" android:name="QUERY_LOG" android:value="true" />
etc.tools:replace
a mi etiqueta de aplicación que debería reemplazarla y no la fuente que debería reemplazarse. Entonces, los manifiestos de mi aplicación reemplazan lo definido en mi biblioteca. Usted dice "qué se debe reemplazar" en lugar de "qué se puede reemplazar". Espero que eso aclare las preguntas.tools:replace="android:versionCode, android:versionName"
debe estar dentro de la<manifest >
etiqueta.Solucioné el mismo problema. Solución para mi:
xmlns:tools="http://schemas.android.com/tools"
línea en la etiqueta de manifiestotools:replace=..
en la etiqueta de manifiestoandroid:label=...
en la etiqueta de manifiestoEjemplo:
fuente
<manifest>
directamente en lugar de debajo<application>
fue lo único que solucionó mi problema.Intente reordenar sus dependencias en su archivo gradle. Tuve que mover la biblioteca ofensiva de la parte inferior de la lista a la parte superior, y luego funcionó.
fuente
Acabo de experimentar el mismo comportamiento
tools:replace=...
descrito por el OP.Resultó que la causa raíz de
tools:replace
ser ignorado por la fusión de manifiesto es un error descrito aquí . Básicamente significa que si tiene una biblioteca en su proyecto que contiene un manifiesto con un<application ...>
nodo que contiene untools:ignore=...
atributo, puede suceder quetools:replace=...
se ignore el atributo en el manifiesto de su módulo principal.El punto difícil aquí es que puede suceder, pero no es necesario. En mi caso, tenía dos bibliotecas, la biblioteca A con el
tools:ignore=...
atributo, la biblioteca B con los atributos que se reemplazarían en los manifiestos respectivos y eltools:replace=...
atributo en el manifiesto del módulo principal. Si el manifiesto de B se fusionó con el manifiesto principal antes del manifiesto de A, todo funcionó como se esperaba. En orden de fusión opuesto, apareció el error.El orden en que ocurren estas fusiones parece ser algo aleatorio. En mi caso, cambiar el orden en la sección de dependencias
build.gradle
no tuvo ningún efecto, pero cambiar el nombre del sabor lo hizo.Por lo tanto, la única solución confiable parece ser desempaquetar el problema que causa la biblioteca, eliminar la
tools:ignore=...
etiqueta (que no debería ser un problema, ya que es solo una pista para la pelusa) y empacar la biblioteca nuevamente.Y vote para que se solucione el error, por causa.
fuente
<manifest>
nodo desde el<application>
nodo y funcionó.Solución de trabajo final para mí (destacó los valores en el código de muestra):
xmlns:tools
línea en la etiqueta de manifiestotools:replace
en la etiqueta de la aplicaciónEjemplo:
fuente
La pieza que faltaba para mí era esta:
por ejemplo:
fuente
Puede reemplazarlos en su etiqueta de aplicación Manifiesto:
y trabajará para ti
fuente
tools:replace="android:label"
a la aplicación pero no funcionaCORREGIDO TENÍA EL ERROR EXACTO, solo agregue estas herramientas: replace = "android: icon, android: theme"
en su etiqueta de aplicación en su manifiesto, funciona bien,
fuente
Puede reemplazar aquellos en su
application
etiqueta Manifiesto :y trabajará para ti
Explicación
El uso de dicha dependencia / biblioteca en su
gradle
archivo que tenga esas etiquetas en la etiqueta de aplicación de su Manifiesto puede producir este problema y reemplazarlas en suManifest
es la solución.fuente
El siguiente truco funciona:
xmlns:tools="http://schemas.android.com/tools"
línea en la etiqueta de manifiestotools:replace="android:icon,android:theme,android:allowBackup,label"
en la etiqueta de la aplicaciónfuente
Mi problema es el proyecto de módulos múltiples con módulo base, módulo de aplicación y módulo de funciones. Cada módulo tiene AndroidManifest propio, e implementé una variante de compilación para depuración y main. Por lo tanto, debemos asegurarnos de que "android: name" acaba de declararse en Manifiesto de depuración y principal únicamente, y no lo establezca en ninguno de Manifiesto en el módulo secundario. Ej: Manifiesto en principal:
Manifiesto en depuración:
No establezca "android: name" en otros archivos de manifiesto como este:
Simplemente defina en un módulo de características como este y se fusionará bien
fuente
Estaba recibiendo un error similar en un proyecto que estaba importando:
Se corrigió después de cambiar la siguiente línea dentro de la etiqueta de la aplicación:
a
fuente
También pasé por este problema y cambié eso:
a
fuente
fuente