Когда я 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'
}
После нескольких часов борьбы я решил эту проблему, добавив в 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'
Поместите эти флаги в свой gradle.properties
android.enableJetifier=true
android.useAndroidX=true
Потому что после обновления, androidx.core:core
доступен где-то, когда ваш проект еще не использует androidx. Таким образом, такие классы, как CoreComponentFactory
и многие другие, теперь находятся в двух местах - androidx.core:core
и com.android.support:support-compat
. Вот почему эта ошибка произошла.
Вы должны перейти на AndroidX. Если вы не знаете об AndroidX. Пожалуйста, прочтите Что такое AndroidX?
После Android Studio 3.2 (сентябрь 2018 г.) существует прямая возможность перенести существующий проект в AndroidX
. Это преломляет все пакеты автоматически.
Перед миграцией настоятельно рекомендуется сделать резервную копию вашего проекта.
Существующий проект
Новый проект
Поместите эти флаги в свой gradle.properties
android.enableJetifier=true
android.useAndroidX=true
Проверьте соответствие @Library для одинакового пакета AndroidX.
Проверьте @Официальную страницу миграции на AndroidX
Ошибка явно 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 сейчас.
Надеюсь это поможет.
Remove the numbered support libraries from your Gradle and your code
не имеет смысла, потому что Migrate to AndroidX
завершен другим процессом.
Одно из предложений, чтобы выяснить точную причину, - открыть файл манифеста, а внизу вы увидите опцию Merge Manifest, где вы увидите точную причину сбоя.
Смотрите изображение ниже