Помилка злиття маніфесту: use-sdk: minSdkVersion 14


233

З моменту завантаження останнього SDK та встановлення Android Studio, мій проект не вдається створити. Я отримую таке повідомлення:

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

У мене така ж помилка Помилка: Не вдалося виконати завдання ": app: processDebugManifest". > Помилка злиття маніфесту: use-sdk: minSdkVersion 19 не може бути меншою, ніж версія 19, оголошена в бібліотеці com.android.support:support-v4:21.0.0-rc1
bobby.dhillon

Я отримую те саме виняток, що minSdkVersion 15 не може бути меншим за версію 15. Інструменти SDK Build було оновлено, тому я думаю, що його помилка в Android Studio та нових інструментах
побудови

1
Здається, це помилка: code.google.com/p/android/isissue/detail?id=72430 На даний момент виправлено коментар до рядка в maven-metadata.xml
Емануель Канга

не вдалося повторити злиття Manifest:
use

Відповіді:


312

Примітка. Це оновлено, щоб відобразити випуск API 21, Lollipop. Обов’язково завантажте останню версію SDK.

В одному з моїх модулів у build.gradle було таке:

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

Змінивши це на

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

виправили проблему.

Переконайтеся, що ви не займаєтесь загальним включенням com.android.support:support-v4:+будь-якої бібліотеки підтримки (будь-якої іншої програми v7, v13, appcompat тощо) або будь-якої іншої програми.

Я припускаю, що проблема полягає в тому, що він v4:+підбирає останню версію L кандидата (21.0.0-rc1), який очевидно вимагає L SDK.

Редагувати:

Якщо вам потрібно використовувати нові представлення даних (CardView, RecyclerView і Palette), слід працювати наступним чином:

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"

(Кредит EddieRingle на / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Ще одна редакція

Не забудьте переглянути відповідь @ murtuza нижче щодо appcompat-v7 та upvote, якщо це допоможе!


3
А як щодо бібліотеки, складеної з Мейвена? Як виключити "стару" залежність?
Арно

4
@Arnaud компіляція ("bla: blah: bla") {виключити групу: 'com.android.support', модуль: 'support-v4'}
AndroidGecko

3
Зауважте, що для використання CardView, RecyclerView і Palette, вам також доведеться змінити свій Manifest, щоб уникнути конфлікту злиття gradle. Детальніше дивіться за цим посиланням: reddit.com/r/androiddev/comments/297xli/…
Мішель

3
Ніколи і ніколи не пропонуйте людям використовувати + у версії залежності. ЗАВЖДИ вкажіть точну версію бібліотеки, яку ви хочете використовувати (або вона доступна під час написання коду). Навіть 20. + це погано. І якщо бібліотека, від якої ви залежите, дотримуйтесь цієї практики BAD, подумайте про виключення її залежності та надання власної версії цієї залежності. Це робить вашу збірку відтворюваною в будь-який час. Удосконаліть свою відповідь на покупку, видаливши пропозицію використовувати + у версії залежності.
Даніеле Сегато

1
Що сказав @DanieleSegato. Не рекомендувати динамічну версію ніколи. Це погані практики.
Ксав'є Дюкрохет

69

Крім того, якщо ви імпортуєте бібліотеку appcompat-v7, переконайтесь, що позначте номер версії в кінці її так:

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

Після зміни лише версії support-v4 я все-таки отримав помилку:

Помилка злиття маніфесту: use-sdk: minSdkVersion 15 не може бути меншою, ніж версія L, оголошена в бібліотеці com.android.support:support-v4:21.0.0-rc1

Це було трохи заплутано, оскільки, схоже, проблема v4 все ще залишається проблемою, але насправді обмеження версії appcompat v7 виправило проблему.


Гарний улов! жоден мій v7 не мав версії на них.
RoundSparrow hilltx

а також те саме для підтримки v13)
Defuera

1
У мене була невідповідність appcompat_v7, і buildToolsVersion '20.0.0'в моїх, android{}і compile 'com.android.support:appcompat-v7:20.0+'в моїх dependencies {}була не однакова, тому я зробив їх такими ж (як показано тут).
Azurespot

1
Неправильно використовувати + ідентифікатор для майбутніх версій. Вкажіть точну версію. Я пропоную оновити 'com.android.support:appcompat-v7:19.+' до цього 'com.android.support:appcompat-v7:19.0.0' або найновішого. Якщо у вас все ще виникають проблеми, спробуйте оновити бібліотеку підтримки від менеджера SDK.
sud007

55

Рішення 1:

Зміна використання-SDK для <uses-sdk tools:node="replace" />і додати xmlns:tools="http://schemas.android.com/tools" вAndroidManifest.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>

Переконайтеся, що ви використовуєте gradle 0,11 і вище, щоб використовувати злиття Manifest.

Рішення 2:

  • Зміна compile 'com.android.support:support-v4:+'до compile 'com.android.support:support-v4:20.+'в build.gradle. Це запобіжить використанню gradle, v4:21.0.0що вимагає версії L.

  • Однак якщо будь-яка з ваших зовнішніх залежностей використовує те саме. Вам, мабуть, доведеться чекати, коли вони оновлять те саме.

