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

2

Когда я 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'
}
Теги:
android-manifest
androidx

5 ответов

8
Лучший ответ

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

  • 0
    compileOptions решил эту проблему для меня после дня борьбы
  • 0
    Это сработало, но после добавления этих двух строк в тег приложения из манифеста, т. Е. Tools: replace = "android: appComponentFactory" android: appComponentFactory = "androidx"
6

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

android.enableJetifier=true
android.useAndroidX=true
  • 0
    Все еще не помогает ...
  • 0
    Я также получил ту же ошибку, и я применил вышеуказанное решение. ЭТО РАБОТАЕТ ОТЛИЧНО.
1

Причина этого 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...
  • Он проведет анализ и откроет окно рефрактора внизу. Принять изменения, которые будут сделаны.

Изображение 174551

Новый проект

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

android.enableJetifier=true
android.useAndroidX=true

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

Проверьте @Официальную страницу миграции на AndroidX

1

Ошибка явно 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 сейчас.

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

  • 0
    Remove the numbered support libraries from your Gradle and your code не имеет смысла, потому что Migrate to AndroidX завершен другим процессом.
  • 0
    Op упомянул "... когда я собираю Gradle с androidx" Когда вы используете AndroidX, следует использовать все это, иначе будут конфликты схожести с компонентами, существующими в обоих пакетах, которые поддерживают нумерованные и androidx. Вот почему я приложил таблицу сходства.
Показать ещё 3 комментария
0

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

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

Изображение 174551

  • 1
    Это должен быть комментарий, а не ответ.
  • 0
    @MDNaseemAshraf, как вы можете видеть, я тоже добавил изображение, иначе я бы добавил его только в комментарии
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню