我一直在尝试将Amazon SNS客户端与Android项目集成。
我使用以下依赖命令
包含库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'
}
因此它自动包含上面的库(及其依赖项: aws_java_sdk_core 和 aws_java_sdk_sqs )。所有3个库都有 1.10.2 版本。
问题是AWS核心有两个模块
由于android内部具有相同的包,因此它排除了这些模块 避免任何冲突。结果是当aws代码尝试从这些模块访问某些类时。 Tt期待它的不同版本,找不到预期的方法,并使应用程序崩溃。
有没有办法覆盖android的排除? (或者有更好的方法来处理这种情况吗?)
编辑:添加了gradle日志:
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 :(得分:0)
由于您正在处理Android项目,请考虑使用AWS SDK for Android。它针对Android平台进行了优化。它具有更小的库,更少的依赖项和其他优化。它应该解决冲突的问题。查看developer guide。
它就像更新依赖项以编译com.amazonaws一样简单:aws-android-sdk-sns:2.2。+'。它的用法应该与Java SDK的用法兼容。
答案 1 :(得分:0)
您是否尝试排除存在冲突的依赖项?由于它们在两个库中都可用,因此您可以选择忽略它们,这应该可以正常工作。
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'
}
....
}
(我已使用groups
和modules
的指示性名称排除,您可以尝试使用确切的名称,认为它应该有效)
Very useful link that shows how to exclude using, Artifact name, module and both module & artifact.