Type de programme déjà présent: android.support.v4.app.BackStackRecord




build.gradle (7)

J'ai mis à niveau mon Android Studio et j'ai trouvé de nombreux problèmes dans la dernière version.

Bien que de nombreuses questions similaires existent, j'ai vérifié les réponses à toutes et aucune n'a fonctionné pour moi!

Voici l'erreur que je rencontre lors de la compilation du code:

Type de programme déjà présent: android.support.v4.app.BackStackRecord $ Op Message {type = ERREUR, text = Type de programme déjà présent: android.support.v4.app.BackStackRecord $ Op, sources = [fichier source inconnu], outil name = Facultatif.of (D8)}

Voici mon fichier de classement:

projet :

// Top-level build file where you can add configuration options common to 

all sub-projects/modules.

buildscript {

repositories {
    google()
    jcenter()
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.1.0'


    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
    }
 }

 allprojects {
 repositories {
    google()
    jcenter()
    maven {
        url "https://jitpack.io"
          }
     }
}

task clean(type: Delete) {
delete rootProject.buildDir
}

app :

apply plugin: 'com.android.application'

android {
compileSdkVersion 27
defaultConfig {
    applicationId "com.alcantara.bugismart"
    minSdkVersion 15
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner 
"android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
'proguard-rules.pro'
            }
           }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.0.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso- 
    core:3.0.1'
    implementation 'com.github.ViksaaSkool:AwesomeSplash:v1.0.0'
}

Vous pouvez me dire s'il y a quelque chose à ajouter pour comprendre ce que je fais ou ce que je me trompe.


Type de programme déjà présent: android.support.v4.app.BackStackRecord $ Op Message {type = ERREUR, text = Type de programme déjà présent: android.support.v4.app.BackStackRecord $ Op, sources = [fichier source inconnu], outil name = Facultatif.of (D8)}

Le problème est dû à une bibliothèque de support dupliquée. Cette dépendance:

implementation 'com.github.ViksaaSkool:AwesomeSplash:v1.0.0'

utilise l'ancienne version de la bibliothèque de support. Essayez d'exclure la bibliothèque de support si vous l'avez déjà avec:

// support libraries we want to use
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'

// we already have the specific support libraries. So, exclude it
implementation ('com.github.ViksaaSkool:AwesomeSplash:v1.0.0') {    
    exclude group: 'com.android.support'
    exclude module: 'appcompat-v7'
    exclude module: 'support-v4'
}

Vous devez vérifier vos dépendances avec la commande suivante:

./gradlew app:dependencies

Ou bien , vous pouvez toujours remplacer la version des bibliothèques de support en ajoutant les bibliothèques en conflit avec la version exacte souhaitée.

METTRE À JOUR

Il existe une étape complète pour résoudre les erreurs de résolution de dépendance dans la documentation Ajouter des dépendances de construction . Voici les extraits:

Correction des erreurs de résolution de dépendance

Lorsque vous ajoutez plusieurs dépendances à votre projet d'application, ces dépendances directes et transitives peuvent être en conflit. Android Gradle Plugin tente de résoudre ces conflits avec élégance, mais certains conflits peuvent entraîner des erreurs lors de la compilation ou à l'exécution.

Pour vous aider à identifier les dépendances qui contribuent aux erreurs, examinez l'arbre de dépendance de votre application et recherchez les dépendances qui apparaissent plusieurs fois ou dont les versions sont en conflit.

Si vous ne pouvez pas identifier facilement la dépendance en double, essayez d'utiliser l'interface utilisateur d'Android Studio pour rechercher les dépendances incluant la classe en double, comme suit:

  1. Sélectionnez Naviguer > Classe dans la barre de menus.
  2. Dans la boîte de dialogue de recherche contextuelle, assurez-vous que la case en regard de Inclure les éléments non liés au projet est cochée.
  3. Tapez le nom de la classe qui apparaît dans l'erreur de génération.
  4. Inspectez les résultats pour les dépendances qui incluent la classe.

Les sections suivantes décrivent les différents types d’erreurs de résolution de dépendances que vous pouvez rencontrer et comment les corriger.

Correction des erreurs de classe en double

Si une classe apparaît plusieurs fois sur le chemin d'accès aux classes au moment de l'exécution, vous obtenez une erreur similaire à celle-ci:

Program type already present com.example.MyClass

