Wie verwende ich tools: overrideLibrary in einer build.gradle-Datei?

295

Ich verwende die Leanback-Bibliotheken, für die Android 17 oder höher erforderlich ist. Meine App unterstützt jedoch ein minSDK von 16, sodass ich vom Gradle-Sprichwort einen Build-Fehler erhalte

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

Wenn ich mir die Dokumentation zu den Build-ToolsoverrideLibrary ansehe, sehe ich, wie ich den Marker zu meinem Manifest hinzufüge. Das Problem ist jedoch, dass ich mein minSdk in meiner Gradle-Datei anstatt in meinem Manifest deklariere.

Wie verwende ich, overrideLibrarywenn das minSdk in build.gradle anstatt in AndroidManifest.xml deklariert ist?

emmby
quelle
Tu das nicht. Aktualisieren Sie stattdessen minsdkversion in der build.gradle
Dr. Deo
4
Es gibt legitime Gründe dafür, z. B. die bedingte Verwendung einer Bibliothek durch Testen der API-Ebene vor deren Verwendung.
Guillaume Perrot

Antworten:

568

Öffnen Sie Android Studio -> Manifestdatei öffnen

add <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> vergiss nicht xmlns:tools="http://schemas.android.com/tools", auch vor dem <application>Tag einzuschließen

Geben Sie hier die Bildbeschreibung ein

xDragonZ
quelle
in meinem Falltools:overrideLibrary="info.hoang8f.fbutton"
Shareef
13
Achten Sie auf enthaltene Bibliotheken, die enthalten <uses-sdk tools:ignore="GradleOverrides">. Dadurch wird Ihr tools:overrideLibraryAttribut ignoriert. Siehe stackoverflow.com/questions/31062893/…
Theo
1
Mein Problem besteht nach dem Hinzufügen von Tools immer noch: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Es funktionierte, hörte aber heute plötzlich auf zu arbeiten, nachdem eine neue Aktivität erstellt wurde.
Arjunkn
Du hast meinen Tag gerettet (y)
KunalK
@arjunkn: add <used-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, Wenn es nicht funktioniert, überprüfen Sie, ob Ihr Tools-Namespace korrekt ist oder nicht. Der richtige Namespace ist xmlns: tools = " schemas. android.com/tools "
NIPHIN
170

Es spielt keine Rolle, dass Sie Ihr minSdk in build.gradle deklarieren. Sie müssen overrideLibraryin Ihre kopieren AndroidManifest.xml, wie hier dokumentiert .

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

Das System ignoriert automatisch die in AndroidManifest.xml deklarierte sdkVersion.

Ich hoffe das löst dein Problem.

icastell
quelle
1
Müssen Sie im used-sdk irgendwelche Versionen angeben? Es scheint verwirrend, Versionen in AndroidManifest anzugeben, die einfach ignoriert werden
emmby
1
Du hast recht. Ist nicht erforderlich. Wenn Sie es im AndroidManifest-Gradle festlegen, wird es beim Kompilieren ignoriert.
icastell
13
+1 für die Anzeige von zwei Bibliotheken im Beispiel. Sie können nicht zwei separate using-sdk-Tags verwenden. Wenn Sie also zwei oder mehr überschreiben möchten, können Sie ein Komma dazwischen setzen. Vielen Dank!!
Hitesh Chavda
1
Aber das hat bei mir nicht funktioniert, wenn ich zwei durch Komma getrennte Bibliotheken verwendet habe. Gibt es ein Problem mit meiner Bibliothek?
Zia Ur Rahman
7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

Ich war mit dem Problem des Konflikts zwischen verschiedenen min sdk-Versionen konfrontiert. Diese Lösung hat also bei mir funktioniert.

Kuldeep Saxena
quelle
1

minSdkVersion 17Je nach Bedarf der Bibliothek können Sie dasselbe in der build.gradleDatei (Modul: Anwendung) ändern :

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

und nach dem Erstellen sollte das Projekt keinen Erstellungsfehler auslösen.

Arpit Namdev
quelle
4
Dies würde zwar funktionieren, beantwortet die Frage jedoch nicht. OP fragt, wie overrideLibrary verwendet wird. Und es gibt bestimmte Fälle, in denen Sie es überschreiben möchten, anstatt zu entsprechen (da es in Ordnung ist, es zu überschreiben)
Zoe
1

Ich habe gerade minSdkVersion="7"in C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmlund es funktionierte.

Schritte:

  1. Pfad: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Wert: <uses-sdk android:minSdkVersion="7"/>
  3. Ran-Befehl in neuer cmd-Eingabeaufforderung:

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

Manjunath Mruthyunjaya
quelle
1
Dies beantwortet nicht die Frage, wie overrideLibrarydas minSdk in build.gradle deklariert werden soll.
LarsH
1

nur geändert android: minSdkVersion = "16" und es funktioniert perfekt C: \ MyApp \ platform \ android \ CordovaLib \ AndroidManifest.xml

BIRJA KUMAR
quelle
0

Verwenden Sie diesen Code in manifest.xml

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

Als Soulution für alle Bibliotheken können wir die SDK-Version von ihnen abgleichen, damit kein unerwartetes Ereignis eintreten kann

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

Entfernen Sie Bibliotheken, die Sie nicht in Ihrem Projekt verwenden (gms), und stellen Sie sicher, dass die SDK-Version mit den Gradle-Daten auf App-Ebene übereinstimmt

Mohammad f
quelle