Manifes merger gagal: uses-sdk: minSdkVersion 14


233

Sejak mengunduh SDK terbaru dan menginstal Android Studio, proyek saya gagal dibangun. Saya mendapatkan pesan berikut:

Error:Gradle: Execution failed for task ':SampleProject:processProdDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1

Saya mengalami kesalahan yang sama Kesalahan: Eksekusi gagal untuk tugas ': app: processDebugManifest'. > Manifest merger gagal: uses-sdk: minSdkVersion 19 tidak boleh lebih kecil dari versi 19 yang dideklarasikan di perpustakaan com.android.support:support-v4:21.0.0-rc1
bobby.dhillon

Saya mendapatkan pengecualian yang sama minSdkVersion 15 tidak bisa lebih kecil dari versi 15. Alat Build SDK telah diperbarui jadi saya kira bug di Android Studio dan alat-alat Build baru
Boardy

1
Tampaknya ini adalah bug: code.google.com/p/android/issues/detail?id=72430 Perbaikan untuk saat ini adalah mengomentari baris di maven-metadata.xml
Emanuel Canha

Jawaban:


312

Catatan: Ini telah diperbarui untuk mencerminkan rilis API 21, Lollipop. Pastikan untuk mengunduh SDK terbaru.

Dalam salah satu modul saya, saya memiliki yang berikut di build.gradle:

dependencies {
    compile 'com.android.support:support-v4:+'
}

Mengubah ini menjadi

dependencies {
    // do not use dynamic updating.
    compile 'com.android.support:support-v4:21.0.0' 
}

memperbaiki masalah ini.

Pastikan Anda tidak melakukan penyertaan umum com.android.support:support-v4:+atau pustaka dukungan lainnya (v7, v13, appcompat, dll), di mana saja di proyek Anda.

Saya berasumsi masalahnya adalah v4:+mengambil kandidat rilis (21.0.0-rc1) rilis L terbaru yang jelas membutuhkan L SDK.

Edit:

Jika Anda perlu menggunakan tampilan baru (CardView, RecyclerView, dan Palette), yang berikut ini akan berfungsi:

compile "com.android.support:cardview-v7:21.0.0"
compile "com.android.support:recyclerview-v7:21.0.0"
compile "com.android.support:palette-v7:21.0.0"

(Kredit untuk EddieRingle di / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Edit lainnya

Pastikan untuk melihat jawaban @ murtuza di bawah ini mengenai appcompat-v7 dan upvote jika itu membantu!


3
Bagaimana dengan perpustakaan yang dikompilasi dari Maven? Bagaimana cara mengecualikan ketergantungan "lama"?
Arnaud

4
@Arnaud mengkompilasi ("bla: bla: bla") {kecualikan grup: 'com.android.support', modul: 'support-v4'}
AndroidGecko

3
Perhatikan bahwa untuk menggunakan CardView, RecyclerView dan Palette, Anda juga harus mengubah Manifest Anda untuk menghindari lemparan gradasi gabungan penggabungan. Lihat tautan ini untuk perincian: reddit.com/r/androiddev/comments/297xli/…
Michel

3
Tidak pernah, menyarankan orang untuk menggunakan + dalam versi ketergantungan. SELALU menentukan versi perpustakaan yang tepat yang ingin Anda gunakan (atau tersedia pada saat Anda menulis kode). Bahkan 20. + buruk. Dan jika Anda bergantung pada perpustakaan, ikuti praktik BAD ini, pertimbangkan untuk tidak menyertakan ketergantungannya dan menyediakan versi Anda sendiri dari ketergantungan itu. Ini membuat bangunan Anda dapat direproduksi kapan saja. Harap tingkatkan jawaban Anda, beli saran Anda untuk menggunakan + di versi ketergantungan.
Daniele Segato

1
Apa yang dikatakan @DanieleSegato. Jangan rekomendasikan versi dinamis. Ini praktik buruk.
Xavier Ducrohet

69

Juga, jika Anda mengimpor perpustakaan appcompat-v7 pastikan Anda menandai nomor versi di akhir seperti ini:

compile 'com.android.support:support-v4:19.+'
compile 'com.android.support:appcompat-v7:19.+'

Setelah hanya mengubah versi dukungan-v4, saya masih menerima kesalahan:

Manifest merger gagal: uses-sdk: minSdkVersion 15 tidak boleh lebih kecil dari versi L yang dideklarasikan di perpustakaan com.android.support:support-v4:21.0.0-rc1

Itu agak membingungkan karena sepertinya v4 masih menjadi masalah, tetapi, pada kenyataannya, membatasi versi appcompat v7 memperbaiki masalah.


Tangkapan yang bagus! tidak ada v7 saya yang memiliki versi pada mereka juga.
RoundSparrow hilltx

dan juga hal yang sama untuk dukungan v13)
Defuera

