【问题标题】:Manifest merger failed : uses-sdk:minSdkVersion 14清单合并失败:uses-sdk:minSdkVersion 14
【发布时间】:2014-08-17 18:11:15
【问题描述】:

由于下载了最新的 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'的执行失败。 > 清单合并失败:uses-sdk:minSdkVersion 19 不能小于库 com.android.support:support-v4:21.0.0-rc1 中声明的版本 19
  • 我遇到了同样的异常 minSdkVersion 15 不能小于版本 15。SDK 构建工具已经更新,所以我猜它是 Android Studio 和新构建工具中的一个错误
  • 这似乎是一个错误:code.google.com/p/android/issues/detail?id=72430 现在的修复是在 maven-metadata.xml 中注释掉一行

标签: android android-studio android-gradle-plugin android-5.0-lollipop


【解决方案1】:

注意:这已更新以反映 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:+ 选择了候选版本 (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 的回答,如果有帮助,请点赞!

【讨论】:

  • 从 Maven 编译的库怎么样?如何排除“旧”依赖?
  • @Arnaud compile("blah:blah:bla") {排除组:'com.android.support',模块:'support-v4'}
  • 请注意,要使用 CardView、RecyclerView 和 Palette,您还必须更改 Manifest 以避免合并冲突 gradle 抛出。详情见此链接:reddit.com/r/androiddev/comments/297xli/…
  • 从不建议人们在依赖版本中使用 +。始终指定您要使用的库的确切版本(或在您编写代码时可用)。即使是 20.+ 也很糟糕。如果您依赖的库遵循此 BAD 做法,请考虑排除其依赖项并提供您自己的该依赖项版本。这使您的构建可随时重现。请改进您的答案购买删除您在依赖版本中使用 + 的建议。
  • @DanieleSegato 说了什么。永远不要推荐动态版本控制。这是不好的做法。
【解决方案2】:

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

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

只改了support-v4版本后,还是报错:

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

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

【讨论】:

  • 好收获!我的 v7 也没有这个版本。
  • 支持 v13 也是一样的)
  • 我的 appcompat_v7 也不匹配,我的android{} 中的buildToolsVersion '20.0.0' 和我的dependencies {} 中的compile 'com.android.support:appcompat-v7:20.0+' 不一样,所以我使它们相同(如此处所示)。
  • 在以后的版本中使用 + 标识符是一种不好的做法。指定确切的版本。我建议将 'com.android.support:appcompat-v7:19.+' 更新为这个 'com.android.support:appcompat-v7:19.0.0' 或者哪个是最新的。如果您仍然遇到问题尝试从 SDK 管理器更新支持库
【解决方案3】:

解决方案 1:

将 uses-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:

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

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

解决方案 3:

  • 在您的文件&lt;android-sdk&gt;/extras/android/m2repository/com/android/support-v4/maven-metadata.xml 中删除/评论&lt;version&gt;21.0.0-rc1&lt;/version&gt;

  • 对 support-v7 重复同样的操作

【讨论】:

  • 就我而言,我还必须删除 appcompat-v7 等效项。
  • 是的,不提供解决方案 2 作为选项。正确的依赖管理(使用正确的版本)或使用解决策略是正确的解决方案。编辑 maven repo 只会延迟问题,直到发布新的 repo。
  • 解决方案 1 + 3 救了我的命 :)
  • 第一个选项有效!我建议您添加一些关于为什么要这样做的详细信息。
【解决方案4】:
<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 文件中

【讨论】:

【解决方案5】:

传递依赖仍然会出现问题。 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

【讨论】:

  • 谢谢!比在每个依赖项中添加排除更容易:)
【解决方案6】:

在 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.+'.

