Come uso gli strumenti: overrideLibrary in un file build.gradle?


295

Sto usando le librerie leanback, che richiedono Android 17 o versioni successive. Tuttavia, la mia app supporta un minSDK di 16, quindi ricevo un errore di build dal detto gradle

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

Quando guardo la documentazione degli strumenti di compilazione , vedo come aggiungere il overrideLibrarymarcatore al mio manifest, ma il problema è che sto dichiarando il mio minSdk nel mio file gradle anziché nel mio manifest.

Come si usa overrideLibraryquando minSdk viene dichiarato in build.gradle anziché in AndroidManifest.xml?


Non farlo. Invece aggiorna minsdkversion in build.gradle
Dr Deo,

4
Esistono motivi legittimi per eseguire questa operazione, ad esempio l'uso condizionale di una libreria testando il livello API prima di utilizzarlo.
Guillaume Perrot,

Risposte:


568

Apri Android Studio -> Apri file manifest

aggiungi <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> non dimenticare di includere xmlns:tools="http://schemas.android.com/tools"anche prima del <application>tag

inserisci qui la descrizione dell'immagine


nel mio casotools:overrideLibrary="info.hoang8f.fbutton"
Shareef

13
Fai attenzione alle librerie incluse che contengono <uses-sdk tools:ignore="GradleOverrides">. Questi causeranno il tuo tools:overrideLibraryattributo da ignorare. Vedi stackoverflow.com/questions/31062893/…
Theo

1
Il mio problema persiste ancora dopo l'aggiunta di strumenti: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Stava funzionando ma improvvisamente ha smesso di funzionare oggi dopo aver creato una nuova attività.
Arjunkn,

mi hai salvato la giornata (y)
KunalK

@arjunkn: add <tools-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, Se non funziona controlla se il tuo spazio dei nomi degli strumenti è corretto o no lo spazio dei nomi corretto è xmlns: tools = " schemi. android.com/tools "
NIPHIN

170

non importa che tu dichiari il tuo minSdk in build.gradle. Devi copiarlo overrideLibrarynel tuo AndroidManifest.xml, come documentato qui .

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

Il sistema ignora automaticamente la sdkVersion dichiarata in AndroidManifest.xml.

Spero che questo risolva il tuo problema.


1
Devi specificare qualche versione in usi-sdk? Sembra confuso specificare le versioni in AndroidManifest che verranno semplicemente ignorate
emmby,

1
Hai ragione. Non è necessario, comunque se lo si imposta nel gradiente AndroidManifest lo ignorerà al momento della compilazione.
Icastell,

13
+1 per visualizzare due librerie nell'esempio. Non è possibile utilizzare due tag usi-sdk separati. quindi se vuoi sovrascrivere due o più puoi mettere una virgola nel mezzo. Grazie!!
Hitesh Chavda,

1
ma questo non ha funzionato per me usare due librerie separate da virgola, qualche problema con la mia libreria?
Zia Ur Rahman,

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

Stavo affrontando il problema del conflitto tra diverse versioni di min sdk. Quindi questa soluzione ha funzionato per me.


1

Come richiesto dalla libreria, minSdkVersion 17è possibile modificare lo stesso nel file build.gradle(Modulo: Applicazione):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

e dopo quella costruzione il progetto non dovrebbe generare alcun errore di compilazione.


4
Mentre questo funzionerebbe, in realtà non risponde alla domanda. OP chiede come si usa la funzione di overrideLibrary. E ci sono casi specifici in cui vorresti sovrascriverlo invece di rispettarlo (poiché va bene sovrascriverlo)
Zoe,

1

Ho appena cambiato minSdkVersion="7"inC:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml ed ha funzionato.

passi:

  1. Sentiero: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Valore: <uses-sdk android:minSdkVersion="7"/>
  3. Ho eseguito il comando nel nuovo prompt cmd:

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


1
Questo non risponde alla domanda, che è come usare overrideLibraryquando minSdk è dichiarato in build.gradle.
LarsH,

1

appena cambiato solo android: minSdkVersion = "16" ed è perfetto C: \ MyApp \ platform \ android \ CordovaLib \ AndroidManifest.xml


0

usa questo codice in manifest.xml

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

0

Come soulution per tutte le librerie possiamo abbinare la versione sdk di esse in modo che nessun evento imprevisto possa accadere

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'
        }
    }
} 
}

Rimuovi le librerie che non usi nel tuo progetto (gms) e assicurati che la versione di sdk corrisponda ai dati di gradle a livello di app

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.