Сбой манифеста: использует-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'. > Не удалось объединить манифест: использует-sdk: minSdkVersion 19 не может быть меньше версии 19, объявленной в библиотеке com.android.support:support-v4:21.0.0-rc1
bobby.dhillon

Я получаю то же исключение minSdkVersion 15 не может быть меньше, чем версия 15. Инструменты сборки SDK были обновлены, поэтому я предполагаю, что это ошибка в Android Studio и новых инструментах сборки
Boardy

1
Кажется, это ошибка: code.google.com/p/android/issues/detail?id=72430 На данный момент исправление состоит в том, чтобы закомментировать строку в maven-metadata.xml
Эмануэль Кана,

Ответы:


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"

(Благодарим Эдди Рингла на / androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ )

Другое Править

Обязательно посмотрите ответ @ murtuza ниже относительно appcompat-v7 и upvote, если это поможет!


3
Как насчет библиотеки, скомпилированной из Maven? Как исключить «старую» зависимость?
Арно

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

3
Обратите внимание, что для использования CardView, RecyclerView и Palette вам также придется изменить свой манифест, чтобы избежать бросков захвата из-за конфликта слияния. Подробности смотрите по этой ссылке: 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 я все равно получил сообщение об ошибке:

Ошибка слияния манифеста: использует-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

  • Повторите то же самое для support-v7


В моем случае мне также пришлось удалить эквивалент appcompat-v7.
eipipuz

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

Решение 1 + 3 спасло мне жизнь :)
Climbatize

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

Я нашел это, читая соответствующий вопрос, который я буду связывать здесь


Спасибо! Проще, чем ставить исключение в каждой зависимости :)
Слой

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

для людей, создающих гибридные приложения с использованием cordova CLI, эта команда поможет:

cordova build android -- --minSdkVersion=15

да, он использует двойные двойные тире, как вы видели.


Это решает актуальную проблему? Нет. Это работает только так, но с cordova run androidэтим не получается.
Ионут Некула

@ Слонут, ты знаешь, в чем проблема?
ProllyGeek

В моем случае проблема в плагине, который я использую, называется cordova-plugin-facebook4. Unistalling это делает cordova run androidработу просто отлично. К сожалению, я нигде не нашел решения этой проблемы. Я вручную пытался добавить minSdkVersionсебя в AndroidManifestно быть перезаписаны. Все еще пытаюсь понять это.
Ионут Некула

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

Я наконец решил это, изменив minSdkверсию на 15in config.xml. Линия: <preference name="android-minSdkVersion" value="14" />. Таким образом, AndroidManifestфайл обновляется также с новой версией.
Ionut Necula

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 »» ... «убедитесь, что у вас есть актуальное значение» Это примерно его размер!
Толстяк

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

Вы должны настроить все библиотеки поддержки и appcompat с версией 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>-tag
SEB


3

Вот новая ошибка, поданная для этого между прочим https://code.google.com/p/android/issues/detail?id=72430

Предполагая, что вы используете репозиторий поддержки, обходной путь - прокомментировать или удалить строку

21.0.0-rc1 в локальном файле со списком репозиториев Maven по адресу /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\

распакуйте support-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» и перезапустил андроид студию, но у
меня возникла та

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 application @ 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.