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