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?


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


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.


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.


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.


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'


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


0

gunakan kode ini di manifest.xml

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.