webentwicklung-frage-antwort-db.com.de

Android Manifest Merger schlägt nach dem Hinzufügen von Abhängigkeiten com.google.Android.material fehl

Wir möchten die aktuellsten Materialdesign-Elemente von Google verwenden. Deshalb habe ich com.google.Android.material:material:1.0.0-beta01 in unsere Projekte-Datei aufgenommen. Aber seitdem bekomme ich folgende Fehlermeldung. 

Manifest Fusion fehlgeschlagen: Attribut application @ appComponentFactory value = (androidx.core.app.CoreComponentFactory) von [androidx.core: core: 1.0.0-beta01] AndroidManifest.xml: 22: 18-86 ist auch anwesend bei [com.Android.support:support-compat:28.0.0-beta01] AndroidManifest.xml: 22: 18-91 value = (Android.support.v4.app.CoreComponentFactory) . Vorschlag: Fügen Sie 'tools: replace = "Android: appComponentFactory"' zu Element bei AndroidManifest.xml hinzu: 5: 5-40: 19, um es zu überschreiben.

Ohne die Materialbibliothek funktioniert alles gut. 

Was ich schon probiert habe

  1. Ich habe die Reihenfolge der Abhängigkeiten geändert (was offensichtlich nicht funktioniert hat) 
  2. Ich habe auch versucht, tools:replace="Android:appComponentFactory" zu unserer Manifest-Datei hinzuzufügen, wie in der Fehlermeldung vorgeschlagen. Dies hat mich jedoch mit einer neuen Fehlermeldung verlassen:

Java.lang.RuntimeException: Manifest-Fusion mit mehreren Fehlern fehlgeschlagen, siehe Protokolle at com.Android.builder.core.AndroidBuilder.mergeManifestsForApplication (AndroidBuilder.Java:524) at com.Android.build.gradle.tasks.ProcessManifest.doFullTaskAction (ProcessManifest.Java:75) at com.Android.build.gradle.internal.tasks.IncrementalTask.taskAction (IncrementalTask.Java:106)

Ich habe die Protokolldatei überprüft, aber die einzige in idea.log angezeigte Warnung ist

2018-08-08 11: 08: 21,500 [Gewinde 267] WARN - .tools.idea.model.ManifestInfo - getMergedManifest ist fehlgeschlagen. Manifest Fusion mit mehreren Fehlern fehlgeschlagen, siehe Protokolle 2018-08-08 11: 08: 21.642 [Thread 267] WARN - .tools.idea.model.ManifestInfo - getMergedManifest fehlgeschlagen Manifestfusion mit mehreren Fehlern fehlgeschlagen, siehe Protokolle 2018-08-08 11: 08: 21,917 [J pool 0/7] 

Mehr Informationen

API-Version