1
Saya memiliki ketidakcocokan appcompat_v7 juga, buildToolsVersion '20.0.0'di saya android{}dan compile 'com.android.support:appcompat-v7:20.0+'di saya dependencies {}tidak sama, jadi saya membuatnya sama (seperti yang ditunjukkan di sini).
Azurespot

1
Merupakan praktik buruk untuk menggunakan + pengidentifikasi untuk versi yang akan datang. Tentukan versi yang tepat. Saya sarankan untuk memperbarui 'com.android.support:appcompat-v7:19.+' ke ini 'com.android.support:appcompat-v7:19.0.0' atau yang terbaru. Jika Anda masih menghadapi masalah, coba perbarui perpustakaan dukungan dari manajer SDK.
sud007

55

Solusi 1:

Perubahan penggunaan-sdk untuk <uses-sdk tools:node="replace" />dan menambahkan xmlns:tools="http://schemas.android.com/tools" diAndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.demo.android"
    android:versionCode="16"
    android:versionName="3.3.1">
    .
    .
    <uses-sdk tools:node="replace" />
    .
    .
</manifest>

Pastikan Anda menggunakan gradle 0.11 ke atas untuk menggunakan Manifest merger.

Solusi 2:

  • Ubah compile 'com.android.support:support-v4:+'ke compile 'com.android.support:support-v4:20.+'dalam build.gradle. Ini akan mencegah gradle menggunakan v4:21.0.0yang membutuhkan versi L.

  • Namun, jika salah satu dari dependensi eksternal Anda menggunakan hal yang sama. Anda mungkin harus menunggu mereka memperbarui hal yang sama.

Solusi 3:

  • Hapus / Komentar <version>21.0.0-rc1</version>dalam file Anda<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml

  • Ulangi hal yang sama untuk support-v7


Dalam kasus saya, saya juga harus menghapus appcompat-v7 yang setara.
eipipuz

2
Ya, jangan memberikan solusi 2 sebagai opsi. Manajemen ketergantungan yang tepat (menggunakan versi yang tepat), atau menggunakan strategi resolusi adalah solusi yang tepat. Mengedit repo pakar hanya menunda masalah sampai repo baru dirilis.
Xavier Ducrohet

Solusi 1 + 3 menyelamatkan hidup saya :)
Climbatize

2
Opsi pertama berfungsi! Saya menyarankan Anda untuk menambahkan beberapa detail tentang mengapa hal ini dilakukan.
Tejasvi Hegde


11

Masalahnya masih muncul dengan dependensi transitif. Gradle menawarkan cara untuk memaksa penggunaan versi dependensi tertentu.

Misalnya, Anda dapat menambahkan sesuatu seperti:

configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:20.+'
        force 'com.android.support:appcompat-v7:20.+'
    }
}

ke build.gradle Anda.

Jika Anda ingin mempelajari lebih lanjut tentang strategi resolusi gradle, lihat panduan ini http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

Saya menemukan ini saat membaca masalah terkait yang akan saya tautkan di sini


Terima kasih! Lebih mudah daripada menempatkan mengecualikan dalam setiap ketergantungan :)
Sloy

8

Dalam file build.gradle, secara default kompilasi 'com.android.support:support-v4:+' jadi ketika Anda membangun projecit gradle akan dipertimbangkan, com.android.support:support-v4:21.0.0-rc1 karena rilis pratinjau pengembang L terbaru.

