Lorsque je construis Gradle avec androidx
j'obtiens l'erreur suivante. Veuillez m'aider à résoudre ce problème.
Message d'erreur: La fusion du manifeste a échoué: l'attribut application @ appComponentFactory value = (Android.support.v4.app.CoreComponentFactory) de [com.Android.support:support-compat:28.0.0] AndroidManifest.xml: 22: 18-91 is également présent sur [androidx.core: core: 1.0.0] AndroidManifest.xml: 22: 18-86 value = (androidx.core.app.CoreComponentFactory).
Manifeste:
<?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'
}
Après des heures de difficultés, je l'ai résolu en incluant les éléments suivants dans app/build.gradle:
Android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Mettez ces drapeaux dans votre gradle.properties
Android.enableJetifier=true
Android.useAndroidX=true
Changements dans le manifeste:
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'
Voir: https://developer.Android.com/jetpack/androidx/migrate
Mettez ces drapeaux dans votre gradle.properties
Android.enableJetifier=true
Android.useAndroidX=true
Parce qu'après la mise à niveau, androidx.core:core
est accessible quelque part, lorsque votre projet n'utilise toujours pas androidx. Des classes comme CoreComponentFactory
et bien d'autres se trouvent maintenant à deux endroits - androidx.core:core
et com.Android.support:support-compat
. C'est pourquoi cette erreur s'est produite.
Vous devez migrer vers AndroidX. Si vous ne connaissez pas AndroidX. Veuillez lire Qu'est-ce qu'AndroidX ?
Après Android Studio 3.2 (septembre 2018), il existe une option directe pour migrer le projet existant vers AndroidX
. Cela réfracte automatiquement tous les packages.
Avant de migrer, il est fortement recommandé de sauvegarder votre projet.
Projet existant
Nouveau projet
Mettez ces drapeaux dans votre gradle.properties
Android.enableJetifier=true
Android.useAndroidX=true
Vérifiez @ mappages de bibliothèque pour un package AndroidX égal.
Vérifiez @ page officielle de Migrate to AndroidX
L'erreur dit explicitement-
[com.Android.support:support-compat:28.0.0] AndroidManifest.xml: 22: 18-91 est également présent sur [androidx.core: core: 1.0.0]
AndroidX est la dernière bibliothèque d'assistance de Google. Il contient tous les composants précédents de toutes les anciennes versions compatibles avec les applications . N'utilisez PAS de numéro appcompat-v-any . Utilisez plutôt un composant similaire à partir des bibliothèques AndroidX. Supprimez les bibliothèques de support numérotées de votre Gradle et de votre code où qu'il soit importé. Synchronisez ensuite votre gradle.
Le tableau de similarité des composants peut être trouvé ici . Suivez également les étapes mentionnées dans Migration vers AndroidX .
Encore une fois, arrêtez d'utiliser toutes les versions numérotées compatibles avec les applications précédentes. Il n'y a que AndroidX maintenant.
J'espère que cela t'aides.
Paramètres Gradle à l'échelle du projet. IDE (par exemple Android Studio) utilisateurs: paramètres Gradle configurés via le IDE remplacera tous les paramètres spécifiés dans ce fichier. Pour plus de détails sur la configuration de votre environnement de construction, visitez http://www.gradle.org/docs/current/userguide/build_environment .html
Spécifie les arguments JVM utilisés pour le processus démon. Le paramètre est particulièrement utile pour modifier les paramètres de la mémoire
org.gradle.jvmargs=-Xmx1536m
Android.enableJetifier=true
Android.useAndroidX=true
Une fois configuré, Gradle fonctionnera en incubation en mode parallèle. Cette option ne doit être utilisée qu'avec des projets découplés. Plus de détails, visitez http://www.gradle.org/docs/current/userguide/multi_project_builds.html
sec:decoupled_projectsvorg.gradle.parallel=true