Échec de la fusion du manifeste: uses-sdk: minSdkVersion 14

233

Depuis le téléchargement du dernier SDK et l'installation d'Android Studio, mon projet n'a pas pu être construit. Je reçois le message suivant:

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
la source
Je rencontre la même erreur Erreur: Échec de l'exécution pour la tâche ': app: processDebugManifest'. > La fusion du manifeste a échoué: uses-sdk: minSdkVersion 19 ne peut pas être plus petit que la version 19 déclarée dans la bibliothèque com.android.support:support-v4:21.0.0-rc1
bobby.dhillon
Je reçois la même exception minSdkVersion 15 ne peut pas être plus petit que la version 15. Les outils de construction du SDK ont été mis à jour, donc je suppose que c'est un bogue dans Android Studio et les nouveaux outils de construction
Boardy
1
Il semble s'agir d'un bogue: code.google.com/p/android/issues/detail?id=72430 La correction pour l'instant consiste à commenter une ligne dans le maven-metadata.xml
Emanuel Canha
échec
Marian Paździoch

Réponses:

312

Remarque: cela a été mis à jour pour refléter la version d'API 21, Lollipop. Assurez-vous de télécharger le dernier SDK.

Dans l'un de mes modules, j'avais les éléments suivants dans build.gradle:

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

Changer cela en

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

résolu le problème.

Assurez-vous que vous ne faites pas d'inclusion générale com.android.support:support-v4:+ou d'autres bibliothèques de support (v7, v13, appcompat, etc.), où que ce soit dans votre projet.

Je suppose que le problème est lié à la dernière version L de v4:+la candidate candidate (21.0.0-rc1), qui nécessite évidemment le SDK L.

Éditer:

Si vous devez utiliser les nouvelles vues (CardView, RecyclerView et Palette), les éléments suivants devraient fonctionner:

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"

(Crédit à EddieRingle sur / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Un autre montage

Assurez-vous de voir la réponse de @ murtuza ci-dessous concernant appcompat-v7 et vote positif si cela aide!

loeschg
la source
3
Qu'en est-il d'une bibliothèque compilée à partir de Maven? Comment exclure la "vieille" dépendance?
Arnaud
4
@Arnaud compile ("blah: blah: bla") {groupe exclu: 'com.android.support', module: 'support-v4'}
AndroidGecko
3
Notez que pour utiliser CardView, RecyclerView et Palette, vous devrez également modifier votre manifeste pour éviter les conflits de fusion. Voir ce lien pour plus de détails: reddit.com/r/androiddev/comments/297xli/…
Michel
3
Ne jamais, jamais, suggérer aux gens d'utiliser + dans la version de dépendance. Spécifiez TOUJOURS la version exacte de la bibliothèque que vous souhaitez utiliser (ou est disponible au moment où vous écrivez le code). Même 20. + est mauvais. Et si une bibliothèque dont vous dépendez suit cette mauvaise pratique, envisagez d'exclure sa dépendance et de fournir votre propre version de cette dépendance. Cela rend votre build reproductible à tout moment. Veuillez améliorer votre réponse en supprimant votre suggestion d'utiliser + dans la version de dépendance.
Daniele Segato
1
Ce que @DanieleSegato a dit. Je ne recommande jamais le versioning dynamique. Ce sont de mauvaises pratiques.
Xavier Ducrohet
69

De plus, dans le cas où vous importez la bibliothèque appcompat-v7, assurez-vous de baliser un numéro de version à la fin comme ceci:

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

Après avoir seulement changé la version support-v4, j'ai toujours reçu l'erreur:

La fusion du manifeste a échoué: uses-sdk: minSdkVersion 15 ne peut pas être inférieur à la version L déclarée dans la bibliothèque com.android.support:support-v4:21.0.0-rc1

C'était un peu déroutant car il semble que la v4 soit toujours le problème, mais, en fait, restreindre la version v7 d'Appcompat a résolu le problème.

murtuza
la source
Bonne prise! aucun de mes v7 n'avait la version sur eux non plus.
RoundSparrow hilltx
et aussi la même chose pour le support v13)
Defuera
1
J'avais aussi un décalage d'appcompat_v7, buildToolsVersion '20.0.0'dans mon android{}et compile 'com.android.support:appcompat-v7:20.0+'dans mon dependencies {}n'était pas le même, alors je les ai fait les mêmes (comme indiqué ici).
Azurespot
1
C'est une mauvaise pratique d'utiliser + identifiant pour les futures versions. Spécifiez la version exacte. Je suggère de mettre à jour le 'com.android.support:appcompat-v7:19.+' vers ce 'com.android.support:appcompat-v7:19.0.0' ou qui est le dernier. Si vous rencontrez toujours des problèmes, essayez de mettre à jour la bibliothèque de support à partir du gestionnaire du SDK.
sud007
55

