Android Материал и appcompat Манифест слияние не удалось


223

У меня следующий класс

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.google.android.material:material:1.0.0-rc01'
}

Но когда я хочу создать приложение, я получаю следующий журнал:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0-alpha3] AndroidManifest.xml:22:18-91
    is also present at [androidx.core:core:1.0.0-alpha3] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
    Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:5:5-19:19 to override.

Окей! Перейти к манифесту и сделать это:

<?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="ru.chopcode.myapplication">

    <application
        tools:replace="android:appComponentFactory"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

</manifest>

Тогда я получаю эту ошибку в моем Logcat:

Manifest merger failed with multiple errors, see logs that I have Linked with it

2
Попробуйте удалить следующие строки: реализация 'com.android.support:appcompat-v7:28.0.0-rc01' и реализация 'com.android.support.constraint: компоновка ограничений: 1.1.2'
vcapra1

2
Я думаю, что все материальные пакеты связаны с дизайном Android, проверьте это ...
Маркос Васконселос

Мне нужно это: material.io/design/components/app-bars-bottom.html . Это в Android-дизайн?
Евгений Усов

Вы также можете проверить это: stackoverflow.com/a/54825603/1318946
Пратик Бутани

Новая Android-студия имеет функцию для плавной миграции вашего приложения на AndroidX. перейдите по ссылке ниже. github.com/material-components/material-components-android/…
Рави Джаггарапу

Ответы:


15

Просто измените "rc01" в первой и последней строке внутри зависимостей на "alpha1". Это работает для меня


Найдено несколько файлов с независимым от ОС путем 'META-INF / androidx.core_core.version
Aliton Oliveira,

40
У меня не написано "rc01" в реализации 'com.android.support:appcompat-v7:28.0.0'. Все еще получаю проблему. Пожалуйста, предложите какое-нибудь решение.
Авани Котари

10
Этот ответ должен был быть комментарием к вопросу.
Анант

459

У меня была похожая проблема. Добавлены две строки в gradle.propertiesфайл:

android.useAndroidX=true
android.enableJetifier=true

Эти две строки автоматически разрешили мои конфликты зависимостей между файлами Google и сторонними зависимостями. Вот ссылка, чтобы следовать: https://developer.android.com/topic/libraries/support-library/androidx-overview#new-project


6
android.useAndroidX = true
Фрэнк Фанг

