alwaystest / Blog

24 stars 2 forks source link

Proguard报错Support库Duplicate zip entry问题 #51

Open alwaystest opened 7 years ago

alwaystest commented 7 years ago

Proguard报错Support库Duplicate zip entry问题

标签(空格分隔): Android Proguard


网上查的资料都只是说同时依赖了两个不同版本的Library。

但是Android Studio(Gradle)解决库依赖冲突问题中说Gradle会默认共享最高版本的依赖库,所以如果没有使用Jar方式来管理依赖的话,基本不会遇到这个问题。

查看错误日志,报错的类是classes.jar:android/support/v4/util/MapCollections$ArrayIterator.class。而使用gradle -q app:dependencies查看依赖,也确实发现低版本的SupportV4库被忽略而使用了依赖的最高版本的库。

在Android Support Library 24.2.0及之后的版本中,为了增强效率和减小APK的大小起见,Android将V4包从一个独立的依赖包拆分成v4 compat library、v4 core-utils library、v4 core-ui library、v4 media-compat library和v4 fragment library这5个包 文/张明云(简书作者) 原文链接:http://www.jianshu.com/p/a5aa5f209895

Android Studio切换到project视角查看依赖库,果然发现了问题。

引入的Library依赖了com.android.support:support-compat:25.0.0,而之前项目已经依赖了com.android.support:support-v4:23.1.1,一个是拆分support包之后的,一个是拆分support包之前的。这两个库中都包含了android/support/v4/util中的类,所以引起了冲突。

如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion说更改compileSdkVersion并不影响APK的表现,升级Support库的版本的话,IDE会提示要使Support库的大版本和compileSdkVersion保持一致。而且官方也推荐使用最新的SDK来编译。所以最后的解决办法就是升级Support库的大版本到最新,使用最新的SDK来编译。

其实主要问题是Support包进行了一次拆分,导致Gradle没有办法分辨出com.android.support:support-compat:25.0.0com.android.support:support-v4:23.1.1其实包含了一些相同的类(package和类名都相同)。导致最终报错类重复。