Помилка злиття Android Матеріал та програма "Маніфест програми"


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: constraint-layout: 1.1.2'
vcapra1

2
Я думаю, що всі пакунки з матеріалами входять в дизайн Android, перевірте це ...
Marcos Vasconcelos

Мені потрібно це: material.io/design/components/app-bars-bottom.html . Це в андроїд-дизайн?
Евгеній Усов

Ви можете перевірити цей теж: stackoverflow.com/a/54825603/1318946
Pratik Butani

У новій андроїд-студії є можливість безперешкодно переміщувати ваше додаток до 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". Проблему все-таки отримують. Підкажіть будь-яке рішення.
avani kothari

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 = вірно
Френк Фанг

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

@PrinceHamza перевірте це, ми знайшли рішення для цього github.com/facebook/react-native/isissue/…
Dileepa Chandima

9
Це має бути прийнятою відповіддю. Це вирішило проблему.
VishalKale

2
"Але я не бачу" gradles.properties file "!". Так, у кореневій папці програми в проекті студії створіть цей файл (без розширення) і додайте ці рядки.
користувач1010160

145

Я зіткнувся з такою ж помилкою, коли намагаюся додати бібліотеку Kotlin-KTX до свого проекту.

Я намагаюся міграцію AndroidX, і проблема виправлена!

Рефактор / перехід на AndroidX


1
Це працює, але деякі імпортні заяви, які він створює, використовують застарілі назви пакетів. Мені довелося виправити купу їх, лише використовуючи androidx.*ту назву пакета, яку IDE запропонував як виправлення.
Андрій Костер

1
@Mete ця відповідь врятувала мені життя. Чи можу я придбати вам пиво?
girish_vr

@girish_vr Дякую за пропозицію :) Я радий, що це спрацювало, цього достатньо, щоб змусити мене посміхнутися.
Мете

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

104

Причина невдачі

Ви використовуєте бібліотеку матеріалів, яка є частиною AndroidX . Якщо ви не знаєте AndroidX, перегляньте цю відповідь .

Один додаток повинен використовувати або AndroidX, або старі бібліотеки підтримки Android. Ось чому ви зіткнулися з цим питанням.

Наприклад -

У своєму градусі ви використовуєте

  • 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 ...
  • Він проаналізує і відкриє вікно Refractor внизу. Прийміть зміни, які потрібно зробити.

зображення

Новий проект

Покладіть ці прапори у своє gradle.properties

android.enableJetifier=true
android.useAndroidX=true

Перевірте @ Бібліотечні відображення на рівний пакет 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
Алітон Олівейра,

3
то я отримую помилку, вказуючи, що інструменти не пов'язані з тегом програми.
Тревіс Деллі

Чи можете ви розмістити повний логін?
Muhaiminur Rahman

Мені довелося інструментувати до простору імен: github.com/magus/react-native-facebook-login/isissue/…
Johannes Filter

29

Прості рішення - перехід на AndroidX

в gradle.properties, просто додайте нижче двох сценаріїв

android.useAndroidX=true
android.enableJetifier=true

Що було причиною ↓

Всі пакети в AndroidX живуть у послідовному просторі імен, починаючи з рядка androidx. Пакети бібліотеки підтримки були відображені у відповідні пакети androidx. *. Повне відображення всіх старих класів та створення артефактів до нових див. На сторінці Package Refactoring.

Будь ласка, перегляньте сторінку "Рефакторинг пакетів"


У моєму проекті немає такого файлу gradle.properties. (Спочатку створений у затемнення років тому, а пізніше перейшов до андроїд-студії)
Sujith Manjavana

Ой ... Я не стикався з такою ситуацією, я знайшов нижче тему, яка може допомогти вам stackoverflow.com/a/37389861/6917362 Спробуйте зробити коментар, будь ласка
EJ Chathuranga

Просто створіть цей файл біля головного build.gradle, якщо він не існує, і синхронізуйте проект.
Федір Цапана

13

Просто видаліть залежність від android.support

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

Цитування з матеріальних рекомендацій

Якщо ви ще не хочете переходити на нові пакети androidx та com.google.android.material, ви можете використовувати Material Components через com.android.support:design:28.0.0-alpha3 залежність.

Примітка. Не слід одночасно використовувати додатки com.android.support та com.google.android.de у вашому додатку.

Просто усунення цієї залежності працює чудово

    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
Це найточніша відповідь.
Fran Marzoa

1
@FranMarzoa Це не так. Що відбувається, коли бібліотека компатів імпортується з іншої залежності?
m0skit0

1
@ m0skit0, що вам доведеться написати тут інше запитання, я думаю ...;)
Fran Marzoa


12

Дивіться це зображення та додайте цей рядок у своєму Android AndroidManifest.xml

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

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


що б не означало рядок?
Kishore Kumar

@KishoreKumar Ви також можете додати будь-яке ім'я рядка, наприклад appName.
Прашант Арвінд

Якщо бути точним, whatString має бути ім'ям повного класу, який розширює AppComponentFactory. Наприклад, призначений для користувача клас com.xxx.MyFactory розширює AppComponentFactory
jiashie

11

Додайте ці рядки всередину до файлу AndroidManifest.xml.

tools:replace="android:appComponentFactory"

android:appComponentFactory="whateverString"

1
інструменти стають червоними при додаванні. чи потрібно додати ще щось?
natsumiyu

Більше нічого додати. Можливо, одна з причин не відповідає версії ur gradle. Чи можете ви показати ур-код файлу AndroidManifest.xml?
Аджай

Я спробував перейти на androidx, і у мене все ще не вдалося виконати завдання ": app: compileDebugJavaWithJavac". > Компіляція не вдалася; див. детальну інформацію про вихід помилки компілятора.
natsumiyu

