Ich verwende ein Gradle-Projekt mit vielen verschiedenen Bibliotheksabhängigkeiten und verwende die neue Manifest-Fusion. In meinem <application />
Tag habe ich es als solches eingerichtet:
<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>
Dennoch erhalte ich den Fehler:
/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
quelle
quelle
<application>
Tag im Projekt wiederholt. Bitte stellen Sie sicher, dass es nur einen gibt<application>
.Antworten:
Deklarieren Sie Ihren Manifest-Header wie folgt
Anschließend können Sie Ihrem Anwendungstag das folgende Attribut hinzufügen:
Zum Beispiel muss ich Symbol und Beschriftung ersetzen. Viel Glück!
quelle
tools:node="replace"
:<meta-data tools:node="replace" android:name="QUERY_LOG" android:value="true" />
usw.tools:replace
habe meinem Anwendungs-Tag hinzugefügt , das es ersetzen soll, und nicht die Quelle, die ersetzt werden soll. Meine App-Manifeste ersetzen also das, was in meiner Bibliothek definiert ist. Sie sagen "was ersetzt werden soll" anstelle von "was ersetzt werden kann". Ich hoffe das räumt die Fragen auf.tools:replace="android:versionCode, android:versionName"
muss sich das Attribut im<manifest >
Tag befinden.Ich habe das gleiche Problem behoben. Lösung für mich:
xmlns:tools="http://schemas.android.com/tools"
Zeile in das Manifest-Tag eintools:replace=..
das Manifest-Tag hinzuandroid:label=...
das Manifest-TagBeispiel:
quelle
<manifest>
direkt anstelle von unter<application>
das einzige war, was mein Problem behoben hat.Versuchen Sie, Ihre Abhängigkeiten in Ihrer Gradle-Datei neu zu ordnen. Ich musste die fehlerhafte Bibliothek vom Ende der Liste nach oben verschieben, und dann funktionierte es.
quelle
Ich habe gerade das gleiche Verhalten von erlebt
tools:replace=...
wie vom OP beschrieben .Es stellte sich heraus, dass die Hauptursache für
tools:replace
das Ignorieren bei der Manifest-Fusion ein hier beschriebener Fehler ist . Grundsätzlich bedeutet dies, dass wenn Sie in Ihrem Projekt eine Bibliothek haben, die ein Manifest mit einem<application ...>
Knoten enthält, der eintools:ignore=...
Attribut enthält , dastools:replace=...
Attribut im Manifest Ihres Hauptmoduls ignoriert wird.Der schwierige Punkt hier ist, dass es passieren kann , aber nicht muss. In meinem Fall hatte ich zwei Bibliotheken, Bibliothek A mit dem
tools:ignore=...
Attribut, Bibliothek B mit den Attributen, die in den jeweiligen Manifesten ersetzt werden sollen, und dastools:replace=...
Attribut im Manifest des Hauptmoduls. Wenn das Manifest von B vor dem Manifest von A mit dem Hauptmanifest zusammengeführt wurde, funktionierte alles wie erwartet. In umgekehrter Reihenfolge trat der Fehler auf.Die Reihenfolge, in der diese Zusammenführungen stattfinden, scheint etwas zufällig zu sein. In meinem Fall hatte das Ändern der Reihenfolge im Abhängigkeitsabschnitt von
build.gradle
keine Auswirkung, aber das Ändern des Namens des Geschmacks hat es getan.Die einzige zuverlässige Problemumgehung scheint darin zu bestehen, das Problem, das die Bibliothek verursacht, zu entpacken, das
tools:ignore=...
Tag zu entfernen (was kein Problem sein sollte, da es nur ein Hinweis für Flusen ist) und die Bibliothek erneut zu packen.Und stimmen Sie dafür, dass der Fehler behoben wird.
quelle
<manifest>
Vom<application>
Knoten auf den Knoten ignorieren und es hat funktioniert.Endgültige Arbeitslösung für mich (Hervorgehoben die Stufen im Beispielcode):
xmlns:tools
Zeile in das Manifest-Tag eintools:replace
das Anwendungs-Tag hinzuBeispiel:
quelle
Das fehlende Stück für mich war das:
beispielsweise:
quelle
Sie können diese in Ihrem Manifest-Anwendungs-Tag ersetzen:
und wird für Sie arbeiten.
quelle
tools:replace="android:label"
zur Anwendung hinzuzufügen , aber es funktioniert nichtBEHOBEN DEN einfach diese Tools hinzu: replace = "android: icon, android: theme"
in Ihrem Anwendungs- Tag in Ihrem Manifest funktioniert es einwandfrei,
quelle
Sie können diese in Ihrem Manifest-
application
Tag ersetzen :und wird für Sie arbeiten.
Erläuterung
Die Verwendung einer solchen Abhängigkeit / Bibliothek in Ihrer
gradle
Datei, die diese Beschriftungen im Anwendungstag des Manifests enthält, kann dieses Problem verursachen, und das Ersetzen dieser Beschriftungen in IhrerManifest
ist die Lösung.quelle
Der folgende Hack funktioniert:
xmlns:tools="http://schemas.android.com/tools"
Zeile in das Manifest-Tag eintools:replace="android:icon,android:theme,android:allowBackup,label"
das Anwendungs-Tag hinzuquelle
Mein Problem ist ein Multi-Modul-Projekt mit Basismodul, App-Modul und Feature-Modul. Jedes Modul hat ein eigenes AndroidManifest, und ich habe eine Build-Variante für Debug und Main implementiert. Wir müssen also sicherstellen, dass "android: name" gerade in Manifest of Debug und Main deklariert wurde, und es in keinem der Manifest in Child-Module festlegen. Bsp.: Manifest in main:
Manifest im Debug:
Setzen Sie "android: name" nicht in anderen Manifest-Dateien wie folgt:
Definieren Sie einfach im Feature-Modul wie folgt und es wird gut zusammengeführt
quelle
Ich habe einen ähnlichen Fehler bei einem Projekt erhalten, das ich importiert habe:
Behoben nach dem Ändern der folgenden Zeile innerhalb des Anwendungs-Tags:
zu
quelle
Ich habe auch dieses Problem durchgearbeitet und Folgendes geändert:
zu
quelle
quelle