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?


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


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.


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.


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.


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'


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


0

Verwenden Sie diesen Code in manifest.xml

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.