Bir build.gradle dosyasında tools: overrideLibrary'i nasıl kullanabilirim?


295

Android 17 veya üstünü gerektiren geri yaslanma kitaplıklarını kullanıyorum. Ancak benim app 16 minSDK destekler, bu yüzden gradle söyleyerek bir inşa hatası alıyorum

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

Oluşturma araçları belgelerine baktığımda , overrideLibraryişaretleyiciyi manifest'ime nasıl ekleyeceğimi görüyorum , ancak sorun, minSdk'imi bildirim dosyam yerine gradle dosyamda bildirmem.

overrideLibraryMinSdk, AndroidManifest.xml yerine build.gradle içinde bildirildiğinde nasıl kullanabilirim ?


Yapma bunu. Bunun yerine build.gradle'daki minsdkversion'ı güncelleyin
Dr Deo

4
Bunu yapmanın yasal nedenleri vardır; örneğin, kullanmadan önce API düzeyini test ederek bir kitaplığı koşullu olarak kullanmak.
Guillaume Perrot

Yanıtlar:


570

Android Studio'yu Aç -> Bildirim Dosyasını Aç

ekle etiketinden önce <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> eklemeyi xmlns:tools="http://schemas.android.com/tools"de unutmayın<application>

resim açıklamasını buraya girin


benim durumumdatools:overrideLibrary="info.hoang8f.fbutton"
shareef

13
İçerdiği kitaplıklara dikkat edin <uses-sdk tools:ignore="GradleOverrides">. Bunlar, tools:overrideLibraryözelliğinizin göz ardı edilmesine neden olur . Bkz. Stackoverflow.com/questions/31062893/…
Theo

1
Araçları ekledikten sonra sorunum hala devam ediyor: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Çalışıyordu, ancak yeni bir etkinlik oluşturduktan sonra aniden çalışmayı bıraktı.
arjunkn

günümü kurtardın (y)
KunalK

@arjunkn: add <uses-sdk tools ekleyin: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, Çalışmıyorsa araç ad alanınızın doğru olup olmadığını kontrol edin veya doğru ad alanının xmlns olup olmadığını kontrol edin: tools = " şemaları. android.com/tools "
NIPHIN

170

build.gradle içinde minSdk'nizi bildirmeniz önemli değildir. Burada belgelendiği gibi kopyalamanız overrideLibrarygerekir .AndroidManifest.xml

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

Sistem, AndroidManifest.xml dosyasında bildirilen sdkVersion öğesini otomatik olarak yok sayar.

Umarım bu sorununuzu çözer.


1
Uses-sdk içinde herhangi bir sürüm belirtmeniz gerekiyor mu? AndroidManifest'te göz ardı edilecek sürümleri belirtmek kafa karıştırıcı gibi görünüyor
emmby

1
Haklısın. Gerekli değildir, ancak AndroidManifest gradle'da ayarlarsanız, derleme zamanında yok sayar.
icastell

13
Örneğin iki libs görüntülemek için +1. İki ayrı kullanım-sdk etiketi kullanamazsınız. iki veya daha fazlasını geçersiz kılmak istiyorsanız, arasına virgül koyabilirsiniz. Teşekkürler!!
Hitesh Chavda

1
ancak virgülle ayrılmış iki kitaplık kullanmam işe yaramadı, kitaplığımla ilgili bir sorun mu var?
Zia Ur Rahman

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

Farklı min sdk sürümleri arasında çakışma sorunu ile karşı karşıya kaldım. Bu çözüm benim için çalıştı.


1

Kütüphanenin gerektirdiği gibi (Module: Application) dosyasında minSdkVersion 17da aynısını değiştirebilirsiniz build.gradle:

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

ve bu binadan sonra proje herhangi bir inşa hatası atmamalıdır.


4
Bu işe yarayacak olsa da, aslında soruyu cevaplamıyor. OP, overrideLibrary'nin nasıl kullanıldığını sorar. Ve uymak yerine geçersiz kılmak istediğiniz belirli durumlar vardır (geçersiz kılmanın iyi olduğu gibi)
Zoe

1

Sadece değişti minSdkVersion="7"içinde C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmlve işe yaradı.

Adımlar:

  1. Yol: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Değeri: <uses-sdk android:minSdkVersion="7"/>
  3. Komutu yeni cmd isteminde çalıştır:

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


1
Bu overrideLibrary, minSdk build.gradle içinde bildirildiğinde nasıl kullanılacağı sorusuna cevap vermez.
LarsH

1

sadece android değiştirdi: minSdkVersion = "16" ve mükemmel çalışıyor C: \ MyApp \ platforms \ android \ CordovaLib \ AndroidManifest.xml


0

bu kodu manifest.xml dosyasında kullanın

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

0

Tüm kütüphaneler için ruh olarak bunların sdk sürümünü eşleştirebiliriz, böylece beklenmedik bir olay meydana gelmez

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

Projenizde (gms) kullanmadığınız kitaplıkları kaldırın ve sdk sürümünün uygulama düzeyi sınıflandırma verilerinizle eşleştiğinden emin olun

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.