具体异常信息截取如下:
Browser/build/intermediates/exploded-aar/com.google.android.gms/play-services-analytics/7.8.0/jars/classes.jar(;;;;;;**.class)] (Duplicate zip entry [com/google/android/gms/ads/a/a.class == classes.jar:com/google/android/gms/ads/identifier/AdvertisingIdClient.class]))大致意思是说, 有两个引用的依赖重复依赖同一个类, 在这里就是AdvertisingIdClient类, 在studio里面按ctrl+N查看, 确实有两个相同的类, 这个类分别在不同的依赖包里面.
查看代码后得知:
在我的app/gradle文件中有如下引入:
compile files('src/main/libs/google-play-services.jar')
这个jar是放在工程的lib文件加下面的. 这个包含有了google广告模块' play-services-ads'
而在我的gradle中还有这么一句引用:
compile ('com.facebook.android:audience-network-sdk:4.8.2')
这个引入了facebook的广告模块, 很不凑巧的是,在这个依赖中本身就含有google的广告模块'play-services-ads', 所以一旦混淆编译就会出现了上面的错误.
所以我们需要在这个compile中增加exclude, 把google的广告模块去掉,如下:
compile ('com.facebook.android:audience-network-sdk:4.8.2'){ exclude module: 'play-services-ads' }这样这个错误就没有了.
平时如何查看一个依赖是否包含了其他依赖呢? 使用如下命令:
./gradlew -q app:dependencies
app表示你自己的module的名称,可自行修改
具体可参考: http://blog.csdn.net/fdoubleman/article/details/55684462
ps 一般我们使用compile方式依赖的远程maven仓库的依赖包或是lib下面的aar文件, build之后会在工程的External Libraries目录下列出来,而我们lib下面的jar就直接在lib上面可以看到相关的class文件