web-dev-qa-db-fra.com

commons-logging définit les classes en conflit avec les classes maintenant fournies par Android après Android Studio Update

J'ai mis à jour Android Studio vers la version 3 et semble désormais incapable de compiler mon projet précédemment compilé sans erreur.

Le message d'erreur est le suivant

Erreur: Erreur: commons-logging définit les classes en conflit avec les classes maintenant fournies par Android. Les solutions incluent la recherche de versions plus récentes ou de bibliothèques alternatives ne posant pas le même problème (par exemple, pour httpclient, utilisez HttpUrlConnection ou okhttp à la place), ou le reconditionnement de la bibliothèque à l'aide de jarjar. [DuplicatePlatformClasses]

Les dépendances sont

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.Android.support:appcompat-v7:27.0.0'
    compile 'com.Android.support:design:27.0.0'
    compile 'com.google.api-client:google-api-client-Android:1.23.0' exclude module: 'httpclient'
    compile 'com.google.http-client:google-http-client-gson:1.23.0' exclude module: 'httpclient'
    compile 'com.google.firebase:firebase-core:11.4.2'
}

et l'erreur semble causée par

compile 'com.google.api-client:google-api-client-Android:1.23.0' exclude module: 'httpclient'
compile 'com.google.http-client:google-http-client-gson:1.23.0' exclude module: 'httpclient'

J'utilise déjà exclude module: 'httpclient' Alors pourquoi ne compile-t-il pas? Est-ce un bogue de Android Studio 3 et/ou inclus com.Android.tools.build:gradle:3.0.0 _ plugin ou il me manque quelque chose? Avec la version précédente, aucun problème pour compiler exactement le même projet.

44
AndreaF

Ajouter à build.gradle situé dans le module d'application

configurations {
    all {
        exclude module: 'httpclient'
    }
}
57
Silverstorm

Si le problème vient de la journalisation commune, il faut aussi l'exclure. Ajoutez le code suivant dans app/build.gradle

configurations {
    all {
        exclude module: 'httpclient'
        exclude module: 'commons-logging'
    }
}
30
srs

Exécuter dans un terminal, dans le dossier du projet:

./gradlew app:dependencies > dependencies.txt

Ensuite, vérifiez le fichier dependencies.txt pour savoir qui utilise des dépendances conflictuelles et agissez en conséquence (recherchez les mises à jour, supprimez-les ou utilisez la méthode exclude comme suggéré par @Silverstorm).

5
Sergio Viudes

Vous avez le même problème. J'ai fait ci-dessous des changements

 configurations {
    all{
        exclude group: 'commons-logging', module: 'commons-logging'
        exclude group: 'org.Apache.httpcomponents'
    }
}


packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/NOTICE'
    exclude 'org/Apache/http/version.properties'
    exclude 'org/Apache/http/client/version.properties'
}
4
Raja Peela

Vous devez remplacer "compiler" par "implémentation", car il est déconseillé dans la dernière version, et exclure "org.Apache.httpcomponents" des bibliothèques clientes de Google api:

implementation('com.google.api-client:google-api-client-Android:1.23.0') {
    exclude group: 'org.Apache.httpcomponents'
}
implementation('com.google.http-client:google-http-client-gson:1.23.0') {
    exclude group: 'org.Apache.httpcomponents'
}

cette solution a été trouvée ici: https://developers.google.com/google-apps/activity/v1/quickstart/Android

4
khammami

Comme 'org.Apache.httpcomponents: httpclient: 4.3.3' est obsolète après la version 23 de SDK, donc

remplacez ceci:

compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.Apache.http.client:4.1.2'

avec

compile 'org.Apache.httpcomponents:httpclient:4.3.3'
1
Muhammad Etisam

Si vous voulez continuer avec async-http puis ajoutez ci-dessous le code suivant uniquement dans app/build.gradle

configurations {
    all {
        exclude module: 'commons-logging'
    }
}
1
Exigente05

J'ai enlevé commons-logging comme suggéré ci-dessus, bien sûr il s'est écrasé sur un téléphone avec Fatal Exception: Java.lang.NoClassDefFoundError: Failed resolution of: Lorg/Apache/commons/logging/LogFactory;. Comment peut-on Android réclamer que la journalisation commune est en conflit avec Android API lorsque l’API Android API ne contient aucun élément Ces classes?!? Il n'y a pas d'org.Apache.commons.logging sur https://developer.Android.com/reference/packages : facepalm:

J'ai rajouté implementation 'commons-logging:commons-logging:1.0.4' au build.gradle - Android Studio le souligne en rouge mais compile avec bonheur.: facepalm:

Android: triple_facepalm:

0
Martin Vysny