【问题标题】:Android: Getting "Manifest merger failed" error after updating to a new version of gradleAndroid:更新到新版本的 gradle 后出现“清单合并失败”错误
【发布时间】:2017-09-03 00:00:50
【问题描述】:

接受将项目更新到新版本的 gradle 后,我收到此错误:

Error:Execution failed for task ':app:processDebugManifest'.
Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-alpha1) from [com.android.support:cardview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38
    is also present at [com.android.support:design:25.3.1] AndroidManifest.xml:27:9-31 value=(25.3.1).
    Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:22:5-24:41 to override.

我该如何解决这个问题? 这是我的应用程序的build.gradle 文件:

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.sample.bookReader"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    ...
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:multidex:+'
    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support:design:25+'
    compile 'com.jakewharton:butterknife:8.2.1'
    apt 'com.jakewharton:butterknife-compiler:8.2.1'
    ...
}

这是项目的build.gradle

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.1'
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://www.jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

如何在保持通过更新 gradle 版本所做的更改的同时修复此错误?

【问题讨论】:

    标签: android


    【解决方案1】:

    您正在使用多个版本的 Android 支持库:

    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
    compile 'com.android.support:cardview-v7:26.0.0-alpha1'
    compile 'com.android.support:design:25+'
    

    两个是26.0.0-alpha1,一个是25+

    选择一个具体版本并将其用于所有这三个版本。由于您的compileSdkVersion 不是O,因此对所有这三个库都使用25.3.1,结果是:

    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    

    【讨论】:

    • 使用25.3.1 支持库或buildToolsVersion?对于buildToolsVersion,我收到错误Package Unavailable
    • @tux-world:“使用 25.3.1 作为支持库还是 buildToolsVersion?” -- 用于支持库。请参阅我的更新答案。
    • 我测试了,但我的问题没有解决,哪个版本必须在compileSdkVersion 上?
    • 我收到这条消息All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes). Found versions 26.0.0-alpha1, 25.3.1. Examples include com.android.support:support-compat:26.0.0-alpha1 and com.android.support:animated-vector-drawable:25.3.1
    • @tux-world:您的build.gradle 中的任何内容都不应再引用26.0.0-alpha1。尝试清理您的项目(构建 > 清理项目)并查看问题是否消失。如果没有,您将需要跟踪 com.android.support:support-compat:26.0.0-alpha1 中的内容,例如通过运行 Gradle 依赖关系报告。
    【解决方案2】:
    • 将您的支持库更新到最新版本

    • 打开Manifest File,添加到Manifest File中

    • &lt;uses-sdk tools:overrideLibrary="android.support.v17.leanback"/&gt;

    • 并在>>build.gradle Module app中添加recyclerview:

    • compile 'com.android.support:recyclerview-v7:25.3.1'

    • 然后点击:Sync Now

    【讨论】:

      【解决方案3】:

      我将所有支持库版本都更改为 25.3.1 并且工作起来非常棒:

      compile 'com.android.support:appcompat-v7:25.3.1'
      compile 'com.android.support:design:25.3.1'
      

      您还需要将 compileSdkVersiontargetSdkVersion 更改为 25:

      compileSdkVersion 25
      targetSdkVersion 25
      

      【讨论】:

      • 同意,上面的答案很好,但错误的原因是您在 gradle 文件中设置了不同的版本。只需使用 or 26 或 25 支持
      • 在我的情况下是因为minSdkVersion
      【解决方案4】:

      把它放在你的应用模块 build.gradle 的末尾:

      configurations.all {
          resolutionStrategy.eachDependency { DependencyResolveDetails details ->
              def requested = details.requested
              if (requested.group == 'com.android.support') {
                  if (!requested.name.startsWith("multidex")) {
                      details.useVersion '25.3.0'
                  }
              }
          }
      }
      

      感谢Eugen Pechanec

      【讨论】:

      • 很好,这是在构建我的 nativescript 应用程序时对我有用的解决方案
      • 这对我也有用,谢谢@Vishal。你能解释一下这里发生了什么吗:)
      • 确保使用最新版本的支持库,在撰写本文时它是details.useVersion '27.0.0'。否则您将无法获得最新的支持功能,例如消除多余的视图投射。
      • 请添加相关描述。它可以工作,但它是否适用于更新的版本和功能
      • 如果其他人遇到“无法解析符号 DependencyResolveDetails”错误,我通过删除“DependencyResolveDetails”来修复它(我在 StackOverflow 上的某处读到自它的 Groovy 以来不需要它,因此它可以动态解决)
      【解决方案5】:

      答案已被接受,但您还可以做的一件事是从您的项目结构中定义库。你可以做的是:

      1. 评论所有出现问题的库
      2. 转到您的项目结构
      3. 从那里添加库,它会自动同步,问题就会消失。
      4. 如果问题仍然存在,请尝试在执行上述所有 3 个步骤后从错误日志中查看它需要什么库。

      现在发生的情况是预定义库现在关闭了,我正在使用 appcompat:26.0.0-alpha1,当您添加新内容并尝试解决它时,它会使用旧版本的东西用旧东西。当您从项目结构中添加它时,它会添加相同的内容,但会使用新的东西来解决它。您的问题将得到解决。

      【讨论】:

        【解决方案6】:

        你试试看这个链接

        错误:任务“:app:processDevDebugManifest”执行失败。清单合并失败:属性 meta-data#android.support.VERSION@value value=(25.3.0) then usd VERSION 26.0.0

        https://medium.com/@PongPloyAppDev/error-execution-failed-for-task-app-processdevdebugmanifest-48576be751

        【讨论】:

        • 嗯?你想说什么?这有什么帮助?
        【解决方案7】:

        这也发生在我身上。请参阅 Gradle -> Build Gradle -> 并确保编译“app compat”和“support design”行中的兼容性匹配,它们应该具有相同的版本。

        然后为了确定它会毫无问题地启动,转到 File -> Project Structure ->app 并检查选项卡属性构建工具版本,它应该与您的支持编译行相同,就在如果我将目标 SDK 版本设置为 25 以及选项卡 Flavours。

        dependencies {
            compile fileTree(include: ['*.jar'], dir: 'libs')
            androidTestCompile('com.android.support.test.espresso:espresso-
           core:2.2.2', {
                exclude group: 'com.android.support', module: 'support-annotations'
            })
            *compile 'com.android.support:appcompat-v7:25.3.1'*
            compile 'com.android.support.constraint:constraint-layout:1.0.2'
            testCompile 'junit:junit:4.12'
            *compile 'com.android.support:design:25.3.1'*
        }
        

        这就是我所做的和工作的。祝你好运!

        【讨论】:

          【解决方案8】:

          我没有使用不同版本的库并得到相同的错误,它发生在 AS RC 1 中删除 buildToolsVersion 之后,但添加 tools:node="replace" 就可以了,只需将其添加到 @987654323 内的 manifest.xml @块:

          <meta-data 
           tools:node="replace"
           android:name="com.google.android.gms.version"
           android:value="@integer/google_play_services_version" />
          

          【讨论】:

          • 这样做有什么副作用吗?新的 Android Studio 3 是否仍然适合您?
          【解决方案9】:

          你可以找出哪个库依赖于错误版本的支持库,并像这样排除它:

          compile ('com.stripe:stripe-android:5.1.1') {
              exclude group: 'com.android.support'
            }
          

          stripe-android 就我而言。

          【讨论】:

          【解决方案10】:

          我的错误是:

          Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
              is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
              Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.
          

          我的解决方案是在我的项目 Gradle 文件中,我需要提升我的 com.google.gms:google-services 版本。

          我使用的是 3.1.1 版本:

          classpath 'com.google.gms:google-services:3.1.1
          

          在我将它升级到版本 3.2.1 后错误解决了:

          classpath 'com.google.gms:google-services:3.2.1
          

          当我看到错误时,我刚刚将所有库升级到了最新版本,包括所有支持库的 v27.1.1 和所有 Firebase 库的 v15.0.0。

          【讨论】:

            【解决方案11】:

            我通过将它放在我的应用程序模块 build.gradle 的末尾来解决这个问题:

                configurations.all {
                 resolutionStrategy.eachDependency { DependencyResolveDetails details ->
                def requested = details.requested
                if (requested.group == 'com.android.support') {
                    if (!requested.name.startsWith("multidex")) {
                        details.useVersion '26.0.0'
                    }
                }
              }
            }
            

            【讨论】:

            • 你真的让我很开心。
            【解决方案12】:

            我为 Wear OS 更新了旧的 android 项目。我在构建项目时收到此错误消息:

            Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:percent:26.0.2] AndroidManifest.xml:25:13-35
            is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0).
            Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:23:9-25:38 to override.
            

            我的 build.gradle for Wear 应用程序包含以下依赖项:

            dependencies {
            implementation fileTree(dir: 'libs', include: ['*.jar'])
            implementation 'com.google.android.support:wearable:2.4.0'
            implementation 'com.google.android.gms:play-services-wearable:16.0.1'
            compileOnly 'com.google.android.wearable:wearable:2.4.0'}
            

            解决方案

            implementation 'com.android.support:support-v4:28.0.0' 添加到依赖项中解决了我的问题。

            【讨论】:

              【解决方案13】:

              尝试删除元数据并重建项目。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-09-13
                • 2019-03-30
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多