1.现象
项目gradle版本由2.14.1升级到4.6之后,使用gradlew assembleRelease构建失败。
2.分析过程
2.1 --stacktrace获取异常信息
使用gradlew构建报错,没有详细的异常信息,gradlew 构建时添加--stacktrace参数打印台输出异常信息:
Caused by: java.io.IOException: Can't read [C:\Users\wanglujie\.gradle\caches\transforms-1\files-1.1\support-comp
at-25.3.0.aar\c055a17a22f2c9a0e737a3c3a0b1c246\jars\classes.jar(;;;;;;;**.class)] (Duplicate jar entry [android/s
upport/v4/widget/CompoundButtonCompatLollipop.class])
2.2 双shift健查找重复的类
从上述异常信息信息中可知,CompoundButtonCompatLollipop类在多个jar中出现,导致重复,在android studio中双击shift健,输入CompoundButtonCompatLollipop进行查找,找到是v4包和campat包中包含该类。并且版本不一样
2.3 使用 gradlew module名:dependencies命令查看某个模块的包依赖情况
项目中依赖片段截图如下:
可以看到,support-compat在butterknife中的版本是25.3.0,support-v4包在v7包中的版本是23.4.0,版本号不一致,导致CompoundButtonCompatLollipop类有多个版本。
compile 'com.android.support:appcompat-v7:23.4.0', gradle会自动加入所有v4包的依赖,并且是和v7相同的版本。
3. 解决
将v7的版本号修改为25.3.0即可。
参考资料