Manifest-Fusion fehlgeschlagen: using-sdk: minSdkVersion 14

233

Seit dem Herunterladen des neuesten SDK und der Installation von Android Studio kann mein Projekt nicht erstellt werden. Ich erhalte die folgende Nachricht:

Error:Gradle: Execution failed for task ':SampleProject:processProdDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1
loeschg
quelle
Ich habe den gleichen Fehler. Fehler: Die Ausführung der Aufgabe ': app: processDebugManifest' ist fehlgeschlagen. > Manifest Merger fehlgeschlagen: used-sdk: minSdkVersion 19 kann nicht kleiner sein als Version 19, die in der Bibliothek com.android.support:support-v4:21.0.0-rc1
bobby.dhillon am
Ich erhalte die gleiche Ausnahme. MinSdkVersion 15 kann nicht kleiner als Version 15 sein. Die SDK-Build-Tools wurden aktualisiert. Ich denke, es ist ein Fehler in Android Studio und den neuen Build-Tools
Boardy
1
Es scheint ein Fehler zu sein: code.google.com/p/android/issues/detail?id=72430 Die Korrektur für den Moment besteht darin, eine Zeile in der maven-metadata.xml
Emanuel Canha

Antworten:

312

Hinweis: Dies wurde aktualisiert, um die Veröffentlichung von API 21, Lollipop, widerzuspiegeln. Stellen Sie sicher, dass Sie das neueste SDK herunterladen.

In einem meiner Module hatte ich Folgendes in build.gradle:

dependencies {
    compile 'com.android.support:support-v4:+'
}

Ändern Sie dies in

dependencies {
    // do not use dynamic updating.
    compile 'com.android.support:support-v4:21.0.0' 
}

Das Problem wurde behoben.

com.android.support:support-v4:+Stellen Sie sicher, dass Sie nirgendwo in Ihrem Projekt eine allgemeine Einbeziehung oder andere Unterstützungsbibliotheken (v7, v13, appcompat usw.) vornehmen.

Ich würde annehmen, dass das Problem darin besteht v4:+, die neueste L-Version des Release Candidate (21.0.0-rc1) aufzunehmen , für die offensichtlich das L SDK erforderlich ist.

Bearbeiten:

Wenn Sie die neuen Ansichten (CardView, RecyclerView und Palette) verwenden müssen, sollte Folgendes funktionieren:

compile "com.android.support:cardview-v7:21.0.0"
compile "com.android.support:recyclerview-v7:21.0.0"
compile "com.android.support:palette-v7:21.0.0"

(Dank an EddieRingle unter / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Noch eine Bearbeitung

Lesen Sie unten die Antwort von @ murtuza zu appcompat-v7 und stimmen Sie ab, wenn es hilft!

loeschg
quelle
3
Was ist mit einer aus Maven zusammengestellten Bibliothek? Wie kann man die "alte" Abhängigkeit ausschließen?
Arnaud
4
@Arnaud compile ("blah: blah: bla") {Gruppe ausschließen: 'com.android.support', Modul: 'support-v4'}
AndroidGecko
3
Beachten Sie, dass Sie zur Verwendung von CardView, RecyclerView und Palette auch Ihr Manifest ändern müssen, um die Zusammenhänge von Zusammenführungskonflikten zu vermeiden. Siehe diesen Link für Details: reddit.com/r/androiddev/comments/297xli/…
Michel
3
Schlagen Sie niemals Personen vor, + in der Abhängigkeitsversion zu verwenden. Geben Sie IMMER die genaue Version der Bibliothek an, die Sie verwenden möchten (oder die zum Zeitpunkt des Schreibens des Codes verfügbar ist). Sogar 20. + ist schlecht. Und wenn eine Bibliothek, von der Sie abhängig sind, diese schlechte Praxis befolgt, sollten Sie ihre Abhängigkeit ausschließen und Ihre eigene Version dieser Abhängigkeit bereitstellen. Dies macht Ihren Build jederzeit reproduzierbar. Bitte verbessern Sie Ihre Antwort, indem Sie Ihren Vorschlag entfernen, + in der Abhängigkeitsversion zu verwenden.
Daniele Segato
1
Was @DanieleSegato gesagt hat. Empfehlen Sie niemals eine dynamische Versionierung. Es sind schlechte Praktiken.
Xavier Ducrohet
69

Wenn Sie die appcompat-v7-Bibliothek importieren, stellen Sie außerdem sicher, dass Sie am Ende eine Versionsnummer wie folgt kennzeichnen:

compile 'com.android.support:support-v4:19.+'
compile 'com.android.support:appcompat-v7:19.+'

Nachdem ich nur die support-v4-Version geändert hatte, erhielt ich immer noch den Fehler:

Manifest-Zusammenführung fehlgeschlagen: used-sdk: minSdkVersion 15 darf nicht kleiner sein als die in der Bibliothek com.android.support:support-v4:21.0.0-rc1 deklarierte Version L.

Es war ein bisschen verwirrend, weil es so aussieht, als ob v4 immer noch das Problem ist, aber tatsächlich wurde das Problem durch die Einschränkung der Appcompat v7-Version behoben.

murtuza
quelle
Guter Fang! Keiner meiner v7 hatte auch die Version auf ihnen.
RoundSparrow Hilltx
und auch das gleiche für die Unterstützung v13)
Defuera
1
Ich hatte auch eine Nichtübereinstimmung von appcompat_v7, buildToolsVersion '20.0.0'in meiner android{}und compile 'com.android.support:appcompat-v7:20.0+'in meiner dependencies {}war nicht dasselbe, also habe ich sie gleich gemacht (wie hier gezeigt).
Azurespot
1
Es ist eine schlechte Praxis, + bezeichner für zukünftige Versionen zu verwenden. Geben Sie die genaue Version an. Ich schlage vor, die Datei 'com.android.support:appcompat-v7:19.+' auf diese 'com.android.support:appcompat-v7:19.0.0' oder die neueste zu aktualisieren . Wenn weiterhin Probleme auftreten , aktualisieren Sie die Support-Bibliothek über den SDK-Manager.
Sud007
55