6
после добавления возникает следующая ошибка: `` * Что пошло не так: Выполнение не выполнено для задачи ':act-native-camera: compileGeneralDebugJavaWithJavac'. > Компиляция не удалась; см. вывод ошибки компилятора для деталей. * Попробуйте: Запустите с параметром --stacktrace, чтобы получить трассировку стека. Запустите с параметром --info или --debug, чтобы получить больше вывода журнала. Запустите с --scan, чтобы получить полное представление. `` `
Дилепа Чандима

@PrinceHamza проверьте это, мы нашли решение для этого github.com/facebook/react-native/issues/…
Дилипа Чандима

9
Это должен быть принятый ответ. Это решило проблему.
VishalKale

2
Msgstr "Но я не вижу файл" gradles.properties "!" Да, поэтому в корневой папке приложения в студийном проекте создайте этот файл (без расширения) и добавьте эти строки.
user1010160

145

Я столкнулся с той же ошибкой при попытке добавить библиотеку Kotlin-KTX в мой проект.

Я пытаюсь перейти на AndroidX, и проблема исправлена!

Refactor / Migrate to AndroidX


1
Это работает, но некоторые операторы импорта, которые он генерирует, используют устаревшие имена пакетов. Я должен был исправить кучу из них, просто используя androidx.*имя пакета, которое IDE предложила в качестве исправления.
Эндрю Костер

1
@ Мне этот ответ спас мою жизнь. Могу я купить тебе пива?
girish_vr

@girish_vr Спасибо за предложение :) Я рад, что это сработало, этого достаточно, чтобы заставить меня улыбнуться.
Мете

Я столкнулся с этой проблемой, потому что я вытягивал последнюю версию библиотеки "support-v4" из моего файла build.gradle ... не очень хорошая практика. Если бы я ссылался на конкретную версию библиотеки в своем файле Gradle, я бы никогда не столкнулся с этой проблемой. Кроме того, после небольшого исследования я увидел, что Google рекомендует переключиться на библиотеку AndroidX; Итак, я решил укусить пулю. К счастью, все проблемы, решенные после обновления ... предотвращены, и УРОК узнал о ссылках на gradle.
BluJ IT

104

Причина неудачи

Вы используете библиотеку материалов, которая является частью AndroidX . Если вы не знаете AndroidX, просмотрите этот ответ .

Одно приложение должно использовать либо AndroidX, либо старые библиотеки поддержки Android. Вот почему вы столкнулись с этой проблемой.

Например -

В вашем gradle вы используете

  • com.android.support:appcompat-v7 (Часть старой библиотеки поддержки Android -)
  • com.google.android.material:material(Часть AndroidX) (артефакт сборки AndroidX com.android.support:design)

Решение

Поэтому решение состоит в том, чтобы использовать либо AndroidX, либо старую библиотеку поддержки. Я рекомендую использовать AndroidX, потому что Android не будет обновлять библиотеки поддержки после версии 28.0.0. Смотрите примечания к выпуску библиотеки поддержки.

Просто перейдите на AndroidX. Вот мой подробный ответ для перехода на AndroidX. Я ставлю здесь необходимые шаги из этого ответа.

Перед миграцией настоятельно рекомендуется сделать резервную копию вашего проекта.

Существующий проект

  • Android Studio> Меню Refactor> Миграция в AndroidX ...
  • Он проведет анализ и откроет окно рефрактора внизу. Принять изменения, которые будут сделаны.

образ

Новый проект

Поместите эти флаги в свой gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Проверьте соответствие @ Library для одинакового пакета AndroidX .

Проверьте @ Официальная страница Миграция на AndroidX

Что такое Jetifier?


После этого все еще была ошибка, но этот ответ помог: stackoverflow.com/a/49525685/1972372
Big_Chair

3
Пожалуйста, не забудьте нажать кнопку «Выполнить рефакторинг» в левом нижнем углу после нажатия «Перенос на AndroidX»
SupaHam

88

В моем случае это работает отлично .. Я добавил ниже двух строк кода внутри файла манифеста

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

Кредит идет на этот ответ .

Пример файла манифеста


4
Я не знаю, возникнет ли у меня проблема в приложении позже, но это сработало!
Алитон Оливейра

4
Да, у меня возникла проблема: найдено несколько файлов с независимым от ОС путем 'META-INF / androidx.core_core.version
Aliton Oliveira,

3
тогда я получаю сообщение об ошибке, указывающее, что инструменты не связаны с тегом приложения.
Трэвис Делли

Можете ли вы опубликовать полный logcat?
Мухайминур Рахман

Мне пришлось инструменты к пространству имен: github.com/magus/react-native-facebook-login/issues/…
фильтр Йоханнеса

29

Простые решения - перейти на AndroidX

в gradle.properties, просто добавьте ниже два сценария

android.useAndroidX=true
android.enableJetifier=true

В чем была причина ↓

Все пакеты в AndroidX живут в согласованном пространстве имен, начиная со строки androidx. Пакеты библиотеки поддержки были сопоставлены с соответствующими пакетами androidx. *. Полное отображение всех старых классов и артефактов сборки на новые см. На странице «Рефакторинг пакетов».

Пожалуйста, смотрите страницу рефакторинга пакета


В моем проекте нет такого файла gradle.properties. (Первоначально он был создан в затмении много лет назад, а затем перенесен в андроид студию)
Суджит Манджавана

Ох ... Я не сталкивался с такой ситуацией, я нашел ниже тему, которая может помочь вам stackoverflow.com/a/37389861/6917362 Попробуйте и сделайте комментарий, пожалуйста
EJ

Просто создайте этот файл рядом с основным build.gradle, если он не существует, и синхронизируйте проект.
Федир Цапана

13

Просто удалите зависимость android.support

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

Цитирование из руководства по материалам

Если вы еще не хотите переключаться на новые пакеты androidx и com.google.android.material, вы можете использовать Материальные компоненты через зависимость com.android.support:design:28.0.0-alpha3.

Примечание. Вы не должны одновременно использовать com.android.support и com.google.android.dependencies в своем приложении.

Просто удаление этой зависимости работает нормально

    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'

Вот полный пример зависимостей

    dependencies {
       implementation fileTree(dir: 'libs', include: ['*.jar'])
       implementation 'com.google.android.material:material:1.0.0-beta01'
       implementation 'com.android.support.constraint:constraint-layout:1.1.2'
       testImplementation 'junit:junit:4.12'
       androidTestImplementation 'com.android.support.test:runner:1.0.2'
       androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
   }

1
Это самый точный ответ.
Фран Марсоа

1
@FranMarzoa Это не так. Что происходит, когда библиотека compat импортируется из другой зависимости?
m0skit0

1
@ m0skit0, что тебе придется написать здесь другой вопрос, я думаю ...;)
Fran Marzoa


12

Смотрите это изображение и добавьте эту строку в ваш AndroidManifest.xml Android

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

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


какая строка означает?
Кишор Кумар

@KishoreKumar вы также можете добавить любое имя строки, например appName.
Прашант Арвинд

точнее говоря, whatString должно быть полным именем класса, которое расширяет AppComponentFactory. например, пользовательский класс com.xxx.MyFactory расширяет AppComponentFactory
jiashie

11

Добавьте эти строки внутрь в файле AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
инструменты становятся красными при добавлении. Есть ли другие вещи, которые нужно добавить?
Нацумию

Больше нечего добавить. Одной из причин может быть то, что ваша версия Gradle не соответствует. Можете ли вы показать свой AndroidManifest.xml код файла?
Аджай

Я попытался перейти на androidx, и у меня по-прежнему не удается выполнить задачу ': app: compileDebugJavaWithJavac'. > Компиляция не удалась; см. вывод ошибки компилятора для деталей.
нацумию

Вот мой манифест андроида "android: supportRtl =" true "android: theme =" @ style / AppTheme "tools: replace =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
нацумию

1
Отличное решение, сэкономило мое время.
Умайр Икбал

9

просто добавьте эти две строки кода в свой файл манифеста

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"



6

Эта проблема в основном произошла для старых зависимостей .

Там есть 2 решения:

Первый:

Обновите все old dependenciesи ClassPaths из Project level gradleфайлов.

classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'com.google.gms:google-services:4.2.0'

Второй:

Ваш проект Migrate to AndroidX

Из меню Android Studio -> Refanctor -> Migrate to AndroidX

Спасибо, дайте мне знать, если кто-нибудь поможет от этого ответа.


6

Наконец нашел быстрое и простое решение, добавив две строки в android/build.gradleфайл.

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Пожалуйста, следуйте этому на 100% правильно.


1
Куда вообще добавить это?
Трэвис Делли

Добавьте это в файл android / build.gradle
Маной Алвис,

2
@ManojAlwis, в какой раздел файла build.gradle нам нужно поместить это?
Кевал Лангалия

@KevalLangalia, просто добавьте эти две строки в файл Android -> build.gradle. например: buildscript {{внутр buildToolsVersion = "28.0.3" minSdkVersion = 19 compileSdkVersion = 28 targetSdkVersion = 28 supportLibVersion = "28.0.0" googlePlayServicesVersion = "16 +" firebaseVersion = "17.3.4"}
Манодж Alwis

1
очень полезно ... Спасибо
Vasudev Vyas

6

Все о совместимости версий библиотеки

Я столкнулся с этой странной ошибкой пару 2 часов. Я решил эту ошибку, выполнив следующие действия

передать ваши зависимости build.gradle в

  implementation 'com.google.android.gms:play-services-maps:17.0.0'

в

  implementation 'com.google.android.gms:play-services-maps:15.0.0'

1
Честно говоря, я сделал то же самое, и это сработало, поэтому я думаю, что все дело в совместимости версий библиотек после процесса слияния
Милос

6

Только если вы не хотите использовать AndroidX

Так что в моем случае я использую библиотеку, которая использовала androidx, но я не использую androidx, поэтому, когда я понизил версию этой библиотеки, проблема была решена.

В моем случае:

implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

вышеупомянутая библиотека создает проблему 13. + автоматически получит новую версию библиотеки, которая использует androidx. Поэтому я понизил версию библиотеки до:

implementation 'com.github.turing-tech:MaterialScrollBar:13.2.5'

И проблема была решена.


6
  1. Пожалуйста, перейдите в Refactor-> Migrate-> Migrate to Android X.

  2. Пожалуйста, добавьте это в ваш gradle.propertiesфайл:

    android.enableJetifier=true
    android.useAndroidX=true

И выполнить синхронизацию.


Не могли бы вы объяснить, какова ваша ситуация сейчас?
Гириш BR

Проект, который я унаследовал, полвека. Я пытался реализовать новую аналитику Fabric / Firebase, которую продвигает Google. И эта новая библиотека использует библиотеки совместимости androidx, а мой проект использует AppCompat. Теперь мне пришлось иметь дело с тоннами обновлений зависимостей и прочим. Я остановился, а затем пробовал разные вещи, включая эти команды, и они мне нужны из-за новых вещей в Firebase. После того, как я включил это, я получил тонны ошибок компилятора. Исправлено, но теперь у меня есть ошибки, поступающие из XML-файлов UI .. Так что мне придется отказаться от всего, и попробовать с более старыми версиями.
Мартин Бергер

После еще одного часа ручного исправления пространств имен классов для androidx, похоже, теперь это работает. Проблема в том, что компилятору не удалось обнаружить в xml, например: "android.support.v7.widget.AppCompatSpinner" должно быть "androidx.appcompat.widget.AppCompatSpinner". Этот документ пригодился: developer.android.com/jetpack/androidx/migrate
Мартин Бергер

Надеюсь, что это работает сейчас, дайте мне знать, если что-то пойдет не так. Мы будем работать над этим!
Гириш BR

4

Создайте новый проект и сравните ваши файлы build.gradle и заменили все

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.1'

и другие зависимости с тем же, что и в новом проекте, что-то подобное

implementation 'androidx.appcompat:appcompat:1.0.0-alpha3'

implementation 'androidx.constraintlayout:constraintlayout:1.1.2'

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-alpha1'

androidTestImplementation 'androidx.test:runner:1.1.0-alpha3'

androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha3'

implementation 'androidx.core:core-ktx:1.0.0-alpha3'

А затем исправил импорт, чтобы использовать androidx в файлах kotlin.


Потому что по какой-то причине я не хочу использовать androidx.
Шаби

4

Все, что я сделал, это перешел в опцию «Refactor» в верхнем меню.

Затем выберите «Переход на AndroidX»

Принять, чтобы сохранить проект в виде zip-файла.

Пожалуйста, обновите Android Studio и Gradle, чтобы избежать проблем.


4

1.Добавьте эти коды в конец вашего app / build.gradle:

configurations.all {
   resolutionStrategy.force 'com.android.support:support-v4:28.0.0' 
   // the above lib may be old dependencies version       
    }

2. Модифицированная версия SDK и инструментов до 28:

compileSdkVersion 28
buildToolsVersion '28.0.3'
targetSdkVersion  28

3.В своем файле AndroidManifest.xml вы должны добавить две строки:

<application
    android:name=".YourApplication"
    android:appComponentFactory="AnyStrings"
    tools:replace="android:appComponentFactory"
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:theme="@style/Theme.AppCompat.Light.NoActionBar">

Или просто

  • Перейти к Refactor (Студия -> Меню -> Refactor)
  • Нажмите Мигрировать на AndroidX. это работает
  • это работает.

2
  • Перейти к Refactor ( изображение )
  • Нажмите Мигрировать на AndroidX. это работает
  • это работает.

1
Ссылка на решение приветствуется, но, пожалуйста, убедитесь, что ваш ответ полезен без нее: добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели представление о том, что это такое и почему, а затем процитируйте наиболее релевантную часть страницы, которую вы ' Повторная ссылка на случай, если целевая страница недоступна. Ответы, которые немного больше, чем ссылка, могут быть удалены.
Мэтью

2

Если вы не собираетесь переходить на AndroidX, выполните следующие действия.

  1. В терминале типа gradlew app: зависимости
  2. После того, как зависимости отображаются в окне, нажмите Ctrl + f и введите androidX
  3. Вы найдете все зависимости, которые используют androidx lib для внутреннего использования. Возможно, вам придется понизить версию или использовать альтернативную для этого, чтобы убедиться, что она больше не использует androidX libs для внутреннего использования.

1

У меня была такая же проблема в течение трех дней.

Как будто Android хочет, чтобы мы использовали Kotlin или AndroidX, они покончили с Android.

Но так я это решил.

  • Я перенес свой проект в AndroidX. Это не приводит к ошибкам, связанным с рассматриваемой проблемой, соответственно обновляет файлы. В вашем приложении не нужно изменять имя метода, класса или переменной.

NB. Вы должны использовать последние библиотеки (файл build.grudle) в последней стабильной версии Android Studio 3.4.1.


1

Я не знаю, это правильный ответ или нет, но это сработало для меня

Увеличить свойство Gridle Wrapper

distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip

и построить Gridle для

    classpath 'com.android.tools.build:gradle:3.4.2'

ошибка показа из-за версии.


Я думаю, что строка должна быть androidx.core.app.AppComponentFactory, произвольные строки будут вызывать случайные ошибки несколько раз.,
seyedrezafar

0

Прежде всего, обязательно добавьте эту строку в тег манифеста

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

Затем добавьте инструменты вместо предложенного в Android Studio.


0

Измените proguardFile в build.gradle (Module: app) на следующий

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

вместо того

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

Это сработало для меня


0

Для решения этой проблемы я бы рекомендовал явно определить версию переменных ext в android/build.gradleвашем корневом проекте.

ext {
    googlePlayServicesVersion = "16.1.0" // default: "+"
    firebaseVersion = "15.0.2" // default: "+"

    // Other settings
    compileSdkVersion = <Your compile SDK version> // default: 23
    buildToolsVersion = "<Your build tools version>" // default: "23.0.1"
    targetSdkVersion = <Your target SDK version> // default: 23
    supportLibVersion = "<Your support lib version>" // default: 23.1.1
}

ссылка https://github.com/zo0r/react-native-push-notification/issues/1109#issuecomment-506414941


0

Я также сталкиваюсь с той же проблемой, для вашей андроид-студии, вы просто меняете плагин для Android Gradle версии 3.3.2 и Gradle версии 5.1.1


0

в моем случае я добавить в файл манифеста `

tools:replace="android:appComponentFactory"
android:appComponentFactory="whateverString"

тег приложения, конечно, будет работать

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.