web-dev-qa-db-fra.com

Erreur: Type de programme déjà présent: Android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat

Après la mise à niveau vers Android Studio 3.1, j'ai commencé à recevoir une erreur de suivi lors de la construction. Le projet utilise multidex et DX est activé par défaut, comme vous le remarquerez dans l’erreur. J'ai essayé de vérifier le graphique de dépendance pour comprendre ce qui se passait, mais je n'ai pour l'instant aucune idée. Fait intéressant, cela n'échoue que sur ma machine. J'ai tout nettoyé, y compris réinstaller etc. mais rien n'a fonctionné. 

Quelqu'un a eu le même problème et comment l'avez-vous résolu? Ou n'importe quelle direction que je peux jeter un coup d'oeil?

AGPBI: {
    "kind":"error",
    "text":"Program type already present: Android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat",
    "sources":[{}],
    "tool":"D8"
}

C'est la tâche qui échoue:

transformDexArchiveWithExternalLibsDexMergerForDebug

J'ai vérifié des problèmes similaires et il semble que des problèmes aléatoires résolvent leur problème, je ne sais pas quelle est la véritable cause.

10
Orhan Obut

J'ai réussi à déterminer la cause en utilisant les étapes suivantes. Le cas d'utilisation peut être différent pour chaque problème, c'est donc le moyen de déterminer la cause première.

  • Aller au studio Android
  • Naviguer -> Classe
  • Vérifier include non-project classes
  • Copier coller le chemin d'accès complet à la classe avec le nom du package. Android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat 
  • Vous devriez pouvoir voir où il est utilisé. Très probablement, vous devrez peut-être l'enlever de l'un d'eux.

Dans mon cas, le problème était que la bibliothèque ViewPagerIndicator téléchargeait la bibliothèque de support sous forme de fichier jar. Le supprimer a résolu le problème.

10
Orhan Obut

J'ai ma solution en changeant ceci:

implementation 'com.Android.support:appcompat-v7:27.0.0'

à

implementation 'com.Android.support:appcompat-v7:26.0.0'

ça marche pour moi.

10
mas bro

Pour ma solution (je ne sais pas que cela fonctionnera pour vous):

Tout d'abord, j'ai suivi la solution @Orhan Obut's:

Recherche de classes dupliquées dans votre projet

J'ai trouvé qu'il y a plus d'un fichier de classe dans différentes bibliothèques.

Ensuite, je place l'annotation ignore au-dessus de ma dépendance au support dans le fichier build.gradle (dossier d'application) de mon module de projet:

 //noinspection GradleCompatible
    implementation 'com.Android.support:appcompat-v7:28.0.0'

J'ai réalisé que l'ignorance n'était pas une solution, car l'erreur ne disparaissait pas, même après la reconstruction complète et la suppression/suppression du cache pour le projet.

Voir: Infographie: 11 erreurs Android les plus courantes et leur correction

J'ai donc exploré plus, et découvert ce lien:

Android - Comprendre et dominer les dépendances de gradle

Il suggère des moyens de résoudre les conflits. Par conséquent, je mets ceci sur mon grade juste au-dessus des déclarations de dépendances:

configurations.all {exclude group: 'com.Android.support', module: 'support-v4'}

Depuis lors, lorsque je recherche des classes en double pour celle-ci en utilisant la solution @Orhan Obut's ci-dessus, je ne trouve qu'une seule entrée dans le résultat. Cela signifiait qu'il n'y avait pas de doublons.

En outre, il sera préférable de migrer vers AndroidX avec le dernier SDK et de créer des outils. Assurez-vous que vous n’avez plus de dépendances de support plus anciennes.

Bonne codage :-)

7
Abhinav Saxena

Pour l'option facile, il suffit d'ajouter

configurations.all {exclude group: 'com.Android.support', module: 'support-v4'}

avant les dépendances dans le module d'application build.gradle, il devrait ignorer les bibliothèques de support v4 et l'erreur de duplication disparaîtra.

3
Aegon

Quant à moi, cela aide à résoudre de tels problèmes

toutes les bibliothèques de support (y compris la troisième partie) sont réduites à la version spécifiée

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.Android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '28.0.0-beta01'
            }
        }
    }
}
1
V. Kalyuzhnyu

Dans le cas où j'ai résolu le problème par

implementation 'com.Android.support:appcompat-v7:26.0.0'

à 

 implementation 'com.Android.support:appcompat-v7:27.1.1'
0
Waqar UlHaq

L'ajout de la ligne ci-dessous dans le build.gradle du niveau de l'application a fonctionné pour moi

    implementation 'com.Android.support:support-v4:28.0.0'
0
Abhishek Tiwari

J'ai également fait face au même problème il y a peu de temps. Dans mon cas, la bibliothèque tierce utilisait l'ancienne version AccessibilityServiceInfoCompat version v4 22 et i déjà mise à jour vers la version plus récente 28 28, de sorte que les deux classes de bibliothèque de support se sont heurtées

0
Ssubrat Rrudra

certaines bibliothèques tierces peuvent utiliser une version différente de la bibliothèque de support. vous pouvez utiliser ./gradlew :app:dependencies pour le découvrir, puis importer la version actuelle de la bibliothèque de support.

0
felix
I have my solution by change this :
Android / build.gradle
buildscript {
    ext {
        supportLibVersion = "27.0.3"
    }
}
to
buildscript {
    ext {
        supportLibVersion = "26.0.0"
    }
}
directory Android / app / build.gradle
defaultConfig {
    multiDexEnabled true
}
0
usman ali