Ось мій маніфест android <application android: enableBackup = "true" android: icon = "@ mipmap / ic_launcher" android: label = "@ string / app_name" android: roundIcon = "@ mipmap / ic_launcher" android: usesCleartextTraffic = "true "android: supportsRtl =" true "android: theme =" @ style / AppTheme "інструменти: заміна =" android: appComponentFactory "android: appComponentFactory =" @ string / texthere ">
natsumiyu

1
Чудове рішення, врятувало мій час.
Умаїр Ікбал

9

просто додайте ці два рядки коду до файлу Manifest

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

8

Виконайте такі дії:

  • Перейдіть на Refactor і натисніть кнопку Перемістити на AndroidX
  • Клацніть Do Refactor

Це не буде робити весь рефакторинг :(
Mohsin


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 -> Refanctor -> Migrate to AndroidX

Дякую, дайте мені знати, якщо хтось допоможе у цій відповіді.


6

Нарешті знайшов швидке та просте рішення, додавши у android/build.gradleфайл два рядки .

googlePlayServicesVersion = "16.+"

firebaseVersion = "17.6.0"

Дотримуйтесь цього 100% правильно.


1
Куди навіть додати це?
Тревіс Делі

Додайте це у файл android / build.gradle
Manoj Alwis

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 Віас

6

Все про сумісність бібліотечних версій

Я стикався з цією дивною помилкою дві години. Я усунув цю помилку, виконавши ці кроки

повісити свої залежності 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
Чесно кажучи, я зробив те саме, і це спрацювало, тож я здогадуюсь про все про сумісність версій бібліотеки після об'єднання процесів
Milos

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

І виконайте синхронізацію.


Можете пояснити, будь ласка, яка у вас ситуація зараз?
Girish BR

Проекту, який я успадкував, це півтора десятиліття. Я намагався реалізувати нову аналітику Fabric / Firebase, яку Google підштовхує. І ця нова бібліотека використовує бібліотеки сумісності Android, і мій проект використовує AppCompat. Тепер мені довелося розібратися з тоннами оновлень залежності та ін. Я зупинився, а потім спробував різні речі, включаючи ці команди, і мені вони потрібні через нові речі Firebase. Після того, як я ввімкнув це, у мене з’явилося багато помилок компілятора. Виправлено це, але тепер у мене є помилки, що надходять із файлів ui xml. Отже, мені доведеться відмовитися від усього, і спробувати зі старими версіями.
Мартін Бергер

Після ще однієї години ручного фіксації просторів імен класів на androidx, здається, це працює і зараз. Проблема в тому, що компілятор не міг виявити в xml, що, наприклад: "android.support.v7.widget.AppCompatSpinner" повинен бути "androidx.appcompat.widget.AppCompatSpinner". Цей документ
Мартін Бергер

Сподіваюся, це працює зараз, дайте мені знати, якщо щось піде не так. Ми будемо працювати над цим!
Girish 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.
shaby

4

Все, що я зробив, - це перейти до параметра "Рефактор" у верхньому меню.

Потім виберіть "Переміститись на AndroidX"

Прийміть, щоб зберегти проект у вигляді поштового файлу.

Оновіть Android Studio, а також Gradle, щоб не виникало проблем.


4

1.Додайте ці коди до кінця програми / 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">

Або просто

  • Перейдіть до Рефактора (Студія -> Меню -> Рефактор)
  • Клацніть Перемістити на AndroidX. це працює
  • це працює.

2
  • Перейдіть до Refactor ( Зображення) )
  • Клацніть Перемістити на AndroidX. це працює
  • це працює.

1
Посилання на рішення вітається, але, будь ласка, переконайтеся, що ваша відповідь корисна без неї: додайте контекст навколо посилання, щоб ваші колеги користувачі мали уявлення про те, що це таке і чому воно є, а потім наведіть найбільш релевантну частину сторінки, яку ви " повторне посилання на випадок, якщо цільова сторінка недоступна. Відповіді, які є трохи більше ніж посилання, можуть бути видалені.
Метью

2

Якщо ви не маєте наміру перейти на AndroidX, виконайте наведені нижче дії

  1. У термінальному додатку gradlew: залежності
  2. Після відображення залежностей у вікні натисніть Ctrl + f і введіть androidX
  3. Ви знайдете всі залежності, які внутрішньо використовують liroid androidx, можливо, вам доведеться зменшити його або використовувати альтернативу для того, щоб переконатися, що він більше не використовує androidX libs внутрішньо.

1

Я мав цю саму проблему три дні.

Це так, як андроїд хоче, щоб ми або використовували Kotlin, або AndroidX, вони забирають Android.

Але це я вирішив.

  • Я перемістив свій проект на AndroidX. Це не приносить жодних помилок, пов'язаних із цією проблемою, вона оновлює файли відповідно. У вашій програмі жодних методів, назв класу чи змінної не потрібно змінювати.

Примітка. Ви повинні використовувати останню бібліотеку (файл build.grudle) в останній стабільній версії андроїд-студії 3.4.1


1

Я не знаю, це правильна відповідь чи ні, але це спрацювало на мене

Збільшення властивості обшивки сітки

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

і побудувати сітку до

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

її помилка показу через версію.


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

0

Перш за все, обов'язково додайте цей рядок у тег маніфесту

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

Потім додайте інструменти, які замінять запропонований в студії Android


0

Змініть proguardFile у build.gradle (Модуль: додаток) на таке

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/isissue/1109#issuecomment-506414941


0

Я також стикаюся з тією ж проблемою, що і для вашої андроїд-студії ви просто поміняєте плагін Android and 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.