J'utilise un projet Gradle avec de nombreuses dépendances de bibliothèque et j'utilise la nouvelle fusion de manifeste. Dans ma balise <application />
, je l'ai configuré comme tel:
<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>
Pourtant, je reçois l'erreur:
/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
Déclarez l'en-tête de votre manifeste comme ceci
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.yourpackage"
xmlns:tools="http://schemas.Android.com/tools">
Ensuite, vous pouvez ajouter à votre balise d'application l'attribut suivant:
<application
tools:replace="icon, label" ../>
Par exemple, je dois remplacer l'icône et l'étiquette. Bonne chance!
J'ai corrigé le même problème. Solution pour moi:
xmlns:tools="http://schemas.Android.com/tools"
dans la balise manifestetools:replace=..
dans la balise manifesteAndroid:label=...
dans la balise manifesteExemple:
<?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"/>
Essayez de réorganiser vos dépendances dans votre fichier Gradle. J'ai dû déplacer la bibliothèque incriminée du bas de la liste vers le haut, puis cela a fonctionné.
Je viens de vivre le même comportement de tools:replace=...
que celui décrit par l'OP.
Il s’est avéré que la cause fondamentale de l’ignorance de tools:replace
par la fusion de manifestes est un bogue décrit ici . Cela signifie que si votre bibliothèque contient un manifeste avec un noeud <application ...>
contenant un attribut tools:ignore=...
, il peut arriver que l'attribut tools:replace=...
du manifeste de votre module principal soit ignoré.
Le point délicat ici est que cela peut se produire, mais n’est pas obligé. Dans mon cas, j'avais deux bibliothèques, la bibliothèque A avec l'attribut tools:ignore=...
, la bibliothèque B avec les attributs à remplacer dans les manifestes respectifs et l'attribut tools:replace=...
dans le manifeste du module principal. Si le manifeste de B était fusionné dans le manifeste principal avant le manifeste de A, tout fonctionnait comme prévu. Dans l'ordre de fusion opposé, l'erreur est apparue.
L'ordre dans lequel ces fusions se produisent semble être quelque peu aléatoire. Dans mon cas, modifier l'ordre dans la section des dépendances de build.gradle
n'a eu aucun effet, mais changer le nom de la saveur l'a fait.
Ainsi, la seule solution de contournement fiable semble être de décompresser le problème de la bibliothèque, de supprimer la balise tools:ignore=...
(ce qui ne devrait pas poser de problème, car il ne s'agit que d'un conseil pour lint) et de ranger la bibliothèque à nouveau.
Et votez pour que le bogue soit corrigé, de cause.
Solution de travail finale pour moi (a mis en évidence les exemples dans le code exemple):
xmlns:tools
dans la balise manifestetools:replace
dans la balise d'applicationExemple:
<?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"**
>
La pièce manquante pour moi était la suivante:
xmlns:tools="http://schemas.Android.com/tools"
par exemple:
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
package="com.your.appid">
Vous pouvez remplacer ceux de votre balise d'application Manifest:
<application
tools:replace="Android:icon, Android:label, Android:theme, Android:name,Android:allowBackup"
Android:allowBackup="false"...>
et travaillera pour vous.
Vous pouvez remplacer ceux de votre balise Manifest application
:
<application
...
tools:replace="Android:label, Android:icon, Android:theme"/>
et travaillera pour vous.
Explication
L'utilisation d'une telle dépendance/bibliothèque dans votre fichier gradle
qui a ces étiquettes dans la balise d'application de son manifeste peut générer ce problème et les remplacer dans votre Manifest
constitue la solution.
FIXED IT A EU L'ERREUR EXACTE, Ajoutez juste ces outils: replace = "Android: icône, Android: thème"
dans votre application tag dans votre manifeste, cela fonctionne très bien,
Le hack suivant fonctionne:
xmlns:tools="http://schemas.Android.com/tools"
dans la balise manifestetools:replace="Android:icon,Android:theme,Android:allowBackup,label"
dans la balise d'applicationJe recevais une erreur similaire sur un projet que j'importais:
Plusieurs entrées avec la même clé: Android: icon = REPLACE et outils: icon = REMPLACER
Correction après modification de la ligne ci-dessous dans la balise d'application:
tools:replace="icon, label, theme"
à
tools:replace="Android:icon, Android:label, Android:theme"
J'ai également traversé ce problème et changé cela:
<application Android:debuggable="true" Android:icon="@drawable/app_icon" Android:label="@string/app_name" Android:supportsRtl="true" Android:allowBackup="false" Android:fullBackupOnly="false" Android:theme="@style/UnityThemeSelector">
à
<application tools:replace="Android:allowBackup" Android:debuggable="true" Android:icon="@drawable/app_icon" Android:label="@string/app_name" Android:supportsRtl="true" Android:allowBackup="false" Android:fullBackupOnly="false" Android:theme="@style/UnityThemeSelector">