Comment utiliser les outils: overrideLibrary dans un fichier build.gradle?


295

J'utilise les bibliothèques leanback, qui nécessitent Android 17 ou une version ultérieure. Cependant, mon application prend en charge un minSDK de 16, donc je reçois une erreur de construction de Gradle disant

Error:Execution failed for task ':Tasks:processPhoneDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 17 declared in library /Users/mike/Projects/android-for-dummies-v3/Tasks/build/intermediates/exploded-aar/com.android.support/leanback-v17/21.0.2/AndroidManifest.xml
    Suggestion: use tools:overrideLibrary="android.support.v17.leanback" to force usage

Quand je regarde la documentation des outils de construction , je vois comment ajouter le overrideLibrarymarqueur à mon manifeste, mais le problème est que je déclare mon minSdk dans mon fichier gradle au lieu de dans mon manifeste.

Comment utiliser overrideLibrarylorsque le minSdk est déclaré dans build.gradle au lieu de dans AndroidManifest.xml?


Ne fais pas ça. À la place, mettez à jour minsdkversion dans le build.gradle
Dr Deo

4
Il existe des raisons légitimes de le faire, telles que l'utilisation conditionnelle d'une bibliothèque en testant le niveau de l'API avant de l'utiliser.
Guillaume Perrot

Réponses:


568

Ouvrir Android Studio -> Ouvrir le fichier manifeste

ajouter <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> n'oubliez pas d'inclure xmlns:tools="http://schemas.android.com/tools"aussi, avant la <application>balise

entrez la description de l'image ici


dans mon castools:overrideLibrary="info.hoang8f.fbutton"
shareef

13
Attention aux bibliothèques incluses qui contiennent <uses-sdk tools:ignore="GradleOverrides">. Cela entraînera l'ignorance de votre tools:overrideLibraryattribut. Voir stackoverflow.com/questions/31062893/…
Theo

1
Mon problème persiste après l'ajout d'outils: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Il fonctionnait mais a soudainement cessé de fonctionner aujourd'hui après la création d'une nouvelle activité.
arjunkn

vous avez sauvé ma journée (y)
KunalK

@arjunkn: ajoutez <uses-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, si cela ne fonctionne pas, vérifiez si l'espace de noms de vos outils est correct ou non, l'espace de noms correct est les schémas xmlns: tools = " . android.com/tools "
NIPHIN

170

peu importe que vous déclariez votre minSdk dans build.gradle. Vous devez copier overrideLibrarydans votre AndroidManifest.xml, comme indiqué ici .

<manifest 
    ... >
<uses-sdk tools:overrideLibrary="com.example.lib1, com.example.lib2"/>
    ...
</manifest>

Le système ignore automatiquement la version sdk déclarée dans AndroidManifest.xml.

J'espère que cela résoudra votre problème.


1
Devez-vous spécifier des versions dans uses-sdk? Il semble déroutant de spécifier dans AndroidManifest des versions qui vont simplement être ignorées
emmby

1
Vous avez raison. Ce n'est pas nécessaire, de toute façon si vous le définissez dans le gradle AndroidManifest, il l'ignorera au moment de la compilation.
icastell

13
+1 pour afficher deux bibliothèques dans l'exemple. Vous ne pouvez pas utiliser deux balises uses-sdk distinctes. donc si vous voulez en remplacer deux ou plus, vous pouvez mettre une virgule entre les deux. Merci!!
Hitesh Chavda

1
mais cela n'a pas fonctionné pour moi d'utiliser deux bibliothèques séparées par une virgule, un problème avec ma bibliothèque?
Zia Ur Rahman

7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

J'étais confronté au problème de conflit entre les différentes versions de min sdk. Cette solution a donc fonctionné pour moi.


1

Comme la bibliothèque l'exige, minSdkVersion 17vous pouvez changer la même chose dans le build.gradlefichier (Module: Application):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

et après cette construction, le projet ne devrait pas générer d'erreur de construction.


4
Bien que cela fonctionne, cela ne répond pas à la question. OP demande comment overrideLibrary est utilisé. Et il y a des cas spécifiques où vous voudriez le remplacer au lieu de vous y conformer (car c'est bien de le remplacer)
Zoe

1

Je viens de changer minSdkVersion="7"dans C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmlet cela a fonctionné.

Pas:

  1. Chemin: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Valeur: <uses-sdk android:minSdkVersion="7"/>
  3. Commande Ran dans la nouvelle invite cmd:

    C:\MyApp>phonegap build android --debug [phonegap] executing 'cordova build android --debug'... [phonegap] completed 'cordova build android --debug'


1
Cela ne répond pas à la question, qui est de savoir comment utiliser overrideLibrarylorsque le minSdk est déclaré dans build.gradle.
LarsH

1

vient de changer seulement android: minSdkVersion = "16" et son travail est parfait C: \ MyApp \ plates-formes \ android \ CordovaLib \ AndroidManifest.xml


0

utilisez ce code dans manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>

0

En tant que soulution pour toutes les bibliothèques, nous pouvons faire correspondre la version sdk d'entre elles afin qu'aucun événement inattendu ne puisse se produire

subprojects { 
afterEvaluate {project -> 
    if (project.hasProperty("android")) { 
        android { 
            compileSdkVersion 28 
            buildToolsVersion '28.0.3'
            defaultConfig {
                //It's kinda tricking android studio but anyway it works
                minSdkVersion 17
            }
        } 
    } 
    if (project.hasProperty("dependencies")) {
        dependencies {
            implementation 'com.android.support:support-core-utils:28.0.0'
            implementation 'com.android.support:appcompat-v7:28.0.0'
            implementation 'com.google.android.gms:play-services-base:16.1.0'
        }
    }
} 
}

Supprimez les bibliothèques que vous n'utilisez pas dans votre projet (gms) et assurez-vous que la version sdk correspond aux données de niveau de votre application

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.