android - microsoft - visual studio installer
Herramientas: reemplazar no reemplazar en el manifiesto de Android (10)
Acabo de experimentar el mismo comportamiento de las tools:replace=...
según lo describe el OP.
Resultó que la causa raíz de las tools:replace
ser ignorado por la fusión de manifiesto es un error que se describe here . Básicamente significa que si tiene una biblioteca en su proyecto que contiene un manifiesto con un nodo <application ...>
que contiene un atributo tools:ignore=...
, puede suceder que el atributo tools:replace=...
en el manifiesto de su módulo principal será ignorado.
El punto difícil aquí es que puede suceder, pero no tiene que ser así. En mi caso, tenía dos bibliotecas, la biblioteca A con las tools:ignore=...
atributo, la biblioteca B con los atributos a reemplazar en los manifiestos respectivos y las tools:replace=...
atributo en el manifiesto del módulo principal . Si el manifiesto de B se fusionó en 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 de build.gradle
no tuvo ningún efecto, pero cambió el nombre del sabor.
Por lo tanto, la única solución confiable parece ser descomprimir el problema que causa la biblioteca, eliminar las tools:ignore=...
etiqueta (que no debería ser un problema, ya que es una pista para pelusa solamente) y empacar la biblioteca de nuevo.
Y vote para que se solucione el error, de la causa.
Estoy utilizando un proyecto de gradle con muchas dependencias de biblioteca diferentes y el uso de la nueva fusión de manifiesto. En mi etiqueta <application />
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
Declara tu encabezado de manifiesto como este
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourpackage"
xmlns:tools="http://schemas.android.com/tools">
Luego agregue a su etiqueta de aplicación el siguiente atributo:
<application
tools:replace="icon, label" ../>
Por ejemplo, necesito reemplazar el icono y la etiqueta. ¡Buena suerte!
Intente reordenar sus dependencias en su archivo gradle. Tuve que mover la biblioteca infractora de la parte inferior de la lista a la parte superior, y luego funcionó.
La pieza que faltaba para mí era esta:
xmlns:tools="http://schemas.android.com/tools"
por ejemplo:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.your.appid">
Puede reemplazarlos en su etiqueta de application
Manifiesto:
<application
...
tools:replace="android:label, android:icon, android:theme"/>
y trabajará para ti.
Explicación
El uso de dicha dependencia / biblioteca en su archivo gradle
que tiene esas etiquetas en la etiqueta de la aplicación del Manifiesto puede producir este problema y reemplazarlas en su Manifest
es la solución.
Puede reemplazarlos en su etiqueta de aplicación Manifiesto:
<application
tools:replace="android:icon, android:label, android:theme, android:name,android:allowBackup"
android:allowBackup="false"...>
y trabajará para ti.
Recibí un error similar en un proyecto que estaba importando:
Varias entradas con la misma clave: android: icon = REPLACE y herramientas: icon = REPLACE
Solucionado después de cambiar la línea a continuación dentro de la etiqueta de la aplicación:
tools:replace="icon, label, theme"
a
tools:replace="android:icon, android:label, android:theme"
Solución de trabajo final para mí (resaltados los ítems en el código de muestra):
- agregue la línea
xmlns:tools
en la etiqueta de manifiesto - agregar
tools:replace
en la etiqueta de la aplicación
Ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="pagination.yoga.com.tamiltv"
**xmlns:tools="http://schemas.android.com/tools"**
>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"
**tools:replace="android:icon,android:theme"**
>
Solucioné el mismo problema. Solución para mí:
- agregue la línea
xmlns:tools="http://schemas.android.com/tools"
en la etiqueta de manifiesto - agregar
tools:replace=..
en la etiqueta de manifiesto - move
android:label=...
en la etiqueta de manifiesto
Ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:replace="allowBackup, label"
android:allowBackup="false"
android:label="@string/all_app_name"/>
FIJO QUE TENÍA EL ERROR EXACTO, solo agrega estas herramientas: replace = "android: icon, android: theme"
en su etiqueta de aplicación en su manifiesto, funciona bien,