Bagaimana cara menggunakan alat: overrideLibrary dalam file build.gradle?

295

Saya menggunakan perpustakaan leanback, yang membutuhkan Android 17 atau lebih baru. Namun aplikasi saya mendukung minSDK 16, jadi saya mendapatkan kesalahan build dari gradle berkata

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

Ketika saya melihat dokumentasi alat bangun , saya melihat bagaimana cara menambahkan overrideLibrarypenanda ke manifes saya, tetapi masalahnya adalah saya mendeklarasikan minSdk saya di file gradle alih-alih dalam manifes.

Bagaimana cara saya gunakan overrideLibraryketika minSdk dideklarasikan di build.gradle daripada di AndroidManifest.xml?

emmby
sumber
Jangan lakukan ini. Alih-alih perbarui menitdkversion di build.gradle
Dr Deo
4
Ada alasan sah untuk melakukan ini, seperti menggunakan perpustakaan dengan syarat dengan menguji tingkat API sebelum menggunakannya.
Guillaume Perrot

Jawaban:

568

Buka Android Studio -> Buka File Manifest

tambahkan <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/> jangan lupa sertakan xmlns:tools="http://schemas.android.com/tools"juga, sebelum <application>tag

masukkan deskripsi gambar di sini

xDragonZ
sumber
dalam kasus sayatools:overrideLibrary="info.hoang8f.fbutton"
shareef
13
Watch out for termasuk perpustakaan yang mengandung <uses-sdk tools:ignore="GradleOverrides">. Itu akan menyebabkan tools:overrideLibraryatribut Anda diabaikan. Lihat stackoverflow.com/questions/31062893/…
Theo
1
Masalah saya masih ada setelah menambahkan alat: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration". Itu bekerja tetapi tiba-tiba berhenti bekerja hari ini setelah membuat aktivitas baru.
arjunkn
kamu menyelamatkan hariku (y)
KunalK
@arjunkn: tambahkan <uses-sdk tools: overrideLibray = "ca.barrenechea.widget.recyclerview.decoration" />, Jika tidak berfungsi periksa apakah namespace alat Anda benar atau tidak, namespace yang benar adalah xmlns: tools = " skema. android.com/tools "
NIPHIN
170

tidak masalah Anda mendeklarasikan minSdk di build.gradle. Anda harus menyalin overrideLibrarydi AndroidManifest.xml, seperti yang didokumentasikan di sini .

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

Sistem secara otomatis mengabaikan sdkVersion yang dideklarasikan di AndroidManifest.xml.

Saya harap ini menyelesaikan masalah Anda.

icastell
sumber
1
Apakah Anda harus menentukan versi apa pun di use-sdk? Tampaknya membingungkan untuk menentukan versi di AndroidManifest yang hanya akan diabaikan
emmby
1
Kamu benar. Tidak perlu, lagian jika Anda mengaturnya di grad AndroidManifest akan mengabaikannya pada waktu kompilasi.
icastell
13
+1 untuk menampilkan dua lib misalnya. Anda tidak dapat menggunakan dua tag use-sdk yang terpisah. jadi jika Anda ingin mengganti dua atau lebih, Anda dapat menempatkan koma di antara keduanya. Terima kasih!!
Hitesh Chavda
1
tetapi ini tidak berhasil bagi saya untuk menggunakan dua perpustakaan yang dipisahkan oleh koma, ada masalah dengan perpustakaan saya?
Zia Ur Rahman
7
<manifest xmlns:tools="http://schemas.android.com/tools" ... >
  <uses-sdk tools:overrideLibrary="nl.innovalor.ocr, nl.innovalor.corelib" />

Saya menghadapi masalah konflik antara berbagai versi SDK min. Jadi solusi ini berhasil untuk saya.

Kuldeep Saxena
sumber
1

Sebagai perpustakaan membutuhkan minSdkVersion 17maka Anda dapat mengubah file build.gradle(Modul: Aplikasi) yang sama:

defaultConfig {
        minSdkVersion 17 
        targetSdkVersion 25
}

dan setelah membangun itu proyek tidak boleh membuang kesalahan pembangunan.

Arpit Namdev
sumber
4
Meskipun ini akan berhasil, sebenarnya tidak menjawab pertanyaan. OP bertanya bagaimana overrideLibrary digunakan. Dan ada beberapa kasus khusus di mana Anda ingin menimpanya alih-alih mematuhinya (karena
Zoe
1

Aku hanya berubah minSdkVersion="7"di C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xmldan bekerja.

Langkah:

  1. Path: C:\MyApp\platforms\android\CordovaLib\AndroidManifest.xml
  2. Nilai: <uses-sdk android:minSdkVersion="7"/>
  3. Menjalankan perintah di cmd prompt baru:

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

Manjunath Mruthyunjaya
sumber
1
Ini tidak menjawab pertanyaan, yaitu bagaimana menggunakan overrideLibraryketika minSdk dideklarasikan di build.gradle.
LarsH
1

hanya mengubah hanya android: minSdkVersion = "16" dan itu berfungsi sempurna C: \ MyApp \ platform \ android \ CordovaLib \ AndroidManifest.xml

BIRJA KUMAR
sumber
0

gunakan kode ini di manifest.xml

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

Sebagai soulution untuk semua perpustakaan kami dapat mencocokkan versi SDK mereka sehingga tidak ada peristiwa yang tidak terduga terjadi

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

Hapus pustaka yang tidak Anda gunakan dalam proyek Anda (gms) dan pastikan bahwa versi SDK cocok dengan data tingkat tingkat aplikasi Anda

Mohammad f
sumber