Jak korzystać z narzędzi: overrideLibrary w pliku build.gradle?

295

Korzystam z bibliotek Leanback, które wymagają Androida 17 lub nowszego. Jednak moja aplikacja obsługuje minSDK 16, więc pojawia się błąd kompilacji po powiedzeniu stopnia

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

Kiedy patrzę na dokumentację narzędzi do budowania , widzę, jak dodać overrideLibraryznacznik do mojego manifestu, ale problem polega na tym, że deklaruję mój minSdk w pliku gradle zamiast w manifeście.

Jak korzystać, overrideLibrarygdy minSdk jest zadeklarowany w build.gradle zamiast w AndroidManifest.xml?

emmby
źródło
Nie rób tego. Zamiast tego zaktualizuj minsdkversion w build.gradle
Dr Deo
4
Istnieją uzasadnione powody, aby to zrobić, na przykład warunkowo używać biblioteki, testując poziom interfejsu API przed użyciem.
Guillaume Perrot

Odpowiedzi:

568

Otwórz Android Studio -> Otwórz plik manifestu

dodaj <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> , nie zapomnij xmlns:tools="http://schemas.android.com/tools"też dołączyć przed <application>tagiem

wprowadź opis zdjęcia tutaj

xDragonZ
źródło
w moim przypadkutools:overrideLibrary="info.hoang8f.fbutton"
shareef
13
Uważaj na dołączone biblioteki, które zawierają <uses-sdk tools:ignore="GradleOverrides">. Spowoduje to, że twój tools:overrideLibraryatrybut zostanie zignorowany. Zobacz stackoverflow.com/questions/31062893/…
Theo
1
Mój problem nadal występuje po dodaniu narzędzi: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Działało, ale nagle przestało działać po utworzeniu nowej działalności.
arjunkn
uratowałeś mi dzień (y)
KunalK
@arjunkn: add <uses-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, Jeśli nie działa, sprawdź, czy przestrzeń nazw narzędzi jest poprawna, czy poprawna przestrzeń nazw to schematy xmlns: tools = " . android.com/tools
NIPHIN
170

nie ma znaczenia, że ​​deklarujesz swój minSdk w build.gradle. Musisz skopiować overrideLibraryw swoim AndroidManifest.xml, jak udokumentowano tutaj .

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

System automatycznie ignoruje sdkVersion zadeklarowany w AndroidManifest.xml.

Mam nadzieję, że to rozwiąże twój problem.

icastell
źródło
1
Czy musisz podać jakieś wersje w uses-sdk? Wydaje się, że mylące jest określenie wersji w AndroidManifest, które będą po prostu ignorowane
emmby
1
Masz rację. Nie jest konieczne, w każdym razie, jeśli ustawisz go w gradacji AndroidManifest, zignoruje to w czasie kompilacji.
icastell
13
+1 za wyświetlanie na przykład dwóch bibliotek lib. Nie można użyć dwóch oddzielnych znaczników uses-sdk. więc jeśli chcesz zastąpić dwa lub więcej, możesz wstawić przecinek. Dzięki!!
Hitesh Chavda
1
ale nie działało to dla mnie, aby użyć dwóch bibliotek oddzielonych przecinkiem, czy jest jakiś problem z moją biblioteką?
Zia Ur Rahman
7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

Stałem przed problemem konfliktu między różnymi wersjami min sdk. To rozwiązanie zadziałało dla mnie.

Kuldeep Saxena
źródło
1

Jak wymaga biblioteka minSdkVersion 17, możesz zmienić to samo w build.gradlepliku (Moduł: Aplikacja):

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

a po zakończeniu budowy projekt nie powinien generować błędów kompilacji.

Arpit Namdev
źródło
4
Chociaż to zadziałałoby, w rzeczywistości nie odpowiada na pytanie. OP pyta, jak używany jest overrideLibrary. I są szczególne przypadki, w których chcesz to zastąpić, a nie zastosować (ponieważ można to zastąpić)
Zoe
1

Właśnie zmienił minSdkVersion="7"się C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmli to zadziałało.

Kroki:

  1. Ścieżka: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Wartość: <uses-sdk android:minSdkVersion="7"/>
  3. Polecenie Ran w nowym wierszu polecenia cmd:

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

Manjunath Mruthyunjaya
źródło
1
To nie odpowiada na pytanie, jak używać, overrideLibrarygdy minSdk jest zadeklarowany w build.gradle.
LarsH
1

właśnie zmieniłem tylko Androida: minSdkVersion = "16" i działa idealnie C: \ MyApp \ platform \ android \ CordovaLib \ AndroidManifest.xml

BIRJA KUMAR
źródło
0

użyj tego kodu w pliku manifest.xml

<uses-sdk
android:minSdkVersion="16"
android:maxSdkVersion="17"
tools:overrideLibrary="x"/>
Ali Bagheri
źródło
0

Jako soulution dla wszystkich bibliotek możemy dopasować ich wersję sdk, aby nie mogło dojść do nieoczekiwanego zdarzenia

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

Usuń biblioteki, których nie używasz w swoim projekcie (gms) i upewnij się, że wersja sdk odpowiada danym stopnia aplikacji

Mohammad f
źródło