Je viens de convertir mon projet en androidx et j'obtiens maintenant l'erreur "Type de programme déjà présent" pour com.google.common.util.concurrent.ListenableFuture
.
J'ai parcouru plusieurs solutions stackoverflow et une partie de la documentation Gradle et ne parviennent toujours pas à le faire fonctionner.
Le problème est qu'il existe deux versions de ListenableFuture apportées par Gradle dans ces modules:
+--- androidx.core:core:1.1.0-alpha03@aar +--- androidx.concurrent:concurrent-futures:1.0.0-alpha02@jar +--- com.google.guava:listenablefuture:1.0@jar
Je suppose que je veux exclure le second, mais je ne sais pas comment le faire.
Vous pouvez voir ce que j'ai essayé dans mon fichier gradle, mais pas de joie pour l'instant.
apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.drme.weathertest" minSdkVersion 26 targetSdkVersion 27 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } // added 1/2/19 to try and prevent java.lang.NoClassDefFoundError: Failed resolution of: // Landroid/view/View$OnUnhandledKeyEventListener; configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == "com.android.support") { if (!requested.name.startsWith("multidex")) { details.useVersion "26.+" } } } // resolutionStrategy.force 'com.google.quava.listenablefuture:1.0', // 'com.google.common.util.concurrent.listenablefuture' } // compile('com.google.guava:listenablefuture:1.0@jar') { // // causing "Program type already present" compile errors // //exclude("com.google.guava:listenablefuture:1.0") // exclude('com.google.guava:listenablefuture') // exclude('listenablefuture-1.0.jar') // //exclude("maven.com.google.quava.listenablefuture") // } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { java.srcDirs = ['src/main/java', 'src/main/java/com.drme.weatherNoaa/Data', 'src/main/java/2'] } } compileOptions { targetCompatibility 1.8 sourceCompatibility 1.8 } } dependencies { // causing "Program type already present" compile errors // did not fix problem implementation('com.google.guava:listenablefuture:1.0') { exclude module: 'com.google.guava:listenablefuture' } implementation fileTree(include: ['*.jar'], dir: 'libs') testImplementation 'androidx.arch.core:core-testing:2.0.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01' annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.1.0-alpha01" annotationProcessor "androidx.room:room-compiler:2.1.0-alpha03" implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.test.espresso:espresso-core:3.1.1' implementation 'com.google.code.gson:gson:2.8.2' testImplementation 'junit:junit:4.12' implementation 'androidx.test:runner:1.1.1' implementation 'androidx.preference:preference:1.1.0-alpha02' implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha01' implementation 'androidx.appcompat:appcompat:1.1.0-alpha01' implementation 'androidx.media:media:1.1.0-alpha01' implementation 'androidx.room:room-runtime:2.1.0-alpha03' implementation 'androidx.room:room-testing:2.1.0-alpha03' implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha3' implementation 'com.google.android.gms:play-services-location:16.0.0' implementation 'androidx.core:core:1.1.0-alpha03' implementation 'androidx.room:room-compiler:2.1.0-alpha03' }
Si je regarde correctement les dépendances, il semble que cela provienne de androidx.core: core: 1.1.0-alpha03
.
Gradle: com.google.quava:quava:23.5jre@jar Gradle: com.google.guava:listenablefuture:1.0@jar
Des suggestions seraient appréciées. Merci.
3 Réponses :
vous ne pouvez pas exclure listenablefuture
de listenablefuture
... essayez plutôt quelque chose de similaire:
implementation ("androidx.core:core:1.1.0-alpha03") { exclude group: "com.google.guava", module: "listenablefuture" }
p >
Martin: Cela n'a pas fonctionné pour moi, mais cela m'a donné d'autres idées à essayer. Voir ma réponse à ma question. Merci pour l'aide.
J'ai trouvé le problème et la réponse. En regardant les bibliothèques externes dans la vue Projet, j'ai trouvé ce qui suit:
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == "com.android.support") { if (!requested.name.startsWith("multidex")) { details.useVersion "26.+" } } } all*.exclude group: 'com.google.guava', module: 'listenablefuture' <===This fixed the problem }
La seule chose dans la deuxième entrée était le double ListenableFuture.
En créant l'entrée suivante dans le fichier de construction gradle, ce problème a disparu:
Gradle: com.google.guava:guava:23.5-jre@jar |_ guava-23.5-jre.jar |_com.google |_common |_util.concurrent |_ListenableFuture Gradle: com.google.guava:listenablefuture:1.0@jar |_listenablefuture-1.0.jar |_com.google.common.util.concurrent |_ListenableFuture
Je ne pouvais pas comprendre ce qui générait le com.google.guava: listenablefuture: 1.0@jar code>, mais le problème qui en résulte a été résolu.
Merci à tous ceux qui ont examiné le problème.
Type de programme déjà présent
signifie qu'il y a des classes en double ... l'exclusion de toutes les occurrences a probablement des effets secondaires indésirables; mieux vaut en garder un. ./gradlew app: dependencies
les listerait. si mon approche ne fonctionnait pas, il pourrait y avoir plus de deux occurrences présentes.
Martin: Merci pour la suggestion. Je ne connais que les deux fichiers build.gradle
de mon projet Android Studio et je n'ai pas pu comprendre comment exécuter votre suggestion pour répertorier les dépendances. J'ai regardé la documentation de Gradle et j'ai failli tuer mon projet en essayant d'ajouter des analyses de build. :) Pourriez-vous fournir un lien pour montrer comment mettre en œuvre votre suggestion plus en détail? Je ne suis pas un gourou de la ligne de commande. Merci.
il donne la configuration d'erreur ': app: annotationProcessor' après avoir été inclus dans la résolution des dépendances.
C'est ce que je n'avais qu'à inclure dans le fichier gradle de mon application configurations.all {all * .exclude group: 'com.google.guava', module: 'listenablefuture'}
Son travail mais a eu un problème: Causé par: java.lang.ClassNotFoundException: androidx.work.impl.utils.futures.AbstractFuture
La mise à jour de androidx.core: core-ktx
vers la version 1.1.0-rc01
a également résolu le problème.