Рішення 3:

  • Видаліть / коментуйте <version>21.0.0-rc1</version>у своєму файлі<android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml

  • Повторіть те саме для підтримки-v7


У моєму випадку мені також довелося видалити еквівалент appcompat-v7.
eipipuz

2
Так, не пропонуйте рішення 2 як варіант. Правильне управління залежностями (використання правильної версії) або використання стратегії вирішення - це правильне рішення. Редагування Maven repo лише затягує проблему, поки не буде випущено нове репо.
Ксав'є Дюкрохет

Рішення 1 + 3 врятувало мені життя :)
Кліматись

2
Перший варіант працює! Я б запропонував вам додати деякі деталі щодо того, чому це потрібно робити.
Техасві Хегде

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

Більше не працює.

змінити uses-sdkна

<uses-sdk tools:overrideLibrary="com.packagename.of.libary.with.conflict" />

і додайте
xmlns:tools="http://schemas.android.com/tools" у файл AndroidManifest.xml



Дякуємо @ userM1433372, підтриманий за збереження мого дня :)
Раві Ванія

11

Проблема все ще виникає при транзитивних залежностях. Gradle пропонує спосіб змусити використовувати певну версію залежності.

Наприклад, ви можете додати щось на кшталт:

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

до вашого build.gradle.

Якщо ви хочете дізнатися більше про стратегії вирішення проблем gradle, перегляньте цей посібник http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html

Це я виявив, читаючи відповідний випуск, на який я посилаюсь тут


Дякую! Простіше, ніж ставити виключення в кожній залежності :)
Sloy

8

У файлі build.gradle він був за замовчуванням компілювати 'com.android.support:support-v4:+', тож при створенні проекту gradle врахує, com.android.support:support-v4:21.0.0-rc1 через недавню версію попереднього перегляду для розробників L.

Внесіть зміни в наступному рядку, і це вирішить проблему. Зміна

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

до

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

Аналогічно, використовуючи бібліотеку підтримки v7-appcompat, внесіть зміни

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

до

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

8

Якщо додати правильні відповіді вище, проблема все-таки може виникнути через вкладення бібліотеки. У цьому випадку спробуйте як приклад нижче:

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

для людей, що створюють гібридні програми, що використовують CLOV-модулі cordova, ця команда допоможе:

cordova build android -- --minSdkVersion=15

так, він використовує подвійні подвійні тире, як ви це бачили.


Чи вирішує це фактичну проблему? Ні. Це працює лише так, але з cordova run androidцим виходить з ладу.
Іонут Некула

@lonut Чи знаєте ви, що таке проблема?
ProllyGeek

У моєму випадку проблема полягає в плагіні, який я використовую cordova-plugin-facebook4. Видалення його робить cordova run androidроботу просто чудовою. На жаль, я ніде не знайшов рішення для цього. Я вручну намагався додати minSdkVersionсебе в, AndroidManifestале перезаписується. Ще намагаюся розібратися в цьому.
Іонут Некула

@lonut Я використовую той самий плагін у якомусь додатку, над яким я працюю, дайте мені знати, чи можу я допомогти. Однак вам потрібно переглянути файл build.gradle, можливо, якщо ви надасте додаткову інформацію, я можу допомогти.
ProllyGeek

В кінці кінців я вирішив, змінивши minSdkверсію 15в config.xml. Лінія: <preference name="android-minSdkVersion" value="14" />. Таким чином AndroidManifestфайл оновлюється також новою версією.
Іонут Некула

6

У мене також був той самий випуск, і наступні зміни допомогли мені:

від:

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

до:

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

це, не код. вам потрібно внести цю зміну у файл build.gradle.
min2bro

6

Для людей, які стикаються з цією проблемою в бета-версії Android Studio , прийнята відповідь не вирішила моєї проблеми. Імпортуючи проект, завантажений з GitHub, у моєму файлі build.gradle програми було вказано таке, що дає помилку:

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

Але в моїй зовнішній папці бібліотеки є ця папка:

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

Вищезгадану проблему я вирішив, змінивши залежність на:

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

Примітка. Можливо, вам також знадобиться завантажити рівень api нижче, ніж зараз доступний в Android Studio, щоб деякі бібліотеки та проекти працювали належним чином.


Це, здається, є основним питанням: "де б ви не бачили" com.android.support:support "" ... ", переконайтеся, що у вас є актуальне значення" Це приблизно розмір!
Fattie

5

Я вирішив проблему, відредагувавши рядок нижче в build.gradle, і він працює! :-)

додавання версії 20. + '

З

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

До

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

1
Я не можу повірити. Жодна з інших відповідей вище для мене не працювала, крім цієї. Дякую!!! Зауважте, мені довелося змінити і мої, v4і v7файли підтримки на :20.+.
Azurespot


4

Ви повинні налаштувати всі бібліотеки підтримки та бібліотеки додатків з версією 19. +

Якщо рекомендація залишити бібліотеку підтримки з версією 19. + не працює, ви можете спробувати наступну пораду у вашому файлі AndroidManifest.

Спочатку додайте цей код:

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