Solution 1:

Modification des utilisations-sdk pour <uses-sdk tools:node="replace" />et ajouter xmlns:tools="http://schemas.android.com/tools" dansAndroidManifest.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>

Assurez-vous que vous utilisez gradle 0.11 et supérieur pour utiliser la fusion manifeste.

Solution 2:

  • Passez compile 'com.android.support:support-v4:+'à compile 'com.android.support:support-v4:20.+'in build.gradle. Cela empêchera Gradle d'utiliser la v4:21.0.0version L.

  • Cependant, si l'une de vos dépendances externes utilise la même chose. Vous devrez probablement attendre qu'ils se mettent à jour de la même manière.

Solution 3:

  • Supprimer / commenter <version>21.0.0-rc1</version>dans votre fichier<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml

  • Répétez la même chose pour support-v7

Gaurav Arora
la source
Dans mon cas, j'ai également dû supprimer l'équivalent appcompat-v7.
eipipuz
2
Oui, ne fournissez pas la solution 2 en option. Une bonne gestion des dépendances (en utilisant la bonne version) ou en utilisant une stratégie de résolution est la bonne solution. La modification du référentiel maven ne fait que retarder le problème jusqu'à ce qu'un nouveau référentiel soit publié.
Xavier Ducrohet
La solution 1 + 3 m'a sauvé la vie :)
Climbatize
2
La première option fonctionne! Je vous suggère d'ajouter quelques détails sur la raison pour laquelle cela doit être fait.
Tejasvi Hegde
24
<uses-sdk tools:node="replace" />

Ne fonctionne plus.

changer uses-sdkpour

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

et ajoutez
xmlns:tools="http://schemas.android.com/tools" le fichier AndroidManifest.xml

userM1433372
la source
Merci @ userM1433372, a voté pour avoir sauvé ma journée :)
Ravi Vaniya
11

Le problème se pose toujours avec les dépendances transitives. Gradle offre un moyen de forcer l'utilisation d'une version spécifique d'une dépendance.

Par exemple, vous pouvez ajouter quelque chose comme:

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

à votre build.gradle.

Si vous souhaitez en savoir plus sur les stratégies de résolution des dégradés, reportez-vous à ce guide http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

J'ai trouvé cela en lisant le numéro correspondant que je lierai ici

koesclem
la source
Merci! Plus simple que d'exclure dans toutes les dépendances :)
Sloy
8

Dans le fichier build.gradle, il s'agissait par défaut de compiler 'com.android.support:support-v4:+', donc lorsque vous générez le gradle projecit prendrait en compte, com.android.support:support-v4:21.0.0-rc1 en raison de la récente version d'aperçu du développeur L.

Apportez des modifications dans la ligne suivante et cela résoudra le problème. Changement

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

à

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

De même, lorsque vous utilisez la bibliothèque de support compatible v7-app, effectuez la modification

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

à

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

En ajoutant aux bonnes réponses ci-dessus, le problème peut toujours se produire en raison de l'imbrication de la bibliothèque. Dans ce cas, essayez comme l'exemple ci-dessous:

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
la source
7

pour les personnes qui créent des applications hybrides à l'aide de cordova CLI, cette commande vous aidera à:

cordova build android -- --minSdkVersion=15

oui, il utilise des doubles tirets doubles comme vous l'avez vu.

