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?

смокинг
источник

Ответы:

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

Кредит Евгению Печанеку

Вишал
источник
1
Хороший вариант, это решение, которое сработало для меня при создании моего приложения с родным скриптом
ded
7
У меня это тоже сработало, спасибо @Vishal. Не могли бы вы просто объяснить, что здесь происходит :)
Исмаил Икбал
3
Обязательно используйте последнюю версию библиотеки поддержки, которая есть на момент написания details.useVersion '27.0.0'. В противном случае у вас не будет последних функций поддержки, таких как устранение избыточного преобразования представления.
Дрю Сурко
9
Пожалуйста, добавьте подробное описание об этом. Он работает, но будет ли он работать для обновленной версии и функций
Ганшьям Найма
1
Если у кого-то еще была ошибка «Невозможно разрешить символ DependencyResolveDetails», я исправил ее, удалив «DependencyResolveDetails» (я где-то читал на StackOverflow о том, что он не нужен с момента его Groovy, поэтому он может динамически работать)
knjk04,
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'
CommonsWare
источник
использование 25.3.1для поддержки библиотек или buildToolsVersion? для buildToolsVersionя получаю ошибкуPackage Unavailable
Тукс-мир
@ tux-world: "использование 25.3.1 для библиотек поддержки или buildToolsVersion?" - для вспомогательных библиотек. См. Мой обновленный ответ.
CommonsWare
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'

Вам также необходимо изменить compileSdkVersion и targetSdkVersion на 25:

compileSdkVersion 25
targetSdkVersion 25
Darush
источник
согласен, ответы выше хороши, но причина ошибки в том, что вы устанавливаете разные версии в своем файле gradle. Просто используйте или 26 или 25 поддержку
Эндрю В.
В моем случае это из-за minSdkVersion.
Fruit
10

Вы можете узнать, какая библиотека зависит от неправильной версии библиотеки поддержки, и исключить ее так:

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

stripe-android в моем случае.

paynd
источник
Как узнать?
Zapnologica
@Zapnologica попытается перечислить зависимости задач Gradle, например stackoverflow.com/questions/21645071/…
paynd 05
6

Я не использую разные версии библиотек и получил ту же ошибку, это произошло после удаления buildToolsVersionв AS RC 1, но добавление tools:node="replace" помогло, просто добавьте это в свой внутренний <application ..../>блок manifest.xml :

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

источник
1
есть ли побочные эффекты при этом? Это все еще работает для вас с новой Android Studio 3?
Сакибой
5

Со мной случилось то же самое. См. Gradle -> Build Gradle -> и убедитесь, что совместимость совпадает в строках compat "app compat" и "support design", у них должна быть одна и та же версия.

Затем, чтобы быть уверенным, что он запустится без проблем, перейдите в Файл -> Структура проекта -> приложение и проверьте свойство вкладки, укажите версию инструментов сборки, она должна быть такой же, как ваша строка компиляции поддержки, на всякий случай я поставлю целевую версию SDK как 25, а также на вкладке Flavors.

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'
        }
    }
  }
}
Марьям Аждари
источник
Ты действительно сделал мой день.
Хамед Джалилиани
2

Ответ принят, но вы также можете определить библиотеки из структуры вашего проекта. Что вы можете сделать:

  1. Прокомментируйте все библиотеки, в которых возникает проблема
  2. Перейти к структуре вашего проекта
  3. Добавьте библиотеки оттуда, и он автоматически синхронизируется, и проблема исчезнет.
  4. Если проблема не устраняется, попробуйте найти в журнале ошибок, какая библиотека требуется после выполнения всех трех вышеуказанных шагов.

Что происходит, так это то, что предопределенные библиотеки отключены, теперь я беру 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 всех вспомогательных библиотек и v15.0.0 всех библиотек Firebase, когда увидел ошибку.

Люси
источник
0

Я обновил старый проект Android для Wear OS. При создании проекта у меня появляется это сообщение об ошибке:

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 для 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'в зависимости решило мою проблему.

Malder
источник
0

Попробуйте удалить метаданные и пересобрать проект.

Анга
источник
-4

вы попробуйте прочитать ссылку это

Ошибка: не удалось выполнить задачу ': app: processDevDebugManifest'. Не удалось объединить манифест: метаданные атрибута#android.support.VERSION@value value = (25.3.0), затем usd ВЕРСИЯ 26.0.0

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

введите описание изображения здесь

Понг Петрунг
источник
а? Что вы пытаетесь сказать? как это помогает?
Сакибой