Cette erreur se produit généralement dans l'une des circonstances suivantes:

  • Une dépendance binaire inclut une bibliothèque que votre application inclut également en tant que dépendance directe. Par exemple, votre application déclare une dépendance directe à la bibliothèque A et à la bibliothèque B, mais la bibliothèque A inclut déjà la bibliothèque B dans son binaire.

    • Pour résoudre ce problème , supprimez la bibliothèque B en tant que dépendance directe.
  • Votre application a une dépendance binaire locale et une dépendance binaire distante sur la même bibliothèque.

    • Pour résoudre ce problème , supprimez l'une des dépendances binaires.

Résoudre les conflits entre les chemins de classes

Lorsque Gradle résout le chemin de classe de compilation, il résout d’abord le chemin de classe d’ exécution et utilise le résultat pour déterminer les versions des dépendances à ajouter au chemin de classe de compilation. En d’autres termes, le classpath d’exécution détermine les numéros de version requis pour des dépendances identiques sur les classpath en aval.

Le chemin d'accès aux classes de votre application détermine également les numéros de version requis par Gradle pour la correspondance des dépendances dans le chemin d'accès aux classes d'exécution pour le test APK de l'application. La hiérarchie des classpaths est décrite dans la figure ci-dessous:

Un conflit peut survenir lorsque plusieurs versions de la même dépendance apparaissent sur plusieurs chemins de classes lorsque, par exemple, votre application inclut une version d'une dépendance à l'aide de la configuration de dépendance d' implementation et qu'un module de bibliothèque inclut une version différente de la dépendance à l'aide de la configuration runtimeOnly .

Lors de la résolution des dépendances sur votre chemin d'exécution lors de l'exécution et de la compilation, le plug-in Android Gradle version 3.3.0 et ultérieure tente de résoudre automatiquement certains conflits de versions en aval. Par exemple, si le chemin d'accès aux classes d'exécution comprend Library A version 2.0 et que le chemin d'accès aux classes de compilation inclut Library A version 1.0, le plug-in met automatiquement à jour la dépendance du chemin d'accès aux classes de compilation à Library A version 2.0 pour éviter les erreurs.

Toutefois, si le chemin d'accès aux classes comprend la bibliothèque A version 1.0 et que le chemin d'accès aux compiles inclut la version A de la bibliothèque 2.0, le plug-in ne rétablit pas la dépendance du chemin d'accès aux classes de compilation à la version A de la bibliothèque 1.0 et vous obtenez toujours une erreur similaire à celle-ci:

Conflict with dependency 'com.example.library:some-lib:2.0' in project 'my-library'.
Resolved versions for runtime classpath (1.0) and compile classpath (2.0) differ.

Pour résoudre ce problème, effectuez l'une des opérations suivantes:

  • Incluez la version souhaitée de la dépendance en tant que dépendance api dans votre module de bibliothèque. Autrement dit, seul votre module de bibliothèque déclare la dépendance, mais le module d'application aura également accès à son API, de manière transitoire.
  • Vous pouvez également déclarer la dépendance dans les deux modules, mais vous devez vous assurer que chaque module utilise la même version de la dépendance. Pensez à configurer les propriétés à l' échelle du projet pour vous assurer que les versions de chaque dépendance restent cohérentes dans tout votre projet.

remplacez-vous les dépendances par elle.

implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
    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'

Ajoutez ce code pour classer selon votre "SdkVersion" :

implementation 'com.android.support:support-v4:28.0.0'

Par exemple, mon SDKVersion est 28 alors j'utilise ce code:

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'

Ajoutez ceci dans votre module App build.gradle :

implementation 'com.android.support:support-v4:27.1.1'

Dans mon cas, j'ai converti un très vieux projet Eclipse en Android Studio. Donc, la migration automatique utilisée:

dependencies {
    compile files('libs/android-support-v13.jar')
}

Supprimez ou commentez à la ligne avec cette bibliothèque.

Lorsque j'ai commenté, Gradle script exécuté correctement.


Une alternative à la réponse acceptée consiste à indiquer à gradle de forcer la nouvelle version:

final SUPPORT_LIB_VER = '27.1.1'

configurations.all {
    resolutionStrategy { 
        force "com.android.support:appcompat-v7:${SUPPORT_LIB_VER}"
        force "com.android.support:support-v4:${SUPPORT_LIB_VER}"
    }
}

Cela peut être plus pratique lorsque vous avez plusieurs dépendances.

voir aussi: Réponse à "Comment puis-je forcer Gradle à définir la même version pour deux dépendances?"


multiDexEnabled true ajoute la ligne ci-dessus dans le bloc Android dans gradle-app son travail pour moi ...





build.gradle