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

Кредит Eugen Pechanec


1
Nice один, це рішення , яке працює для мене при створенні мого nativescript додатки
DED

7
Це спрацювало і для мене, дякую @Vishal. Чи можете ви просто пояснити, що тут відбувається :)
Ісмаїл Ікбал

3
Обов’язково використовуйте останню версію бібліотеки підтримки, яка на момент написання цього є details.useVersion '27.0.0'. Інакше у вас не буде найновіших функцій підтримки, як-от усунення надлишкового мовлення.
Дрю Шурко

9
Будь ласка, додайте біт опису про це. Його робота працює, але чи працюватиме оновлена ​​версія та функції
Ghanshyam Nayma

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'

використання 25.3.1для бібліотек підтримки або buildToolsVersion? бо buildToolsVersionя отримую помилкуPackage Unavailable
tux-world

@ 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. Спробуйте очистити проект (Build> Clean Project) і подивіться, чи проблема не зникне. Якщо ні, вам потрібно буде відстежити, що відбувається 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

погодьтеся, відповіді вище хороші, але причина помилки в тому, що ви встановлюєте різні версії у своєму файлі gradle. Просто скористайтеся або підтримкою 26 або 25
Андрій В.

У моєму випадку це через minSdkVersion.
Фрукти

10

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

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

stripe-android в моєму випадку


Як дізнаєтесь?
Zapnologica

@Zapnologica намагаються залежності списку завдань Gradle, як stackoverflow.com/questions/21645071 / ...
paynd

6

Я не використовую різні версії бібліотек і отримав однакову помилку, це сталося після видалення buildToolsVersionв AS RC 1, але додавання tools:node="replace" зробило трюк, просто додайте це у свій маніфест.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?
Сакібой

5

Зі мною трапляється те саме. Дивіться на Gradle -> Build Gradle -> і переконайтеся, що відповідність сумісності в обох рядках "comp compat" і "design 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та додайте його у файл Manifest

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

  • І додайте для перегляду в >> 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. Якщо проблема не зникає, спробуйте переглянути з журналу помилок, яку бібліотеку вона вимагає, виконавши всі вищевказані 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 всіх бібліотек підтримки та v15.0.0 всіх бібліотек Firebase, коли побачив помилку.


0

Я оновив старий проект для Android для ОС Wear. Я отримав це повідомлення про помилку під час складання проекту:

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


0

Спробуйте видалити метадані та відновіть проект.


-4

ви намагаєтеся прочитати посилання на це

Помилка: Не вдалося виконати завдання ": app: processDevDebugManifest". Невдале злиття маніфесту: атрибут meta-data#android.support.VERSION@value value = (25.3.0), тоді usd VERSION 26.0.0

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

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


так? Що ви намагаєтеся сказати? як це допомагає?
Сакібой
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.