2015-07-06 26 views
7

Próbowałem zintegrować klienta Amazon SNS z projektem Android.Konflikt z pakietem android - Amazon SNS

jestem w tym bibliotekę stosując następującą zależność poleceń

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.0' 
    compile 'com.amazonaws:aws-java-sdk-sns:1.10.+' 
    compile 'com.google.android.gms:play-services:7.5.0' 
} 

Zatem automatycznie obejmuje powyższą bibliotekę (i jego zależności: aws_java_sdk_core i aws_java_sdk_sqs). Wszystkie 3 biblioteki mają wersję 1.10.2.

Problemem jest to, że rdzeń składa się z dwóch modułów AWS

  1. fotografia wspomagane (fotografia wspomagane: fotografia wspomagane: 1.1.3)
  2. HTTPClient (org.apache.httpcomponents: httpclient 4.3 .6)

Ponieważ Android ma te same pakiety wewnętrznie, wyklucza te moduły , aby uniknąć konfliktu. W rezultacie kod aws próbuje uzyskać dostęp do niektórych klas z tych modułów. Tt spodziewa się innej wersji, nie znajdzie oczekiwanej metody i zawiesi aplikację.

Czy istnieje sposób na zastąpienie wykluczenia Androida? (Czy jest jakiś lepszy sposób obsługiwać tej sytuacji?)

EDIT: Dodany Gradle dziennika:

WARNING: Dependency commons-logging:commons-logging:1.1.3 is ignored for debug as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
WARNING: Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for debug as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
WARNING: Dependency commons-logging:commons-logging:1.1.3 is ignored for release as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
WARNING: Dependency org.apache.httpcomponents:httpclient:4.3.6 is ignored for release as it may be conflicting with the internal version provided by Android. 
     In case of problem, please repackage it with jarjar to change the class packages 
+0

Gra adwokata diabła, czy może być jakiś kod w twoim projekcie, który oczekuje wersji Androida tych plików JAR Apache? –

+0

Dodano gradle log! –

+0

Możesz również opublikować dzienniki awarii –

Odpowiedz

0

Ponieważ pracują nad projektem Android, należy rozważyć używać AWS SDK for Android. Jest zoptymalizowany dla platformy Android. Ma mniejsze biblioteki, mniej zależności i inne optymalizacje. Powinien rozwiązać konfliktowy problem. Sprawdź numer developer guide.

To tak proste, jak aktualizacja zależności do kompilacji "com.amazonaws: aws-android-sdk-sns: 2.2. +". Jego użycie powinno być zgodne z tym z pakietu Java SDK.

+0

Przeprosiny za opóźnienie, próbowaliśmy tego, włączając rdzeń, który nie rozwiązał problemu. Samo korzystanie z SDK nie wchodzi w grę, ponieważ omawiana aplikacja jest już prawie ukończona! –

+0

Nie wiadomo, dlaczego korzystanie z pakietu AWS SDK dla systemu Android zostało wykluczone. Jest to tak proste, jak aktualizacja zależności do kompilacji "com.amazonaws: aws-android-sdk-sns: 2.2. +". Jego użycie powinno być zgodne z tym z pakietu Java SDK. – Yangfan

0

Czy próbowałeś wykluczyć zależności, które są ze sobą sprzeczne? Ponieważ są one dostępne w obu bibliotekach, możesz je zignorować, co powinno działać poprawnie.

dependencies { 

     ... 
     compile ('com.amazonaws:aws-java-sdk-sns:1.10.2') { 
      exclude group: 'commons-logging', module: 'commons-logging' 
     } 
     compile ('com.amazonaws:aws-java-sdk-sns:1.10.2') { 
      exclude group: 'org.apache.httpcomponents', module: 'httpclient' 
     } 
     .... 
} 

(Użyłem orientacyjne nazwy groups i modules wykluczyć, można wypróbować dokładnych nazw, myśli powinno działać)

Very useful link that shows how to exclude using, Artifact name, module and both module & artifact.

Check this reference answer as well

+0

To nie zadziała. AWS SDK for Java ma trudną zależność od Apache HttpClient 4.3 lub nowszego, co nie jest dostępne w systemie Android. Możesz go skompilować, ale po uruchomieniu aplikacji zobaczysz wyjątek ClassNotFoundException. – Yangfan

+0

Cholera! to jest trudne. Pozwól mi zobaczyć, jak to się uda. – Darpan

+0

Już zaproponowałem rozwiązanie. Lepiej używać zestawu AWS SDK dla Androida http://aws.amazon.com/mobile/sdk/. Wygładza problemy z zależnościami. Tylko nie wiesz, dlaczego oryginalny autor chce trzymać się wersji Java. – Yangfan

Powiązane problemy