【讨论】:

    【解决方案7】:

    添加到上面的正确答案,由于库嵌套,问题仍然可能发生。在这种情况下,请尝试以下示例:

    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】:

      对于使用 cordova CLI 构建混合应用程序的人,此命令将有所帮助:

      cordova build android -- --minSdkVersion=15
      

      是的,如您所见,它使用双双破折号。

      【讨论】:

      • 这能解决实际问题吗?不。它只能这样工作,但使用 cordova run android 会失败。
      • @lonut 你知道实际的问题是什么吗?
      • 就我而言,问题是我正在使用的一个名为cordova-plugin-facebook4的插件。卸载它使cordova run android 工作得很好。不幸的是,我在任何地方都没有找到任何解决方案。我手动尝试在AndroidManifest 中添加minSdkVersion,但被覆盖。还在想办法。
      • @lonut 我在我正在开发的某个应用程序中使用相同的插件,如果我能提供帮助,请告诉我。但是,您需要查看 build.gradle 文件,也许如果您提供额外的信息我可以提供帮助。
      • 我终于通过将config.xml中的minSdk版本更改为15解决了这个问题。线路:&lt;preference name="android-minSdkVersion" value="14" /&gt;。这样AndroidManifest 文件也将更新为新版本。
      【解决方案9】:

      我也遇到了同样的问题,更改以下内容对我有帮助:

      来自:

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

      到:

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

      【讨论】:

      • 这不是代码。您需要在 build.gradle 文件中进行此更改。
      【解决方案10】:

      对于在 Android Studio 测试版中遇到此问题的人,接受的答案并没有解决我的问题。导入从 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'”......“确保你拥有最新的价值”它的大小!
      【解决方案11】:

      我通过在 build.gradle 中编辑下面的行解决了这个问题,它可以工作了! :-)

      添加版本20.+'

      来自

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

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

      【讨论】:

      • 我不敢相信。上面的其他答案都不适合我,除了这个。谢谢!!!请注意,我必须将我的 v4v7 支持文件都更改为 :20.+
      【解决方案12】:
      compile('com.android.support:support-v4:19.1.0'){
          force = true
      }
      

      帮助我,取自here

      【讨论】:

        【解决方案13】:

        您必须使用版本 19.+ 配置所有支持和 appcompat 库

        如果使用 19.+ 版本保留支持库的建议不起作用,您可以尝试 AndroidManifest 文件中的下一个提示。

        首先添加这段代码:

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

        然后,在应用程序级别(不是在应用程序内部!)

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

        【讨论】:

          【解决方案14】:

          我在这里做了所有的解决方案都没有结果,所以我在另一个地方寻找,我找到了一种欺骗 IDE 的方法,所以你必须在 Mainfest 中放置一行以使 Gradle 使用不同的,你放在 build.gradle 上的那一行是:

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

          只要它,它就可以工作。

          希望对你有帮助。

          【讨论】:

          • 记得在&lt;manifest&gt;-tag中添加:xmlns:tools="http://schemas.android.com/tools"
          【解决方案15】:

          你需要从 build.gradle 中删除 compile 'com.android.support:support-v13:+'

          【讨论】:

            【解决方案16】:

            这是针对此 btw https://code.google.com/p/android/issues/detail?id=72430 提交的新错误

            假设您使用的是支持存储库,解决方法是注释或删除该行

            21.0.0-rc1 在 /extras/android/m2repository/com/android/support-v4/maven-metadata.xml 的本地 Maven 存储库列表文件中

            【讨论】:

              【解决方案17】:

              对我来说,这样的问题是通过更改来解决的

              minSdkVersion 14
              

              在 build.gladdle 文件中并使用错误消息中指定的那个

              但问题是

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

              所以我在 build.gladdle 文件中从 14 更改为 15 并且它可以工作

              试一试。

              【讨论】:

                【解决方案18】:

                只需定位所需的minSdkVersion,即更改为所需的 在我的情况下,minSdkVersion14

                更改为 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"
                    }
                

                【讨论】:

                  【解决方案19】:

                  不要忘记,您应该在项目的“app”子文件夹中编辑 build.gradle,而不是在项目文件夹中。为了解决“L”版本的问题,我浪费了一个工作日。

                  【讨论】:

                    【解决方案20】:

                    尝试删除您项目中的 build 文件夹并重新同步您的 gradle 项目以重建它。此外,就像其他人在这篇文章中所说的那样 - 而不是做这样的事情:

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

                    这样做:

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

                    【讨论】:

                      【解决方案21】:

                      谢谢@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:+' 希望这可能对某人有所帮助

                      【讨论】:

                        【解决方案22】:

                        我有一些我更喜欢针对 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:+'
                        }
                        

                        【讨论】:

                          【解决方案23】:

                          在 Android Studio 1.1.0 中:文件 - 项目结构 - 选项卡风格 - 选择高于清单中的 Min SDK 版本

                          【讨论】:

                            【解决方案24】:

                            我有第二种解决方案:

                            1. 解压https://dl.dropboxusercontent.com/u/16403954/android-21.zipsdk\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" />
                            

                            附:您可以使用所有需要的支持库来执行此操作。

                            【讨论】:

                            • 我更改了“L”并重新启动了 android studio 但在构建项目时遇到同样的问题 (ctrl+f9)
                            【解决方案25】:

                            唯一对我有用的是:

                            在 project.properties 中,我改变了:

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

                            【讨论】:

                              【解决方案26】:

                              您只需将最低 API 级别从 Build Settings -&gt; Player Settings -&gt; Other Settings -&gt; Minimum SDK Level 更改为更高版本。

                              【讨论】:

                                【解决方案27】:

                                最好的办法是让 Android Studio 解决这个问题。

                                我做了以下,效果很好。

                                1. 在Android Studio中打开你的项目,会弹出错误,如果有给出修复的链接点击它。

                                2. 在Android Studio中重新打开你的项目,会弹出错误,如果步骤1中没有给出链接,这次会有链接,点击给定的链接修复它。

                                请注意,这两项操作都需要几分钟的时间,但已解决所有问题。

                                【讨论】:

                                  【解决方案28】:

                                  解决方案:Manifest merge failed 属性 application@ppComponentFactory ...

                                  如果您使用任何最新最好的 Firebase 库或任何其他库,这些库实际上使用的是 AndroidX 而不是 android.support,那么您可能会遇到清单合并失败的问题!因此,在这种情况下,您的项目需要迁移到 AndroidX。所以点击链接: https://firebase.google.com/support/release-notes/android#update_-_june_17_2019

                                  或观看此视频。 https://youtu.be/RgveQ4AY1L8 谢谢。

                                  【讨论】:

                                  • 欢迎提供解决方案的链接,但您应该确保您的答案在没有它的情况下也有用。最好在链接周围添加上下文并描述您链接到的教程中最相关的部分,以防目标页面不可用。
                                  • 很高兴收到你的来信#Joey。让我添加一些额外的描述。谢谢。
                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2015-01-27
                                  • 2020-01-01
                                  • 2019-11-26
                                  • 2014-09-03
                                  • 2017-12-18
                                  • 2017-11-13
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多