Android:更新至新版本的Gradle后,出现“清单合并失败”错误


108

接受将项目更新为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版本所做的更改?

Answers:


212

将其放在应用程序模块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'
            }
        }
    }
}

感谢欧根Pechanec


1
尼斯之一,这是对我建设我nativescript的应用程序时工作的解决方案
DED

7
谢谢@Vishal,这确实对我也有用。您能解释一下这里发生的事情吗:)
Ismail Iqbal

3
确保使用最新版本的支持库,在撰写本文时为details.useVersion '27.0.0'。否则,您将没有最新的支持功能,例如消除多余的视图投射。
Drew Szurko '17

9
请添加有关它的位描述。它可以正常工作,但可以使用更新的版本和功能
Ghanshyam Nayma

1
如果其他任何人都遇到“无法解析符号DependencyResolveDetails”错误,我通过删除“ DependencyResolveDetails”来解决(我在StackOverflow上读到自Groovy以来就不需要它的信息,因此它可以动态地解决)
knjk04 '19

90

您正在使用多个版本的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

@ tux-world:“是否将25.3.1用于支持库或buildToolsVersion?” -用于支持库。看到我更新的答案。
CommonsWare'Apr 7'17

1
我测试了一下,但是我的问题没有解决,必须在哪个版本上compileSdkVersion
tux-world

我收到此消息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

1
@ tux-world:您的所有内容build.gradle都不再引用26.0.0-alpha1。尝试清理项目(“构建”>“清理项目”),然后查看问题是否消失。如果没有,您将需要跟踪引入的内容com.android.support:support-compat:26.0.0-alpha1,例如通过运行Gradle依赖性报告。
CommonsWare

18

我将所有支持库版本都更改为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文件中设置了不同的版本。只需使用或26或25的支持
Andrew V.

就我而言是因为minSdkVersion
水果


6

我没有使用不同版本的库,并且遇到了相同的错误,这是buildToolsVersion在AS RC 1中删除后发生的,但是添加tools:node="replace" 了窍门,只需将其添加到您的manifest.xml中<application ..../>

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

1
这样做有什么副作用吗?新的Android Studio 3仍对您有用吗?
Sakiboy

5

这件事对我来说也是一样。请参阅Gradle-> Build Gradle->并确保兼容性在“ app compat”和“ support design”两行中均匹配,它们应具有相同的版本。

然后要超级确定,它将毫无问题地启动,请转到“文件”->“项目结构”->“应用”,然后检查选项卡中的“构建工具”版本,它应该与您的支持编译行相同,以防万一我放了风味选项卡上的目标SDK版本也为25。

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

那就是我所做的工作。祝好运!


3
  • 将您的支持库更新到最新版本

  • 打开Manifest File,并将其添加到清单文件中

  • <uses-sdk tools:overrideLibrary="android.support.v17.leanback"/>

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

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

  • 然后点击: Sync Now


3

我将其放在我的应用程序模块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'
        }
    }
  }
}

你真的让我开心。
Hamed Jaliliani19年

2

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

  1. 注释所有将要出现问题的库
  2. 转到您的项目结构
  3. 从那里添加库,它将自动同步,问题解决了。
  4. 如果问题仍然存在,请按照上述所有3个步骤尝试从错误日志中查找所需的库。

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


0

对我来说,错误是:

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。


0

我已经为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.

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

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'到依赖项解决了我的问题。



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.