А потім на рівні програми (не всередині програми!)

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

4

Я приймаю всі рішення тут безрезультатно, тому я шукаю в іншому місці, і я знайшов спосіб обдурити IDE, тому вам доведеться поставити рядок у Mainfest, щоб змусити Gradle використовувати інший, той, що ви ставите на build.gradle рядок:

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

просто воно, і воно працює.

Я сподіваюся, що це допомагає.


3
не забудьте додати: xmlns:tools="http://schemas.android.com/tools"в <manifest>-таг
seb


3

Ось нова помилка, подана для цієї версії https://code.google.com/p/android/isissue/detail?id=72430

Припускаючи, що ви використовуєте сховище підтримки, вирішення полягає в тому, щоб коментувати або видаляти рядок

21.0.0-rc1 у локальному файлі списку Maven repo за адресою /extras/android/m2repository/com/android/support-v4/maven-metadata.xml


1

Для мене таке питання вирішується шляхом зміни

minSdkVersion 14

У файлі build.gladdle використовуйте той, який вказаний у повідомленні про помилку

але питання було

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

Тому я змінив з 14 на 15 у файлі build.gladdle, і він працює

спробувати.


1

Просто націліть на потрібне, minSdkVersionтобто змініть на потрібне. У моєму випадку minSdkVersionбуло 14.

Зміна minSdkVersion 16вирішеного питання

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

Не забувайте, ви повинні відредагувати build.gradle в підпапці "app" свого проекту, а не в папці проекту. Я втратив робочий день, намагаючись вирішити проблему з версією "L".


0

Спробуйте видалити папки (и) збірки у своєму проекті та повторно синхронізуйте проект gradle, щоб відновити його. Крім того, як це казали інші у цій публікації - замість того, щоб робити щось подібне:

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

зробити це:

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

0

Дякую @Murtuza Ваша відповідь допомогла мені вирішити свою проблему, але в моєму випадку

compile 'com.android.support:support-v13:19.+ також, поряд з

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

від compile 'com.android.support:support-v4:+' compile 'com.android.support:support-v7:+' compile 'com.android.support:support-v13:+' Надії, це може допомогти комусь


0

У мене є кілька проектів, де я віддаю перевагу націленості на L.MR1 (SDKv22) та деякі проекти, де я віддаю перевагу KK (SDKv19). Ваш результат може бути різним, але це працювало для мене.

// 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

В Android Studio 1.1.0: Файл - Структура проекту - Смаки вкладок - Виберіть мінімальну версію SDK, яка вище, ніж у Manifest


0

У мене є друге рішення:

  1. розпакувати https://dl.dropboxusercontent.com/u/16403954/android-21.zipдоsdk\platforms\
  2. змінити build.gradle як

    compileSdkVersion 21
    buildToolsVersion "20.0.0"
    
    defaultConfig {
        applicationId "package.name"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
  3. додати

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

    в Маніфесті з xmlns:tools="schemas.android.com/tools";

  4. Йти до sdk\extras\android\m2repository\com\android\support\support-v4\21.0.0-rc1\

розпакуйте підтримку-v4-21.0.0-rc1.aar та відредагуйте AndroidManifest.xml як

з

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

до

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

PS Ви можете це зробити з усіма необхідними бібліотеками підтримки.


Я змінив "L" і перезапустив андроїд-студію, але отримую те саме питання, коли будувати проект (ctrl + f9)
Ankur Loriya

0

Єдине, що для мене працювало:

У project.properties я змінив:

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


0

Ви просто зміните Мінімальний рівень API з Build Settings -> Player Settings -> Other Settings -> Minimum SDK Levelна більш високу версію.


0

Найкращий спосіб - дозволити Android Studio вирішити проблему.

Я зробив нижче, і це спрацювало чудово.

  1. Відкрийте свій проект в Android Studio, помилки з'являться, якщо на ньому буде посилання, яке виправляєте, натисніть на нього.

  2. Відкрийте свій проект в Android Studio, помилки будуть спливаючими, на цей раз буде посилання, якщо це не вказано в Крок 1, натисніть на дане посилання, щоб виправити це.

Зауважте, що обидві операції займали кілька хвилин, але вирішили всі проблеми.


0

Рішення: Не вдалося злити маніфест програми Attribute @ ppComponentFactory ...

Якщо ви використовуєте будь-які новітні та найбільші бібліотеки Firebase або будь-які інші бібліотеки, вони фактично використовують AndroidX замість android.support, то у вас може виникнути проблема, оскільки злиття Manifest не вдалося !! Отже, у цьому випадку ваш проект повинен перейти на AndroidX. Тому перейдіть за посиланням: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

Або подивіться це відео. https://youtu.be/RgveQ4AY1L8 Дякую


Посилання на рішення вітається, але ви повинні переконатися, що ваша відповідь також корисна без нього. Краще додати контекст навколо посилання та описати найбільш релевантну частину підручника, до якого ви посилаєтесь, у випадку, якщо цільова сторінка недоступна.
Джої

Приємно почути від вас # Джої. Дозвольте додати додатковий опис. Дякую.
Subhojit Halder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.