21

Zaktualizowałem program Android Studio do wersji 3 i wydaje mi się, że nie mogę skompilować mojego wcześniej skompilowanego projektu bez błędów.Rejestrowanie commons definiuje klasy, które są w konflikcie z klasami udostępnianymi teraz przez Androida po aktualizacji Android Studio

Komunikat o błędzie jest kontynuacją

Error:Error: commons-logging defines classes that conflict with classes now provided by Android. Solutions include finding newer versions or alternative libraries that don't have the same problem (for example, for httpclient use HttpUrlConnection or okhttp instead), or repackaging the library using something like jarjar. [DuplicatePlatformClasses]

Zależności są

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

i błędów wydaje spowodowane

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' 

używam już exclude module: 'httpclient' Więc dlaczego nie skompilować? Czy to błąd Androida 3 i wtyczki com.android.tools.build:gradle:3.0.0 lub czegoś brakuje? W poprzedniej wersji nie ma problemu z kompilacją dokładnie tego samego projektu.

+0

„Więc dlaczego on nie skompilować?” - Twój problem dotyczy 'commons-logginging', w oparciu o błąd. Być może istnieją nowsze wersje tych zależności 'com.google', których powinieneś używać. – CommonsWare

+0

@CommonsWareNie znalazłem nowszej biblioteki te wersje są najnowsze wydania października 2017 – AndreaF

+0

Czy masz te same słoiki w folderze libs? –

Odpowiedz

31

Dodaj do build.gradle znajduje się w aplikacji modułu

configurations { 
    all { 
     exclude module: 'httpclient' 
    } 
} 
+0

Nie mogę uzyskać wersji apk, jeśli wykluczyć, httpclient – R2R

+0

@RameshSambu Czy umieściłeś powyższy kod w wewnętrznej części build.gradle modułu aplikacji? – Silverstorm

+0

Tak, dodałem w ten sposób: – R2R

12

Jeśli problem jest z Commons rejestrowania to musi być wykluczony też. Dodaj poniższy kod w app/build.gradle

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

Należy zastąpić „kompilacji” z „realizacji”, jak to jest przestarzałe w najnowszej Gradle i exlude „org.apache.httpcomponents” z bibliotek klienckich API Google:

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

ten roztwór znaleźć tutaj: https://developers.google.com/google-apps/activity/v1/quickstart/android

+0

compile: kompiluj bibliotekę dla każdego, która zawiera bieżący moduł. Implementacja : biblioteka kompilacji dla modułu bieżącego, czyli średnia zaimplementowana biblioteka niewidoczna dla modułów "macierzystych" –

2

Uruchom w terminalu, wewnątrz folderu projektu:

./gradlew app:dependencies > dependencies.txt 

Następnie sprawdź dependencies.txt dowiedzieć się kto korzysta konfliktowych zależności i podjąć odpowiednie działania (sprawdzić aktualizacje go pozbyć, lub użyć wykluczyć jak sugeruje @Silverstorm)

1

Mam ten sam problem. Zrobiłem poniżej zmienia

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

Jeśli chcesz kontynuować async-http następnie dodać następujący kod poniżej tylko w app/build.gradle

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