清单合并失败:uses-sdk:minSdkVersion 14。

237

自从下载了最新的 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

我遇到了相同的错误:Error:Execution failed for task ':app:processDebugManifest'。
Manifest合并失败:uses-sdk:minSdkVersion 19不能小于库com.android.support:support-v4:21.0.0-rc1中声明的版本19。
- bobby.dhillon
我遇到了相同的异常,即minSdkVersion 15不能小于版本15。SDK构建工具已经更新,所以我猜这是Android Studio中的一个错误和新的Build tools相关。 - Boardy
1
看起来是一个bug: code.google.com/p/android/issues/detail?id=72430 暂时的解决方法是在maven-metadata.xml文件中注释掉一行代码。 - Emanuel Canha
可能是Manifest合并失败:uses-sdk:minSdkVersion 8不能更小的重复问题。 - Marian Paździoch
28个回答

312

注意:此处已更新以反映API 21,棒棒糖的发布。请务必下载最新的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:+选择了发行候选版(21.0.0-rc1)最新的L发布版,这显然需要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 上的EddieRingle - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/

另一个编辑

请务必查看@murtuza下面关于appcompat-v7的回答,如果有帮助,请点赞!


3
从Maven编译的库该怎么办?如何排除“旧”的依赖项? - Arnaud
4
@Arnaud compile("blah:blah:bla") {exclude group: 'com.android.support', module: 'support-v4'} @Arnaud 编译("blah:blah:bla") {排除组别: 'com.android.support',模块: 'support-v4'} - AndroidGecko
3
请注意,如果您想使用CardView、RecyclerView和Palette这些库,您还需要修改Manifest文件以避免与gradle合并时冲突。 有关详细信息,请参阅此链接:http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/ - Michel
3
永远不要建议使用“+”符号作为依赖版本号。始终明确指定您想要使用的库的确切版本(或在编写代码时可用的版本)。即使是20.+也是不好的。如果您所依赖的库遵循这种不良做法,请考虑排除其依赖项并提供自己版本的该依赖项。这将使您的构建在任何时候都能被复现。请改进您的答案,去掉建议使用“+”符号作为依赖版本号的内容。 - Daniele Segato
1
@loeschg,这些库只在21.0.0-rc1中可用,所以你应该放进去。当我们更新到rc2或最终版本时,你需要手动更新它,但这比从未更新、忘记它并在我们发布22-rc1时被击中要好,因为它会破坏项目。 - Xavier Ducrohet
显示剩余7条评论

69

另外,如果您正在导入appcompat-v7库,请确保在其末尾标记版本号,如下所示:

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

仅更改支持库版本后,我仍然收到以下错误:

清单合并失败:uses-sdk:minSdkVersion 15 不能小于库 com.android.support:support-v4:21.0.0-rc1 中声明的版本 L

这有点令人困惑,因为看起来 v4 仍然是问题所在,但实际上限制 appcompat v7 版本解决了问题。


好的发现!我的所有v7版本都没有安装。 - RoundSparrow hilltx
并且对于支持v13的相同事情 - Defuera
1
我也有一个appcompat_v7的不匹配问题,我的android{}中的buildToolsVersion '20.0.0'dependencies {}中的compile 'com.android.support:appcompat-v7:20.0+'不一致,所以我将它们设置为相同的版本(如此处所示)。 - Azurespot
1
使用 + 标识符来表示未来版本是一种不好的做法。请指定确切的版本。我建议将 'com.android.support:appcompat-v7:19.+' 更新为 'com.android.support:appcompat-v7:19.0.0' 或最新版本。如果仍然遇到问题,请尝试从 SDK 管理器更新支持库。 - sud007

56

解决方案 1:

uses-sdk 更改为 <uses-sdk tools:node="replace" />,并在 AndroidManifest.xml 中添加 xmlns:tools="http://schemas.android.com/tools"

 <?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 merger。

解决方案2:

  • build.gradle 中将compile 'com.android.support:support-v4:+' 改为 compile 'com.android.support:support-v4:20.+'。这将防止gradle使用需要L版本的 v4:21.0.0

  • 但是,如果您的任何外部依赖项使用相同版本,则可能必须等待它们更新。

解决方案3:

  • 从文件 <android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml 中删除/注释掉<version>21.0.0-rc1</version>

  • 对于support-v7也重复此操作。


在我的情况下,我还必须删除appcompat-v7的等效部分。 - eipipuz
2
是的,不要将解决方案2作为选项提供。正确的依赖管理(使用正确的版本)或使用解析策略是正确的解决方案。编辑Maven仓库只会将问题推迟到发布新仓库之前。 - Xavier Ducrohet
解决方案1 + 3救了我的命 :) - Climbatize
2
第一个选项可行!我建议您添加一些细节,说明为什么要这样做。 - Tejasvi Hegde

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

不再起作用。

uses-sdk更改为

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

在AndroidManifest.xml文件中添加
xmlns:tools="http://schemas.android.com/tools"


请参考此处的详细说明:http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger - IgorGanapolsky
谢谢@userM1433372,点赞救了我的一天 :) - Ravi Vaniya

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

我在阅读相应问题时发现了这个,我会在这里链接:here


谢谢!比在每个依赖项中都加上排除更容易 :) - Sloy

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

8
在build.gradle文件中,默认情况下是compile 'com.android.support:support-v4:+',因此当您构建gradle项目时,它会考虑com.android.support:support-v4:21.0.0-rc1,因为最近发布了L开发者预览版。
在以下行中进行更改即可解决问题。 修改为:
compile 'com.android.support:support-v4:+' 

to

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

同样地,当使用v7-appcompat支持库时,请从以下内容进行更改: compile 'com.android.support:appcompat-v7:+' 更改为:
compile 'com.android.support:appcompat-v7:20.+'.

7

对于使用 Cordova CLI 构建混合应用的人,这个命令会起到帮助作用:

cordova build android -- --minSdkVersion=15

是的,就像您看到的那样,它使用双重短划线。


这是否解决了实际的问题?不,它只是像这样工作,但是使用“cordova run android”会失败。 - Ionut Necula
@lonut 你知道实际问题是什么吗? - ProllyGeek
在我的情况下,问题出现在我使用的一个插件,名为 cordova-plugin-facebook4 上。卸载它使得 cordova run android 可以正常工作。不幸的是我无法在任何地方找到解决方案。我手动尝试在 AndroidManifest 中添加 minSdkVersion,但它被覆盖了。仍在努力寻找解决方法。 - Ionut Necula
@lonut 我正在一些应用程序中使用相同的插件,如果需要帮助,请告诉我。但是您需要查看 build.gradle 文件,也许如果您提供额外的信息,我可以帮忙。 - ProllyGeek
我最终通过在“config.xml”中将“minSdk”版本更改为“15”来解决了这个问题。这行代码是:<preference name="android-minSdkVersion" value="14" />。这样,AndroidManifest文件也会被更新到新版本。 - Ionut Necula

6
我也遇到了同样的问题,更改以下内容帮助了我:
从:
dependencies {
    compile 'com.android.support:support-v4:+'

to:

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

你需要在 build.gradle 文件中进行以下更改。 - min2bro

6

对于在 Android Studio beta 中遇到此问题的人,接受的答案没有解决我的问题。我从 GitHub 下载了一个项目并导入时,在我的 app 的 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
}

注意:对于某些库和项目,您可能还需要下载比Android Studio中当前可用的api级别更低的版本才能正常工作。

这确实是一个根本性的问题:“无论何处看到'com.android.support:support'” …… “确保您有最新的值”。 就是这样! - Fattie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接