Buat perubahan pada baris berikut dan itu akan menyelesaikan masalah. Perubahan

compile 'com.android.support:support-v4:+' 

untuk

compile 'com.android.support:support-v4:20.+'

Demikian pula saat menggunakan pustaka dukungan v7-appcompat, buat perubahan dari

compile 'com.android.support:appcompat-v7:+'

untuk

compile 'com.android.support:appcompat-v7:20.+'.

8

Menambah jawaban yang benar di atas, masalah mungkin masih terjadi karena perpustakaan bersarang. Dalam hal ini, coba seperti contoh di bawah ini:

compile 'com.android.support:support-v4:20.+'
compile ('com.github.chrisbanes.actionbarpulltorefresh:extra-abs:+') { // example
    exclude group: 'com.android.support', module:'support-v4'
    exclude group: 'com.android.support', module:'appcompat-v7'
}

7

untuk orang yang membangun aplikasi hybrid menggunakan cordova CLI, perintah ini akan membantu:

cordova build android -- --minSdkVersion=15

ya itu menggunakan garis ganda ganda seperti yang Anda lihat.


Apakah ini menyelesaikan masalah yang sebenarnya? Tidak. Ia hanya berfungsi seperti itu, tetapi dengan cordova run androiditu gagal.
Ionut Necula

@tetapi tahukah Anda apa masalah sebenarnya?
ProllyGeek

Dalam kasus saya masalahnya adalah plugin yang saya gunakan dipanggil cordova-plugin-facebook4. Tidak melakukan hal itu membuat cordova run androidpekerjaan menjadi baik. Sayangnya saya tidak menemukan solusi untuk ini di mana pun. Saya mencoba secara manual untuk menambahkan minSdkVersiondiri saya di AndroidManifesttetapi sedang ditimpa. Masih berusaha mencari tahu.
Ionut Necula

@lonut Saya menggunakan plugin yang sama di beberapa aplikasi yang sedang saya kerjakan, beri tahu saya jika saya bisa membantu. Namun Anda perlu meninjau file build.gradle, mungkin jika Anda memberikan info tambahan saya dapat membantu.
ProllyGeek

Aku akhirnya dipecahkan dengan mengubah minSdkversi untuk 15di config.xml. Baris: <preference name="android-minSdkVersion" value="14" />. Dengan cara ini AndroidManifestfile diperbarui juga dengan versi baru.
Ionut Necula

6

Saya juga memiliki masalah yang sama dan mengubah mengikuti membantu saya:

dari:

dependencies {
    compile 'com.android.support:support-v4:+'

untuk:

dependencies {
 compile 'com.android.support:support-v4:20.0.0'
}

itu; bukan kode. Anda perlu melakukan perubahan ini di file build.gradle Anda.
min2bro

6

Untuk orang yang menghadapi masalah ini dalam Android Studio beta, jawaban yang diterima tidak menyelesaikan masalah saya. Mengimpor proyek yang diunduh dari GitHub, saya memiliki yang berikut di file build.gradle aplikasi saya yang memberikan kesalahan pada pertanyaan:

 dependencies {
    compile 'com.android.support:support-v4:+'
}

Tetapi dalam folder perpustakaan eksternal saya, saya memiliki folder ini:

support-v4-21.0.0-rc1 //note the 21

Saya memecahkan masalah di atas dengan mengubah ketergantungan ke:

dependencies {
compile 'com.android.support:support-v4:20.+' //20 used less than available strange but works
}

Catatan: Anda mungkin juga perlu mengunduh tingkat api lebih rendah dari yang saat ini tersedia di Android Studio untuk beberapa perpustakaan dan proyek agar ini berfungsi dengan baik.


Ini tampaknya menjadi masalah mendasar: "di mana pun Anda melihat 'com.android.support:support'" ... "pastikan Anda memiliki nilai terkini" Itu tentang ukurannya!
Fattie

5

Saya memecahkan masalah dengan mengedit baris di bawah ini di build.gradle dan berhasil! :-)

