Android 用guava编译google云服务客户端库

Android 用guava编译google云服务客户端库,android,google-app-engine,gradle,guava,Android,Google App Engine,Gradle,Guava,我正在使用android studio。我正在用谷歌云appengine(端点)和谷歌云存储开发一个应用程序。当我编写gradle依赖项时,如图所示: dependencies { compile 'com.google.apis:google-api-services-storage:v1beta2-rev77-1.20.0' compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.s

我正在使用android studio。我正在用谷歌云appengine(端点)和谷歌云存储开发一个应用程序。当我编写gradle依赖项时,如图所示:

dependencies {
    compile 'com.google.apis:google-api-services-storage:v1beta2-rev77-1.20.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:multidex:1.0.1'
    compile project(path: ':backend', configuration: 'android-endpoints')


    compile files('libs/joda-time-2.8.2.jar')
    compile ('com.google.appengine.tools:appengine-gcs-client:0.4.4')
    compile files('libs/guava-18.0.jar')
}
我在编译时检索到一个错误:

Error:Execution failed for task ':app:packageAllDebugClassesForMultiDex'.
 java.util.zip.ZipException: duplicate entry: com/google/common/reflect/TypeToken$TypeCollector$ForwardingTypeCollector.class
我曾试图以这种方式排除

compile ('com.google.appengine.tools:appengine-gcs-client:0.4.4'){
    exclude group: 'com.google.guava'
}
但什么都不管用。有人能帮我吗?

1)首先,让我们从您的依赖项中删除这个丑陋的罐子。我是关于乔达时间和番石榴的

compile 'joda-time:joda-time:2.8.2'  
compile 'com.google.guava:guava:18.0'     
2) 将
排除组:“com.google.guava”
appengine
移动到
api

compile ('com.google.apis:google-api-services-storage:v1beta2-rev77-1.20.0') {
        exclude group: 'com.google.guava'
}
并将其添加到您的
:后端

compile (project(path: ':backend', configuration: 'android-endpoints')) {
    exclude group: 'com.google.guava'
}
3) 现在您可以获得此错误
com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:process'command'…java''结束时退出值为非零1

如果是,我们应该将排除添加到
appengine

compile('com.google.appengine.tools:appengine-gcs-client:0.4.4') {
    exclude group: 'javax.transaction'
}
4) 现在,您可以在APK META-INF/NOTICE.txt中复制
重复文件
我们在
android{}
部分中使用
packagingOptions
解决了这个问题

packagingOptions {
        exclude 'META-INF/NOTICE.txt'
}
那么你的最终结果呢

android {
    ...
    packagingOptions {
        exclude 'META-INF/NOTICE.txt'
    }
}
dependencies {
    compile (project(path: ':backend', configuration: 'android-endpoints')) {
        exclude group: 'com.google.guava'
    }

    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:multidex:1.0.1'

    compile 'joda-time:joda-time:2.8.2'
    compile 'com.google.guava:guava:18.0'

    compile ('com.google.apis:google-api-services-storage:v1beta2-rev77-1.20.0') {
        exclude group: 'com.google.guava'
    }
    compile('com.google.appengine.tools:appengine-gcs-client:0.4.4') {
        exclude group: 'javax.transaction'
    }
}

非常感谢你,但是在做了你说的事情之后,我也犯了同样的错误。我分享了我的gradle的截图:正如你所看到的,我做了你推荐我做的事情(@RubénAvendañucableallero您是否从multidex应用程序扩展了应用程序?并将multidex设置为true?@RubénAvendañucableallero发布了整个构建。gradle@RubénAvendañucableallero也将番石榴从appengine中排除。并给我您后端模块的依赖项Hi pengrad。我给您发送了build.gradle的。没有任何变化将番石榴排除在appengine之外伊恩,先谢谢你。