Lösung 1:

Ändern Uses-sdk zu <uses-sdk tools:node="replace" />und fügen Sie xmlns:tools="http://schemas.android.com/tools" inAndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.demo.android"
    android:versionCode="16"
    android:versionName="3.3.1">
    .
    .
    <uses-sdk tools:node="replace" />
    .
    .
</manifest>

Stellen Sie sicher, dass Sie Gradle 0.11 und höher verwenden, um die Manifest-Fusion zu verwenden.

Lösung 2:

  • Wechseln Sie compile 'com.android.support:support-v4:+'zu compile 'com.android.support:support-v4:20.+'in build.gradle. Dadurch wird verhindert, dass Gradle v4:21.0.0die Version L verwendet.

  • Wenn jedoch eine Ihrer externen Abhängigkeiten dieselbe verwendet. Sie müssen wahrscheinlich warten, bis sie dasselbe aktualisieren.

Lösung 3:

  • Entfernen / Kommentieren <version>21.0.0-rc1</version>in Ihrer Datei<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml

  • Wiederholen Sie dies für support-v7

Gaurav Arora
quelle
In meinem Fall musste ich auch das Appcompat-v7-Äquivalent entfernen.
Eipipuz
2
Ja, bieten Sie keine Lösung 2 als Option an. Ein korrektes Abhängigkeitsmanagement (mit der richtigen Version) oder eine Auflösungsstrategie ist die richtige Lösung. Das Bearbeiten des Maven-Repos verzögert das Problem nur, bis ein neues Repo veröffentlicht wird.
Xavier Ducrohet
Lösung 1 + 3 hat mein Leben gerettet :)
Climbatize
2
Erste Option funktioniert! Ich würde Ihnen vorschlagen, einige Details darüber hinzuzufügen, warum dies zu tun ist.
Tejasvi Hegde
24
<uses-sdk tools:node="replace" />

Funktioniert nicht mehr.

wechseln uses-sdkzu

<uses-sdk tools:overrideLibrary="com.packagename.of.libary.with.conflict" />

und fügen Sie
xmlns:tools="http://schemas.android.com/tools" die Datei AndroidManifest.xml hinzu

userM1433372
quelle
Vielen Dank an userM1433372, positiv bewertet für die Rettung meines Tages :)
Ravi Vaniya
11

Das Problem tritt immer noch bei transitiven Abhängigkeiten auf. Gradle bietet eine Möglichkeit, die Verwendung einer bestimmten Version einer Abhängigkeit zu erzwingen.

Zum Beispiel können Sie etwas hinzufügen wie:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:20.+'
        force 'com.android.support:appcompat-v7:20.+'
    }
}

zu Ihrem build.gradle.

Weitere Informationen zu Gradle-Auflösungsstrategien finden Sie in diesem Handbuch unter http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

Ich fand diese während der entsprechenden Ausgabe zu lesen , die ich verbinden werde hier

koesclem
quelle
Vielen Dank! Einfacher als Ausschluss in jede Abhängigkeit zu setzen :)
Sloy
8