ProllyGeek
la source
Est-ce que cela résout le problème réel? Non, ça ne fonctionne que comme ça, mais cordova run androidça échoue.
Ionut Necula
@lonut savez-vous quel est le problème réel?
ProllyGeek
Dans mon cas, le problème est un plugin que j'utilise appelé cordova-plugin-facebook4. Unistalling il fait cordova run androidfonctionner très bien. Malheureusement, je n'ai trouvé aucune solution à cela nulle part. J'ai essayé manuellement d'ajouter le minSdkVersionmoi - même dans le AndroidManifestmais est en cours d'écrasement. J'essaie toujours de comprendre.
Ionut Necula
@lonut J'utilise le même plugin dans une application sur laquelle je travaille, faites-moi savoir si je peux vous aider. Cependant, vous devez consulter le fichier build.gradle, peut-être que si vous fournissez des informations supplémentaires, je peux vous aider.
ProllyGeek
Je l'ai finalement résolu en changeant la minSdkversion en 15en config.xml. La ligne: <preference name="android-minSdkVersion" value="14" />. De cette façon, le AndroidManifestfichier est également mis à jour avec la nouvelle version.
Ionut Necula
6

J'ai également eu le même problème et changer les éléments suivants m'a aidé:

de:

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

à:

dependencies {
 compile 'com.android.support:support-v4:20.0.0'
}
min2bro
la source
ce n'est pas un code. vous devez apporter cette modification dans votre fichier build.gradle.
min2bro
6

Pour les personnes confrontées à ce problème dans la version bêta d' Android Studio , la réponse acceptée n'a pas résolu mon problème. En important un projet téléchargé depuis GitHub, j'avais dans mon fichier build.gradle d'application ce qui donnait une erreur en question:

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

Mais dans mon dossier de bibliothèque externe, j'ai ce dossier:

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

J'ai résolu le problème ci-dessus en changeant la dépendance en:

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

Remarque: vous devrez peut-être également télécharger un niveau d'api inférieur à celui actuellement disponible dans Android Studio pour certaines bibliothèques et certains projets pour que cela fonctionne correctement.

Argument illégal
la source
Cela semble être le problème fondamental: "partout où vous voyez 'com.android.support:support'" ... "assurez-vous d'avoir la valeur à jour" C'est à peu près la taille de celui-ci!
Fattie
5

J'ai résolu le problème en modifiant la ligne ci-dessous dans build.gradle et cela fonctionne! :-)

ajout de la version 20. + '

De

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

À

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
}
Cristiana Chavez
la source
1
Je ne peux pas y croire. Aucune des autres réponses ci-dessus n'a fonctionné pour moi, sauf celle-ci. Je vous remercie!!! Remarque, j'ai dû remplacer mes fichiers v4et mes v7fichiers de support par :20.+.
Azurespot
5
compile('com.android.support:support-v4:19.1.0'){
    force = true
}

M'a aidé, pris d' ici

Lina Shyshova
la source
4

Vous devez configurer tous les supports et bibliothèques compatibles avec la version 19. +

Si la recommandation de quitter la bibliothèque de support avec la version 19. + ne fonctionne pas, vous pouvez essayer l'astuce suivante dans votre fichier AndroidManifest.

Ajoutez d'abord ce code:

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

Et puis, au niveau de l'application (pas à l'intérieur de l'application!)

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

Je fais toutes les solutions ici sans résultat, donc je regarde dans un autre endroit et j'ai trouvé un moyen de tromper l'IDE, vous devez donc mettre une ligne dans le Mainfest pour que Gradle en utilise un autre, celui qui vous mettez sur build.gradle la ligne est:

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

juste ça, et ça marche.

J'espère que ça aide.

David Moreno Cantero
la source
3
n'oubliez pas d'ajouter: xmlns:tools="http://schemas.android.com/tools"dans le <manifest>-tag
seb
3

Vous devez supprimer de build.gradle compile 'com.android.support:support-v13:+'

Igor Kostenko
la source
3

Voici le nouveau bogue déposé pour cette btw https://code.google.com/p/android/issues/detail?id=72430

En supposant que vous utilisez le référentiel de support, la solution consiste à commenter ou supprimer la ligne

21.0.0-rc1 dans le fichier de liste de référentiel Maven local à /extras/android/m2repository/com/android/support-v4/maven-metadata.xml

LemonGentry
la source
1

Pour moi, le problème comme celui-ci est résolu en modifiant le

minSdkVersion 14

Dans le fichier build.gladdle et utilisez celui qui est spécifié dans le message d'erreur

mais le problème était

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

J'ai donc changé de 14 à 15 dans le fichier build.gladdle et ça marche

Essaie.

