web-dev-qa-db-de.com

Commons-Logging definiert Klassen, die mit Klassen in Konflikt stehen, die jetzt von Android nach Android Studio Update) bereitgestellt werden

Ich habe Android Studio auf Version 3 aktualisiert und kann mein zuvor ohne Fehler kompiliertes Projekt anscheinend nicht kompilieren.

Die Fehlermeldung lautet wie folgt

Fehler: Fehler: Commons-Logging definiert Klassen, die im Konflikt mit Klassen stehen, die jetzt von Android bereitgestellt werden. Die Lösung besteht darin, neuere Versionen oder alternative Bibliotheken zu finden, bei denen nicht das gleiche Problem vorliegt (z. B. für httpclient HttpUrlConnection oder okhttp), oder die Bibliothek mit etwas wie jarjar neu zu packen. [DuplicatePlatformClasses]

Die Abhängigkeiten sind

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'
}

und Fehler scheint verursacht durch

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'

Ich benutze bereits exclude module: 'httpclient' Warum kompiliert es nicht? Ist dies ein Fehler von Android Studio 3 und\oder enthalten com.Android.tools.build:gradle:3.0.0 Plugin oder mir fehlt was? Mit der Vorgängerversion kein Problem, genau das gleiche Projekt zu kompilieren.

44
AndreaF

Hinzufügen build.gradle befindet sich im App-Modul

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

Wenn das Problem bei der gemeinsamen Protokollierung liegt, muss dies ebenfalls ausgeschlossen werden. Fügen Sie den folgenden Code in app/build.gradle hinzu

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

Im Terminal im Projektordner ausführen:

./gradlew app:dependencies > dependencies.txt

Überprüfen Sie dann die Datei "dependencies.txt", um herauszufinden, wer konfliktbehaftete Abhängigkeiten verwendet, und verhalten Sie sich entsprechend (suchen Sie nach Updates, entfernen Sie sie oder verwenden Sie "exclude", wie von @Silverstorm vorgeschlagen).

5
Sergio Viudes

Habe das gleiche Problem. Ich habe unten Änderungen vorgenommen

 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

Sie sollten "kompilieren" durch "implementieren" ersetzen, da dies in der neuesten Version veraltet ist, und "org.Apache.httpcomponents" aus den Google API-Clientbibliotheken ausschließen:

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'
}

diese Lösung wurde hier gefunden: https://developers.google.com/google-apps/activity/v1/quickstart/Android

4
khammami

Als 'org.Apache.httpcomponents: httpclient: 4.3.3' wird nach SDKversion 23 so veraltet

ersetze dies:

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

mit

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

Wenn Sie mit async-http Fortfahren möchten, fügen Sie den folgenden Code nur in app/build.gradle Hinzu.

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

Ich habe die Commons-Protokollierung wie oben vorgeschlagen entfernt . Natürlich stürzte sie auf einem Telefon mit Fatal Exception: Java.lang.NoClassDefFoundError: Failed resolution of: Lorg/Apache/commons/logging/LogFactory; Ab. Wie kann Android behaupten, das Commons-Logging widerspricht Android API, wenn die Android API keine von enthält Diese Klassen?!? Es gibt kein org.Apache.commons.logging unter https://developer.Android.com/reference/packages : facepalm:

Ich habe wieder implementation 'commons-logging:commons-logging:1.0.4' Zum build.gradle hinzugefügt - Android= Studio unterstreicht es mit rot, aber gradle kompiliert glücklich.: Facepalm:

Android: triple_facepalm:

0
Martin Vysny