In der Datei build.gradle wurde standardmäßig 'com.android.support:support-v4:+' kompiliert. Wenn Sie also das Gradle-Projekt erstellen, wird com.android.support:support-v4:21.0.0-rc1 berücksichtigt wegen der jüngsten L-Entwickler-Vorschau.

Nehmen Sie in der folgenden Zeile Änderungen vor, um das Problem zu beheben. Veränderung

compile 'com.android.support:support-v4:+' 

zu

compile 'com.android.support:support-v4:20.+'

Wenn Sie die Support-Bibliothek für v7-appcompat verwenden, nehmen Sie die Änderung von vor

compile 'com.android.support:appcompat-v7:+'

zu

compile 'com.android.support:appcompat-v7:20.+'.
Bhargav Jhaveri
quelle
8

Wenn Sie zu den oben genannten richtigen Antworten hinzufügen, kann das Problem aufgrund der Verschachtelung der Bibliothek weiterhin auftreten. Versuchen Sie in diesem Fall das folgende Beispiel:

compile 'com.android.support:support-v4:20.+'
compile ('com.github.chrisbanes.actionbarpulltorefresh:extra-abs:+') { // example
    exclude group: 'com.android.support', module:'support-v4'
    exclude group: 'com.android.support', module:'appcompat-v7'
}
Leonardo Cardoso
quelle
7

Für Benutzer, die Hybrid-Apps mit Cordova CLI erstellen, hilft dieser Befehl:

cordova build android -- --minSdkVersion=15

Ja, es werden doppelte Doppelstriche verwendet, wie Sie es gesehen haben.

ProllyGeek
quelle
Behebt dies das eigentliche Problem? Nein, es funktioniert nur so, aber cordova run androiddamit scheitert es.
Ionut Necula
@lonut weißt du was das eigentliche Problem ist?
ProllyGeek
In meinem Fall ist das Problem ein Plugin, das ich benutze cordova-plugin-facebook4. Wenn Sie es nicht kristallisieren, funktioniert es einwandfrei cordova run android. Leider habe ich nirgendwo eine Lösung dafür gefunden. Ich habe manuell versucht, das minSdkVersionselbst in das hinzuzufügen AndroidManifest, wird aber überschrieben. Ich versuche immer noch, es herauszufinden.
Ionut Necula
@lonut Ich verwende dasselbe Plugin in einer App, an der ich arbeite. Lassen Sie mich wissen, ob ich helfen kann. Sie müssen jedoch die Datei build.gradle überprüfen. Wenn Sie zusätzliche Informationen angeben, kann ich Ihnen möglicherweise helfen.
ProllyGeek
Ich habe es endlich gelöst, indem ich die minSdkVersion in 15in geändert habe config.xml. Die Zeile : <preference name="android-minSdkVersion" value="14" />. Auf diese Weise wird die AndroidManifestDatei auch mit der neuen Version aktualisiert.
Ionut Necula
6

Ich hatte auch das gleiche Problem und die folgenden Änderungen haben mir geholfen:

von:

dependencies {
    compile 'com.android.support:support-v4:+'

zu:

dependencies {
 compile 'com.android.support:support-v4:20.0.0'
}
min2bro
quelle
Es ist kein Code. Sie müssen diese Änderung in Ihrer build.gradle-Datei vornehmen.
Min2bro
6

Für Leute, die in der Android Studio Beta mit diesem Problem konfrontiert sind , hat die akzeptierte Antwort mein Problem nicht gelöst. Beim Importieren eines von GitHub heruntergeladenen Projekts hatte ich Folgendes in meiner build.gradle-App-Datei, dass ein Fehler in Frage kam:

 dependencies {
    compile 'com.android.support:support-v4:+'
}

Aber in meinem externen Bibliotheksordner habe ich diesen Ordner:

support-v4-21.0.0-rc1 //note the 21

Ich habe das obige Problem gelöst, indem ich die Abhängigkeit geändert habe in:

dependencies {
compile 'com.android.support:support-v4:20.+' //20 used less than available strange but works
}

Hinweis: Möglicherweise müssen Sie für einige Bibliotheken und Projekte auch eine niedrigere API-Version als die derzeit in Android Studio verfügbare herunterladen, damit dies ordnungsgemäß funktioniert.

Illegales Argument
quelle
Dies scheint das grundlegende Problem zu sein: "Wo immer Sie 'com.android.support:support' sehen" ... "Stellen Sie sicher, dass Sie den aktuellen Wert haben" Das ist ungefähr so ​​groß!
Fattie
5

Ich habe das Problem gelöst, indem ich die folgende Zeile in build.gradle bearbeitet habe und es funktioniert! :-)

