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?

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

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

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

Kuldeep Saxena
la source
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.

Arpit Namdev
la source
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'

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

BIRJA KUMAR
la source
0

utilisez ce code dans manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>
ali bagheri
la source
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

Mohammad f
la source