menambahkan versi 20. + '

Dari

 dependencies {
        compile 'com.android.support:appcompat-v7:+'
    }

Untuk

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
}

1
Saya tidak bisa mempercayainya. Tidak ada jawaban lain di atas yang berfungsi untuk saya, kecuali yang ini. Terima kasih!!! Catatan, saya harus mengubah file saya v4dan v7file dukungan ke file :20.+.
Azurespot

5
compile('com.android.support:support-v4:19.1.0'){
    force = true
}

Membantu saya, diambil dari sini


4

Anda harus mengkonfigurasi semua dukungan dan pustaka appcompat dengan versi 19. +

Jika rekomendasi meninggalkan perpustakaan dukungan dengan versi 19. + tidak berfungsi, Anda dapat mencoba tip berikutnya di file AndroidManifest Anda.

Pertama tambahkan kode ini:

xmlns:tools="http://schemas.android.com/tools"

Dan kemudian, pada level aplikasi (tidak di dalam aplikasi!)

<uses-sdk tools:node="replace" />

4

Saya membuat semua solusi di sini tanpa hasil, jadi saya mencari di tempat lain dan saya menemukan cara untuk mengelabui IDE, jadi Anda harus meletakkan garis di Mainfest untuk membuat Gradle menggunakan yang berbeda, salah satu yang Anda memakai build.gradle garisnya adalah:

<uses-sdk tools:node="replace" />

hanya itu, dan itu berfungsi.

Saya harap ini membantu.


3
ingatlah untuk menambahkan: xmlns:tools="http://schemas.android.com/tools"di <manifest>tag
seb

3

Anda harus menghapus dari build.gradle compile 'com.android.support:support-v13:+'



1

Bagi saya masalah seperti ini diselesaikan dengan mengubah

minSdkVersion 14

Dalam file build.gladdle dan gunakan file yang ditentukan dalam pesan kesalahan

tapi masalahnya

Manifest merger failed : uses-sdk:minSdkVersion 14 cannot be smaller than version 15 declared in library

Jadi saya berubah dari 14 menjadi 15 di file build.gladdle dan berfungsi

Cobalah.


1

Hanya menargetkan yang diperlukan minSdkVersionyaitu perubahan ke yang dibutuhkan. Dalam kasus saya minSdkVersionadalah 14.

Mengubah untuk minSdkVersion 16memecahkan masalah

compileSdkVersion 29
    defaultConfig {
        applicationId "e.futaaapp"
        minSdkVersion 14
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

compileSdkVersion 29
    defaultConfig {
        applicationId "e.futaaapp"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

0

Jangan lupa, Anda harus mengedit build.gradle di subfolder 'app' proyek Anda, bukan di folder proyek. Saya kehilangan satu hari kerja untuk menyelesaikan masalah dengan versi "L".


0

Coba hapus folder build di proyek Anda dan edit ulang proyek gradle Anda untuk membangunnya kembali. Juga, seperti yang orang lain katakan di posting ini - alih-alih melakukan sesuatu seperti ini:

compile 'com.android.support:support-v4:19.+'

melakukan hal ini:

compile 'com.android.support:support-v4:19.1.0'

0

@Murtuza terima kasih. Jawaban Anda membantu saya untuk menyelesaikan masalah saya tetapi dalam kasus saya

compile 'com.android.support:support-v13:19.+ juga, bersama dengan

compile 'com.android.support:support-v4:19.+' compile 'com.android.support:appcompat-v7:19.+'

dari compile 'com.android.support:support-v4:+' compile 'com.android.support:support-v7:+' compile 'com.android.support:support-v13:+' Hope ini mungkin bisa membantu seseorang


0

Saya memiliki beberapa proyek di mana saya lebih suka menargetkan L.MR1 (SDKv22) dan beberapa proyek di mana saya lebih suka KK (SDKv19). Hasil Anda mungkin berbeda, tetapi ini berhasil untuk saya.

// Targeting L.MR1 (Android 5.1), SDK 22
android {
    compileSdkVersion 22
    buildToolsVersion "22"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 22
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // google support libraries (22)
    compile 'com.android.support:support-v4:22.0.0'
    compile 'com.android.support:appcompat-v7:22.0.0'
    compile 'com.android.support:cardview-v7:21.0.3'
    compile 'com.android.support:recyclerview-v7:21.0.3'
}



// Targeting KK (Android 4.4.x), SDK 19
android {
    compileSdkVersion 19
    buildToolsVersion "19.1"

    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])

    // google libraries (19)
    compile 'com.android.support:support-v4:19.1+'
    compile 'com.android.support:appcompat-v7:19.1+'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
}