Version 20 hinzufügen . + '

Von

 dependencies {
        compile 'com.android.support:appcompat-v7:+'
    }

Zu

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
}
Cristiana Chavez
quelle
1
Ich kann es nicht glauben. Keine der anderen Antworten oben hat für mich funktioniert, außer dieser. Danke dir!!! Beachten Sie, dass ich sowohl meine v4als auch die v7Support-Dateien in die ändern musste :20.+.
Azurespot
5
compile('com.android.support:support-v4:19.1.0'){
    force = true
}

Hat mir geholfen, von hier genommen

Lina Shyshova
quelle
4

Sie müssen alle Unterstützungs- und Appcompat-Bibliotheken mit Version 19 konfigurieren. +

Wenn die Empfehlung, die Support-Bibliothek mit der Version 19. + zu verlassen, nicht funktioniert, können Sie den nächsten Tipp in Ihrer AndroidManifest-Datei ausprobieren.

Fügen Sie zuerst diesen Code hinzu:

xmlns:tools="http://schemas.android.com/tools"

Und dann auf Anwendungsebene (nicht innerhalb der Anwendung!)

<uses-sdk tools:node="replace" />
Aracem
quelle
4

Ich mache alle Lösungen hier ohne Ergebnis, also schaue ich an einen anderen Ort und habe einen Weg gefunden, die IDE auszutricksen. Sie müssen also eine Linie in das Mainfest einfügen, damit der Gradle eine andere verwendet, diejenige, die Sie setzen auf build.gradle die Linie ist:

<uses-sdk tools:node="replace" />

nur es und es funktioniert.

Ich hoffe, es hilft.

David Moreno Cantero
quelle
3
Denken xmlns:tools="http://schemas.android.com/tools"<manifest>
Sie
3

Sie müssen aus build.gradle entfernen compile 'com.android.support:support-v13:+'

Igor Kostenko
quelle
3

Hier ist der neue Fehler, der übrigens für diesen https://code.google.com/p/android/issues/detail?id=72430 eingereicht wurde

Angenommen, Sie verwenden das Support-Repository, besteht die Problemumgehung darin, die Zeile zu kommentieren oder zu entfernen

21.0.0-rc1 in der lokalen Maven-Repo-Listendatei unter /extras/android/m2repository/com/android/support-v4/maven-metadata.xml

LemonGentry
quelle
1

Für mich wird das Problem durch das Ändern der gelöst

minSdkVersion 14

Verwenden Sie in der Datei build.gladdle die in der Fehlermeldung angegebene Datei

aber das Problem war

Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 15 declared in library

Also habe ich in der Datei build.gladdle von 14 auf 15 gewechselt und es funktioniert

Versuche es.

Ruberandinda Geduld
quelle
1

Zielen Sie einfach auf die erforderliche, minSdkVersiondh ändern Sie die erforderliche. In meinem Fall minSdkVersionwar 14.

Ändern, um minSdkVersion 16das Problem zu lösen

compileSdkVersion 29
    defaultConfig {
        applicationId "e.futaaapp"
        minSdkVersion 14
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

compileSdkVersion 29
    defaultConfig {
        applicationId "e.futaaapp"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
Kim
quelle
0

Vergessen Sie nicht, dass Sie build.gradle im Unterordner 'app' Ihres Projekts bearbeiten sollten, nicht im Ordner des Projekts. Ich habe einen Arbeitstag verloren, als ich versucht habe, ein Problem mit der Version "L" zu lösen.

CoolMind
quelle
0

Versuchen Sie, die Build- Ordner in Ihrem Projekt zu löschen, und synchronisieren Sie Ihr Gradle-Projekt erneut, um es neu zu erstellen. Auch, wie andere in diesem Beitrag gesagt haben - anstatt so etwas zu tun:

compile 'com.android.support:support-v4:19.+'

mach das:

compile 'com.android.support:support-v4:19.1.0'
IgorGanapolsky
quelle
0

Danke @Murtuza. Ihre Antwort hat mir geholfen, mein Problem zu lösen, aber in meinem Fall

compile 'com.android.support:support-v13:19.+ auch zusammen mit

compile 'com.android.support:support-v4:19.+' compile 'com.android.support:appcompat-v7:19.+'

aus der compile 'com.android.support:support-v4:+' compile 'com.android.support:support-v7:+' compile 'com.android.support:support-v13:+' Hoffnung könnte dies jemandem helfen

Deepthi
quelle
0

Ich habe einige Projekte, bei denen ich lieber L.MR1 (SDKv22) als Ziel habe, und einige Projekte, bei denen ich KK (SDKv19) bevorzuge. Ihr Ergebnis mag anders sein, aber das hat bei mir funktioniert.

// Targeting L.MR1 (Android 5.1), SDK 22
android {
    compileSdkVersion 22
    buildToolsVersion "22"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 22
    }
}

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

    // google support libraries (22)
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:cardview-v7:21.0.3'
    compile 'com.android.support:recyclerview-v7:21.0.3'
}



