Wir haben mehrere Projekte, abhängig von vielen Android-lib-Modulen. Um doppelte XML-Tags in den App-Manifesten zu vermeiden, stellen wir die entsprechenden Empfänger, Dienste und Aktivitäten in ihre jeweiligen Module.
Bis heute haben wir verwendet:
Heute haben wir aktualisiert:
Bis zu diesem Update funktionierte alles einwandfrei und die Manifeste wurden zusammengeführt, wir hatten Konflikte und wir haben sie behoben. Nach dem Update, das wir gemacht haben, werden die Manifeste überhaupt nicht zusammengeführt !!
--- Update 1 ---
Wir haben die Ansicht "Zusammengeführtes Manifest" verwendet und festgestellt, dass die Manifeste in der Zusammenführung nicht enthalten sind. Das einzige, was aus dem Manifest des Moduls zusammengeführt wird, sind die Berechtigungen, also z. B. wenn ich ein neues hinzufüge Erlaubnis zu einem Modul manifestieren es würde es nur zusammenführen und nicht den Rest der Elemente!
Ich garantiere, dass es viele Dinge zu verschmelzen gibt!
--- Update 2 ---
Es scheint, dass alles außerhalb des Anwendungs-Tags in das Hauptmanifest einfließt und alles innerhalb des Anwendungs-Tags nicht.
--- Update 3 ---
Modul, das nicht zusammengeführt wird:
Gradle:
%Vor%Manifest:
%Vor%Modul, das zusammengeführt wird:
Gradle:
%Vor%Manifest:
%Vor%Irgendwelche Vorschläge?
Es könnte viele Dinge sein. Da Sie keinen Code zur Verfügung gestellt haben, werde ich annehmen, dass Sie das standardmäßige Merge-Verhalten verwenden. Weitere Informationen finden Sie unter Konfliktheuristiken zusammenführen
Sie können die Ansicht Zusammengeführtes Manifest verwenden, um eine Vorschau anzuzeigen die Ergebnisse des zusammengeführten Manifests und finden Sie Konfliktfehler.
Im Allgemeinen sollte die Zusammenführung standardmäßig funktionieren. Verwenden Sie dann die Ansicht Zusammengeführtes Manifest , um zu sehen, wie & amp; wo du beim Verschmelzen Werte verloren hast. Die Verwendung von Merge-Regel-Markern würde Ihnen bei der Verwaltung der Zusammenführung helfen, indem Sie Regelmarkierungen zuweisen.
>Wenn es überhaupt keine Zusammenführung gibt. Es ist also wahrscheinlich ein Abhängigkeitsproblem zwischen Modulen.
Beachten Sie, dass die Abhängigkeitsreihenfolge bei Modulen mit der gleichen Prioritätsstufe wie Bibliotheken eine entscheidende Rolle spielt.
--- Update 5. April 2017 ---
Hier sind einige nützliche Tipps:
tools:node=”remove"
oder tools:node="removeAll"
oder in Großbuchstaben (siehe
Diese Deaktivierung der Manifest-Zusammenführung in Android Gradle Build ) --- Update (2) 5.April.2017 ---
Nachdem Sie Code hinzugefügt hatten, konnte ich sehen, dass Sie Attribut
verwenden %Vor% Unter Anwendungselement in Ihren Modulen (und wahrscheinlich auch in der App-Manifest). Ich denke, das ist der Grund, warum Sie keine Manifeste aus importierten Modulen erhalten haben, die mit dem Manifest Ihrer App zusammengeführt wurden. Siehe tools:node="replace"
unter Knotenmarkierungen .
Ersetzen Sie das Element mit der niedrigeren Priorität vollständig. Das heißt, wenn es ein übereinstimmendes Element im Manifest mit niedrigerer Priorität, ignoriere es und verwende es dieses Element genau so, wie es in diesem Manifest erscheint.
Das bedeutet, dass beide obigen Module nie etwas mit manifest aus:
erhaltenEntfernen Sie dieses Attribut und bereinigen Sie die Module und erstellen Sie sie neu. dann das ganze Projekt neu aufbauen.
Wenn Sie offensichtliche Zusammenführungskonflikte bekommen, haben Sie zwei Möglichkeiten.
1) Finden Sie alle in Ihrem Projekt enthaltenen Manifestdateien einschließlich der Dateien in Bibliotheken, die Sie als Abhängigkeiten haben, und stellen Sie sicher, dass keine Konfigurationen mit Konflikten vorliegen.
oder 2) fügen Sie Ihren Manifesten einige Zusammenführungsauflösungsregeln hinzu, um festzulegen, wie jeder Konflikt gelöst werden soll.
Hier gibt es eine tolle Seite mit vielen Details.
Ссылка
Von Android Studio
Erstellen --- & gt; Projekt löschen
dann
Erstellen - & gt; Projekt erstellen
Dies sollte helfen,
Ich habe kürzlich dasselbe Problem in meinem Produktionscode. Wenn ein Bibliotheks-in-App-Modul auch in anderen Gradle-Abhängigkeiten vorhanden ist, werden die doppelten Einträge verursacht. Wir müssen solche Module oder Bibliotheken von Konflikten ausschließen.
Dafür müssen wir die Anzahl der Bibliotheken kennen, die von einer bestimmten Gadle-Abhängigkeit verwendet werden.
Betrachten Sie einen Fall, in dem ich "bolts-android-1.2.0.jar" in meiner App verwende. In derselben Größe verwende ich facebookSDK wie folgt.
%Vor%Also muss ich "bolts-android" wie folgt ausschließen
%Vor%Wie kann man also wissen, dass facebookSDK "bolts-android" verwendet?
Hier können Sie das Android Method Count
verwenden Scheint so, als ob das Problem darin besteht, tools:node="replace"
im Element application
zu verwenden. Aus der Dokumentation :
... Wenn im Manifest mit der niedrigeren Priorität ein übereinstimmendes Element vorhanden ist, ignorieren Sie es und verwenden Sie dieses Element genau so, wie es in diesem Manifest angezeigt wird.
Was Sie eigentlich verwenden möchten, ist tools:node="merge"
, was das Standardverhalten ist.
Fügen Sie alle Attribute in diesem Tag und alle verschachtelten Elemente zusammen, wenn keine Konflikte mit der Heuristik für den Merge-Konflikt auftreten. Dies ist das Standardverhalten für Elemente.
Tags und Links android android-manifest android-studio android-gradle