0

Di Android Studio 1.1.0: File - Struktur Proyek - Tab Flavours - Pilih Versi Min SDK yang lebih tinggi daripada di Manifest


0

Saya punya solusi kedua:

  1. buka zip https://dl.dropboxusercontent.com/u/16403954/android-21.zipuntuksdk\platforms\
  2. ubah seperti build.gradle

    compileSdkVersion 21
    buildToolsVersion "20.0.0"
    
    defaultConfig {
        applicationId "package.name"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
  3. Menambahkan

    <uses-sdk tools:node="replace" /> 

    terwujud dengan xmlns:tools="schemas.android.com/tools";

  4. Pergi ke sdk\extras\android\m2repository\com\android\support\support-v4\21.0.0-rc1\

unpack dukungan-v4-21.0.0-rc1.aar dan mengedit AndroidManifest.xml seperti

dari

<uses-sdk
        android:minSdkVersion="L"
        android:targetSdkVersion="L" />

untuk

<uses-sdk
        android:minSdkVersion="4"
        android:targetSdkVersion="21" />

PS Anda dapat melakukan ini dengan semua pustaka dukungan yang membutuhkan.


Saya telah mengubah "L" dan memulai ulang android studio tetapi mendapatkan masalah yang sama ketika membangun proyek (ctrl + f9)
Ankur Loriya

0

Satu-satunya hal yang berhasil bagi saya adalah ini:

Di project.properties, saya mengubah:

cordova.system.library.1 = com.android.support: support-v4: + ke cordova.system.library.1 = com.android.support: support-v4: 20. +


0

Anda cukup mengubah Level API Minimum dari Build Settings -> Player Settings -> Other Settings -> Minimum SDK Levelke beberapa versi yang lebih tinggi.


0

Cara terbaik adalah membiarkan Android Studio memperbaiki masalah tersebut.

Saya melakukan di bawah ini, dan itu bekerja dengan baik.

  1. Buka proyek Anda di Android Studio, kesalahan akan muncul, jika ada tautan yang diberikan untuk memperbaikinya klik di atasnya.

  2. Buka kembali proyek Anda di Android Studio, kesalahan akan muncul, akan ada tautan kali ini jika tidak diberikan pada Langkah 1, klik tautan yang diberikan untuk memperbaikinya.

Perhatikan bahwa kedua operasi membutuhkan waktu beberapa menit, tetapi memperbaiki semua masalah.


0

Solusi: Manifes merger gagal aplikasi Atribut @ ppComponentFactory ...

Jika Anda menggunakan pustaka Firebase terbaru & terhebat atau pustaka lainnya, mereka sebenarnya menggunakan AndroidX alih-alih android.support maka Anda mungkin memiliki masalah karena merger Manifes gagal !! Jadi, dalam hal ini, proyek Anda perlu bermigrasi ke AndroidX. Jadi ikuti tautan: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

Atau tonton video ini. https://youtu.be/RgveQ4AY1L8 Terima kasih.


Tautan ke suatu solusi disambut baik, tetapi Anda harus memastikan jawaban Anda juga berguna tanpanya. Lebih baik menambahkan konteks di sekitar tautan dan menjelaskan bagian paling relevan dari tutorial yang Anda tautkan seandainya halaman target tidak tersedia.
Joey

Senang mendengar dari Anda # Joey. Izinkan saya menambahkan beberapa deskripsi tambahan. Terima kasih.
Subhojit Halder
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.