Ruberandinda Patience
la source
1

Il suffit de cibler le nécessaire, minSdkVersionc'est-à-dire de le remplacer par le nécessaire. Dans mon cas, minSdkVersionc'était 14.

Changer pour minSdkVersion 16résoudre le problème

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
la source
0

N'oubliez pas, vous devez éditer build.gradle dans le sous-dossier 'app' de votre projet, pas dans le dossier du projet. J'ai perdu une journée de travail à essayer de résoudre un problème avec la version "L".

CoolMind
la source
0

Essayez de supprimer le ou les dossiers de construction de votre projet et resynchronisez votre projet Gradle pour le reconstruire. En outre, comme d'autres l'ont dit dans ce post - au lieu de faire quelque chose comme ça:

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

faites ceci:

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

Merci @Murtuza. Votre réponse m'a aidé à résoudre mon problème mais dans mon cas

compile 'com.android.support:support-v13:19.+ aussi, avec

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

de compile 'com.android.support:support-v4:+' compile 'com.android.support:support-v7:+' compile 'com.android.support:support-v13:+' Hope, cela pourrait aider quelqu'un

Deepthi
la source
0

J'ai certains projets où je préfère cibler L.MR1 (SDKv22) et certains projets où je préfère KK (SDKv19). Votre résultat peut être différent, mais cela a fonctionné pour moi.

// 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
la source
0

Dans Android Studio 1.1.0: Fichier - Structure du projet - Onglets Flavors - Sélectionnez la version minimale du SDK qui est plus élevée que dans Manifest

ea_
la source
0

J'ai la deuxième solution:

  1. décompressez https://dl.dropboxusercontent.com/u/16403954/android-21.zippoursdk\platforms\
  2. changer build.gradle comme

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

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

    dans Manifest avec xmlns:tools="schemas.android.com/tools";

  4. Aller à sdk\extras\android\m2repository\com\android\support\support-v4\21.0.0-rc1\

décompressez support-v4-21.0.0-rc1.aar et éditez AndroidManifest.xml comme

de

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

à

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

PS Vous pouvez le faire avec toutes les bibliothèques de support qui en ont besoin.

Vova K.
la source
J'ai changé "L" et redémarré le studio Android mais j'obtiens le même problème lors du projet de construction (ctrl + f9)
Ankur Loriya
0

La seule chose qui a fonctionné pour moi est la suivante:

Dans project.properties, j'ai changé:

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

abelabbesnabi
la source
0

Vous modifiez simplement le niveau d'API minimum de Build Settings -> Player Settings -> Other Settings -> Minimum SDK Levelà une version supérieure.

Codemaker
la source
0

La meilleure façon est de laisser Android Studio résoudre le problème.

J'ai fait ci-dessous, et cela a bien fonctionné.

  1. Ouvrez votre projet dans Android Studio, des erreurs apparaîtront, s'il y a un lien donné pour le corriger, cliquez dessus.

  2. Rouvrez votre projet dans Android Studio, les erreurs seront popup, il y aura cette fois un lien s'il n'est pas donné à l'étape 1, cliquez sur le lien donné pour le corriger.

Notez que les deux opérations ont pris plusieurs minutes, mais ont résolu tous les problèmes.

Manohar Reddy Poreddy
la source
0

Lösung: La fusion manifeste a échoué l'application d'attribut @ ppComponentFactory…

Si vous utilisez les bibliothèques Firebase les plus récentes et les plus performantes ou toute autre bibliothèque, celles-ci utilisent en fait AndroidX au lieu de android.support, alors vous pourriez avoir le problème car la fusion du manifeste a échoué !! Donc, dans ce cas, votre projet doit migrer vers AndroidX. Alors suivez le lien: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

Ou regardez cette vidéo. https://youtu.be/RgveQ4AY1L8 Merci.

Subhojit Halder
la source
Un lien vers une solution est le bienvenu, mais vous devez vous assurer que votre réponse est également utile sans elle. Il est préférable d'ajouter du contexte autour du lien et de décrire la partie la plus pertinente du didacticiel vers laquelle vous créez un lien au cas où la page cible ne serait pas disponible.
Joey
Ravi d'avoir de vos nouvelles #Joey. Permettez-moi d'ajouter une description supplémentaire. Merci.
Subhojit Halder