Ошибка слияния манифеста: Атрибут application @appComponentFactory - Androidx

Когда я androidx Gradle с androidx я получаю следующую ошибку. Пожалуйста, помогите мне решить эту проблему.

Сообщение об ошибке: Ошибка слияния манифеста: Атрибут application @appComponentFactory value = (android.support.v4.app.CoreComponentFactory) из [com.android.support:support-compat:28.0.0] AndroidManifest.xml: 22: 18-91 is также присутствует в [androidx.core: core: 1.0.0] AndroidManifest.xml: 22: 18-86 value = (androidx.core.app.CoreComponentFactory).

Manifest:

<?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="com.kanwarpreet.dealmybook">

    <application
        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">

        <activity android:name=".activities.SplashActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".activities.LoginActivity" />
        <activity android:name=".activities.RegisterActivity" />
        <activity
            android:name=".activities.HomeActivity"
            android:label="@string/title_activity_home"
            android:theme="@style/AppTheme.NoActionBar" />
        <activity
            android:name=".activities.BookDetailsActivity"
            android:label="@string/title_activity_book_details"
            android:theme="@style/AppTheme.NoActionBar"/>
        <activity android:name=".activities.AddBookActivity" />
    </application>

</manifest>

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.kanwarpreet.dealmybook"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.google.android.material:material:1.0.0'
    implementation 'com.jakewharton:butterknife:10.1.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
    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

После нескольких часов борьбы я решил эту проблему, добавив в app/build.gradle следующее:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

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

android.enableJetifier=true
android.useAndroidX=true

Изменения в манифесте:

implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'com.google.android.material:material:1.1.0-alpha04'

См. Https://developer.android.com/jetpack/androidx/migrate.

Ответ 2

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

android.enableJetifier=true
android.useAndroidX=true

Ответ 3

Причина этого error-

Потому что после обновления к androidx.core:core обращаются куда-то, когда ваш проект все еще не использует androidx. Таким образом, такие классы, как CoreComponentFactory и многие другие, теперь находятся в двух местах - androidx.core:core и com.android.support:support-compat. Вот почему эта ошибка произошла.

Что такое решение?

Вы должны перейти на AndroidX. Если вы не знаете об AndroidX. Пожалуйста, прочитайте Что такое AndroidX?

Как перенести ваш проект

После Android Studio 3.2 (сентябрь 2018 г.) существует прямая возможность перенести существующий проект в AndroidX. Это преломляет все пакеты автоматически.

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

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

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

image

Новый проект

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

android.enableJetifier=true
android.useAndroidX=true

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

Проверьте @официальную страницу перехода на AndroidX

Ответ 4

Ошибка явно says-

[com.android.support:support-compat:28.0.0] AndroidManifest.xml: 22: 18-91 также присутствует в [androidx.core: core: 1.0.0]

AndroidX - это новейшая библиотека поддержки от Google. Он содержит все предыдущие компоненты из всех старых версий appcompat. НЕ используйте appcompat-v-any number. Вместо этого используйте аналогичный компонент из библиотек AndroidX. Удалите нумерованные библиотеки поддержки из вашего Gradle и вашего кода, куда бы они ни импортировались. Затем синхронизируйте ваш gradle.

Таблицу сходства компонентов можно найти здесь. Также выполните действия, указанные в разделе "Миграция на AndroidX".

Снова, прекратите использовать любые предыдущие версии appcompat с номерами. Там только AndroidX сейчас.

Надеюсь это поможет.

Ответ 5

Одно из предложений, чтобы выяснить точную причину, - открыть файл манифеста, а внизу вы увидите опцию Merge Manifest, где вы увидите точную причину сбоя.

Смотрите изображение ниже

enter image description here