Android {
compileSdkVersion 28
buildToolsVersion '28.0.0'

defaultConfig {
    minSdkVersion 19
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
}

(Dieselbe API wird in Datei> Projektstruktur in Android Studio ausgewählt.)

Abhängigkeiten:

dependencies {
api fileTree(include: ['*.jar'], dir: 'libs')

/** Android LIBRARIES  **/
implementation 'com.Android.support:multidex:1.0.2'
implementation 'com.Android.support:appcompat-v7:28.0.0-beta01'
api 'com.Android.support:support-v13:28.0.0-beta01'
api 'com.google.Android.material:material:1.0.0-beta01'
api 'com.Android.support:design:28.0.0-beta01'
api 'com.Android.support:preference-v7:28.0.0-beta01'
api 'com.Android.support:cardview-v7:28.0.0-beta01'
api 'com.Android.support:customtabs:28.0.0-beta01'
api 'com.Android.support:support-v4:28.0.0-beta01'

/** GOOGLE PLAY SERVICE  **/
api 'com.google.Android.gms:play-services-auth:15.0.1'

api 'com.google.Android.gms:play-services-drive:15.0.1'
api 'com.google.Android.gms:play-services-fitness:15.0.1'
api 'com.google.Android.gms:play-services-maps:15.0.1'
api 'com.google.Android.gms:play-services-wearable:15.0.1'
api 'com.google.Android.gms:play-services-vision:15.0.2'

api 'com.google.firebase:firebase-core:16.0.1'
api 'com.google.firebase:firebase-perf:16.0.0'
api 'com.crashlytics.sdk.Android:crashlytics:2.9.4'

//sunrise and sundown calculation for map day and night mode
api 'com.luckycatlabs:SunriseSunsetCalculator:1.2'

/** GOOGLE MAPS  **/
implementation 'com.google.maps.Android:android-maps-utils:0.5'
implementation 'com.google.code.gson:gson:2.8.0'

/** EXTERNAL LIBRARIES  **/

implementation 'org.osmdroid:osmdroid-Android:5.6.5'
implementation 'org.osmdroid:osmdroid-mapsforge:5.6.5'
implementation 'org.mapsforge:mapsforge-map-Android:0.6.1'
implementation 'org.mapsforge:mapsforge-map:0.6.1'
implementation 'com.caverock:androidsvg:1.2.2-beta-1'

//dropbox api
implementation 'com.dropbox.core:dropbox-core-sdk:3.0.6'    

androidTestImplementation 'junit:junit:4.12'
implementation files('libs/samsung-health-data-v1.3.0.jar')}

Manifest

<manifest
package="com.user.libraries.bluetooth"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:Android="http://schemas.Android.com/apk/res/Android">

<uses-permission Android:name="Android.permission.NFC" />
<uses-permission Android:name="Android.permission.BLUETOOTH" />
<uses-permission Android:name="Android.permission.BLUETOOTH_ADMIN" />
<uses-permission Android:name="Android.permission.WAKE_LOCK" />
<uses-permission Android:name="Android.permission.ACCESS_NETWORK_STATE" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.BODY_SENSORS" />
<uses-permission Android:name="Android.permission.VIBRATE"/>    

<application
    tools:replace="Android:appComponentFactory"
    Android:allowBackup="true"
    Android:supportsRtl="true">
    <service Android:name="com.user.libraries.location.LocationService" />
    <service Android:name="com.user.libraries.location.BleLocationTrackerService" />
    <service Android:name="com.user.libraries.sensors.SensorService"/>

    <service Android:name="com.user.libraries.sharing.DataExchangerService"/>

    <receiver
        Android:name="com.user.libraries.bluetooth.BluetoothStateReceiver"
        Android:enabled="true">
        <intent-filter>
            <action Android:name="Android.bluetooth.adapter.action.STATE_CHANGED"/>
        </intent-filter>
    </receiver>

    <provider
        Android:name="Android.support.v4.content.FileProvider"
        Android:authorities="${applicationId}.provider"
        Android:exported="false"
        Android:grantUriPermissions="true">
        <meta-data
            Android:name="Android.support.FILE_PROVIDER_PATHS"
            Android:resource="@xml/provider_paths"/>
    </provider>

</application>

Irgendeine Idee, wie ich dieses Problem lösen kann? 

7
little_planet

Hauptproblem hier ist, dass Sie hinzufügen

com.google.Android.material:material:1.0.0-beta01

das zum neu veröffentlichten androidx-Paket gehört und heutzutage nicht mit der Android-Support-Bibliothek kompatibel ist, die Sie in Ihren Abhängigkeiten haben.

Sie haben 2 Möglichkeiten:

  1. Ersetzen Sie com.google.Android.material: Material: 1.0.0-beta01 durch com.Android.support:design:28.0.0-beta01 (alle Support-Bibliotheken anzeigen https://developer.Android.com/topic/libraries/support-library/packages ) (das ich empfehle)
  2. Verwenden Sie die Android Studio-Option Refactor für AndroidX (siehe https://material.io/develop/Android/docs/getting-started/ ) (empfehle ich nicht)

Hier ist ein Beispiel für einen Arbeitscode:

 <Android.support.design.widget.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_weight="1"
        app:boxStrokeColor="@color/colorAccent"
        app:boxStrokeWidth="5dp">

        <Android.support.design.widget.TextInputEditText
            Android:id="@+id/messageEditText"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />

 </Android.support.design.widget.TextInputLayout>
2
redlabrat

Ich habe auch dieses Problem. Wenn Sie diese Bibliothek in Abhängigkeiten verwenden

implementation 'com.google.Android.material:material:1.0.0'

Gib das :

Manifestfusion ist fehlgeschlagen: Attribut [email protected] value = (androidx.core.app.CoreComponentFactory) aus [androidx.core: core: 1.0.0] AndroidManifest.xml: 22: 18-86 ist auch anwesend bei [com.Android.support:support-compat:28.0.0 __ AndroidManifest.xml: 22: 18-91 value = (Android.support.v4.app.CoreComponentFactory). Vorschlag: hinzufügen 'tools: replace = "Android: appComponentFactory"' zum Element bei AndroidManifest.xml: 5: 5-40: 19 überschreiben.

Ich habe dieses Problem, indem ich zu AndroidX wechsle 

Gehen Sie zu Refactor-> Auf AndoridX migrieren (in der Symbolleiste von Android Studio 3.2 und höher)

Und mein Problem lösen 

erholung

1
Radesh

Vergiss nicht hinzuzufügen

Android.useAndroidX=true
Android.enableJetifier=true

zu Ihren gradle.properties. Ich vergesse das immer, wenn ich auf eine neue Maschine komme, weil gradle.properties nicht in der Quellcodeverwaltung ist. Wäre toll, wenn wir in diesem Fall einen vernünftigen Fehler erhalten würden.

1
Daniel Wilson

Das Problem ist, dass AndroidX-Pakete nicht mit AppCompat-Support-Paketen kompatibel sind. Sie müssen den einen oder anderen Typ auswählen. AndroidX ist neuer und wurde entwickelt, um das Arbeiten mit Kompatibilitäten verschiedener Versionen von Android zu vereinfachen. Google hat eine Anleitung zu Migration von AppCompat auf AndroidX .

Der Upgrade-Pfad ist recht unkompliziert, aber etwas umständlich, aber ich würde empfehlen, dies zu tun, um auf dem neuesten Stand zu bleiben, anstatt ein Downgrade auf das ältere Design-Paket durchzuführen.

Upgrade auf AndroidX

Sie können festlegen, dass Sie AndroidX verwenden möchten, indem Sie Folgendes zu Ihrer gradle.properties - Datei hinzufügen:

Android.useAndroidX=true
Android.enableJetifier=true

Ich musste außerdem Folgendes zu meiner app/build.gradle - Datei hinzufügen, um die Ausnahme Default interface methods are only supported starting with Android N (--min-api 24) zu umgehen, die wahrscheinlich mit einem der neueren Pakete zusammenhängt:

compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}

Als nächstes müssen Sie alle Ihre AppCompat-Pakete in app/build.gradle Ändern, um das passende AndroidX-Paket zu verwenden. Sie finden eine Liste im Abschnitt Artefaktzuordnungen der oben genannten Dokumentation, in der die AppCompat-Zuordnungen für AndroidX für alle Pakete bereitgestellt werden.

Das folgende Paket ist zum Beispiel dasselbe, sodass Sie sicherstellen, dass Sie die AndroidX-Version anstelle der AppCompat-Version verwenden:

implementation 'com.Android.support:design' # AppCompat version
implementation 'com.google.Android.material:material:1.1.0-alpha08' # AndroidX version

Wenn Sie versuchen zu kompilieren, sollten Sie Fehler erhalten, da Sie wahrscheinlich Ihre Aktivitäten migrieren müssen, um die neueren Pakete zu verwenden. Für mich musste ich die folgenden Änderungen vornehmen, die Unterstützungsbibliotheksversion entfernen und durch die AndroidX-Version ersetzen:

# remove
-import Android.support.design.widget.FloatingActionButton
-import Android.support.design.widget.Snackbar
-import Android.support.v4.app.ActivityCompat
-import Android.support.v4.content.ContextCompat
-import Android.support.v7.app.AlertDialog
-import Android.support.v7.app.AppCompatActivity
-import Android.support.v7.widget.Toolbar
# add
+import com.google.Android.material.floatingactionbutton.FloatingActionButton
+import com.google.Android.material.snackbar.Snackbar
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.widget.Toolbar
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat

In den Kotlin- und Java -Dateien ist dies einfach (wie oben), aber der Compiler ist nicht hilfreich, wenn es um Layoutdateien geht, die zur Laufzeit Ausnahmen beim Aufblasen von Layouts auslösen. Sie müssen sie auch in Ihren Layout-XML-Dateien ändern:

-        <Android.support.design.widget.TextInputLayout
+        <com.google.Android.material.textfield.TextInputLayout

Während dieses Vorgangs werden Sie wahrscheinlich aufgefordert, Gradle zu aktualisieren, was eine gute Idee ist.

Obwohl es etwas umständlich ist, denke ich, dass der Upgrade-Pfad es wert ist, weiterhin neue Bibliotheken verwenden zu können, wenn sie herauskommen.

Es sieht so aus, als ob in neueren Versionen von Android Studio eine gewisse Automatisierung vorhanden ist, die Sie bei der Migration unterstützt. Diese finden Sie im Menü: Refactor> Auf AndroidX migrieren.

0
Tina

Vor kurzem will Google die Abhängigkeit trennen. Sie benennen die Pakete um und schlagen vor, ab sofort Androidx zu verwenden. Die neuesten Versionen von Google Gradle sind also alle unter Androidx.

Sie müssen Ihr Projekt Android app compact zu androidx migrieren. Sie müssen einige Eigenschaften in der Datei prgradle.properties verwenden:

 Android.useAndroidX=true
 Android.enableJetifier=true

und Sie müssen Ihr Projekt von AppCompact auf Androidx migrieren, dafür können Sie es einfach mit Tools tun

Gehen Sie zu Refactor-> Zu AndoridX migrieren (in der Symbolleiste von Android studio 3.2 und höher)

Danach musst du dein reguläres gradle auf androidx gradle upgraden. Du findest es auf der offiziellen google seite wie

https://developer.Android.com/jetpack/androidx/migrate

Wählen Sie aus dieser Liste einfach das Alter Androidx Gradle und Ihr Projekt wird in Ordnung sein.

0
pavel

mit Android stuido 3.4.1 Ich konnte mein Projekt auswählen, Refactor in der Hauptsymbolleiste auswählen und dann auf AndroidX migrieren ... dies dauerte einige Augenblicke und dann gab es eine Schaltfläche 'Do Build ', dies dauerte erneut einige Momente und wurde erfolgreich abgeschlossen.

0
Roddy Morrison