// Targeting KK (Android 4.4.x), SDK 19
android {
    compileSdkVersion 19
    buildToolsVersion "19.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
}

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

    // google libraries (19)
    compile 'com.android.support:support-v4:19.1+'
    compile 'com.android.support:appcompat-v7:19.1+'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
}
AG1
quelle
0

In Android Studio 1.1.0: Datei - Projektstruktur - Registerkarten - Wählen Sie eine minimale SDK-Version aus, die höher als in Manifest ist

ea_
quelle
0

Ich habe die zweite Lösung:

  1. entpacken https://dl.dropboxusercontent.com/u/16403954/android-21.zipnachsdk\platforms\
  2. ändere build.gradle wie

    compileSdkVersion 21
    buildToolsVersion "20.0.0"
    
    defaultConfig {
        applicationId "package.name"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
  3. hinzufügen

    <uses-sdk tools:node="replace" /> 

    im Manifest mit xmlns:tools="schemas.android.com/tools";

  4. Gehe zu sdk\extras\android\m2repository\com\android\support\support-v4\21.0.0-rc1\

entpacken Sie support-v4-21.0.0-rc1.aar und bearbeiten Sie AndroidManifest.xml wie

von

<uses-sdk
        android:minSdkVersion="L"
        android:targetSdkVersion="L" />

zu

<uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="21" />

PS Sie können dies mit allen benötigten Unterstützungsbibliotheken tun.

Vova K.
quelle
Ich habe "L" geändert und Android Studio neu gestartet, aber das gleiche Problem beim Erstellen des Projekts (Strg + F9)
Ankur Loriya
0

Das einzige, was für mich funktioniert hat, ist Folgendes:

In project.properties habe ich Folgendes geändert:

cordova.system.library.1 = com.android.support: support-v4: + zu cordova.system.library.1 = com.android.support: support-v4: 20. +

abelabbesnabi
quelle
0

Sie ändern lediglich die Mindest-API-Ebene von Build Settings -> Player Settings -> Other Settings -> Minimum SDK Leveleiner höheren Version.

Codemaker
quelle
0

Am besten lassen Sie das Problem von Android Studio beheben.

Ich habe das Folgende getan und es hat gut funktioniert.

  1. Öffnen Sie Ihr Projekt in Android Studio. Fehler werden angezeigt. Wenn ein Link zur Fehlerbehebung angegeben ist, klicken Sie darauf.

  2. Öffnen Sie Ihr Projekt erneut in Android Studio. Es werden Fehler angezeigt. Diesmal wird ein Link angezeigt. Wenn dieser in Schritt 1 nicht angegeben ist, klicken Sie auf den angegebenen Link, um ihn zu beheben.

Beachten Sie, dass beide Vorgänge einige Minuten dauerten, aber alle Probleme behoben haben.

Manohar Reddy Poreddy
quelle
0

Lösung: Manifest-Fusion fehlgeschlagen Attribut application @ ppComponentFactory ...

Wenn Sie die neuesten und besten Firebase-Bibliotheken oder andere Bibliotheken verwenden, die tatsächlich AndroidX anstelle von android.support verwenden, liegt das Problem möglicherweise vor, da die Manifest-Fusion fehlgeschlagen ist. In diesem Fall muss Ihr Projekt auf AndroidX migriert werden. Folgen Sie also dem Link: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

Oder schauen Sie sich dieses Video an. https://youtu.be/RgveQ4AY1L8 Vielen Dank.

Subhojit Halder
quelle
Ein Link zu einer Lösung ist willkommen, aber Sie sollten sicherstellen, dass Ihre Antwort auch ohne sie nützlich ist. Es ist besser, dem Link einen Kontext hinzuzufügen und den relevantesten Teil des Tutorials zu beschreiben, auf den Sie verlinken, falls die Zielseite nicht verfügbar ist.
Joey
Schön von dir zu hören #Joey. Lassen Sie mich eine zusätzliche Beschreibung hinzufügen. Vielen Dank.
Subhojit Halder