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.
Ajouter à build.gradle
situé dans le module d'application
configurations {
all {
exclude module: 'httpclient'
}
}
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'
}
}
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).
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'
}
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
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'
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'
}
}
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: