Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conflict with android package - Amazon SNS

I have been trying to integrate the Amazon SNS client with an android project.

I am including the library using the following dependency commands

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

Thus it automatically includes the above library (and its dependencies : aws_java_sdk_core and aws_java_sdk_sqs). All 3 libraries have a version 1.10.2.

The problem is that the AWS core has two modules

  1. commons-logging (commons-logging:commons-logging:1.1.3)
  2. httpclient (org.apache.httpcomponents:httpclient:4.3.6)

As android has the same packages internally, it excludes these modules to avoid any conflict. The result is that when the aws code tries to access some classes from these modules. Tt is expecting a different version of it, does not find the expected method, and crashes the application.

Is there any way to override android's exclude? (Or is there a better way to handle this situation?)

EDIT: Added gradle log :

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
like image 474
Sainath Krishnan Avatar asked Jul 06 '15 00:07

Sainath Krishnan


1 Answers

Since you are working on an Android project, please consider use AWS SDK for Android. It's optimized for Android platform. It has smaller libraries, fewer dependencies, and other optimizations. It should solve the conflicting problem. Check out the developer guide.

It's just as simple as updating the dependency to compile 'com.amazonaws:aws-android-sdk-sns:2.2.+'. It's usage should be compatible with that of Java SDK.

like image 189
Yangfan Avatar answered Sep 16 '22 11:09

Yangfan