Android Studio 中多个module引用同一个jar(或者冲突解决)解决方案

转载https://blog.csdn.net/zhizhuodewo6/article/details/79597789

在Android开发过程中我们多多少少会引入module,不仅会提高项目的开发进度,而且项目管理起来相当方便。

但是同一个项目中引入多个module引入同一个jar或有冲突的jar时候在编译的时候会出现错误,这些错误往往让人抓狂。


  • 在解决这些错误之前,让我们先了解下关于module的几种依赖方式的区别(直接看解决方案请跳过)
  1. compile
    compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。
  2. Provided
    Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。
  3. APK
    只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错
  4. Test compile
    Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。
  5. Debug compile
    Debug compile 仅仅针对debug模式的编译和最终的debug apk打包
  6. Release compile
    Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。

  • 冲突解决方案
    我们需要用的是Provided,这样在写代码的时候可以在所属的Module中正常使用jar中的类,但是要有一个Module以compile的方式依赖这个jar,这样编译的时候只有一个jar编译进apk。
    比如现在两个module发生同时引用一个jar打包时候发生冲突。
  1. 第一个module不发生任何改变。
  2. 设置另一个module引入jar的方式为Provided,这样改module引入的jar在编译时候可以使用,即代码不会报错,生成的apk不会包含该jar。在apk运行时候第一个module的jar会共享该module使用,也就是说compile依赖方式是对共所有的调用,虽然在编译时候不能被调用。(除了引用module的项目外)
  • 注:使用Provided必须删除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module

  • 来个栗子

  1. 我在项目中使用了Alipay(支付宝),引用了一个Alipay的module。(其中在libs下 有一alipay.jar)

  2. 还在项目中引用了友盟推送,在推送的module中引入的jar文件和alipay.jar文件发生冲突。

  3. 首先选择一个引入方式设置成Provided,因为Alipay只引入了alipay.jar所以选择,Alipay在Alilpay.build文件中删除

 
  1. //删除下面这行

  2. compile fileTree(include: ['*.jar'], dir: 'libs')

  3.  
  4. //添加

  5. provided files('libs/Alipay.jar)

  1. 因为友盟推送jar是和Alipay的支付jar冲突,而不是引用同一个jar,所以解决方式是把友盟推送jar拆分成alipay.jar 和 去tuuid的友盟推送的jar。统一放入libs。

  2. 先在release apk 这样就ok!!!!

解决了,如下方法可用:
1、新建module library_support ,引用V4 V7 
2、引用的开源lib全添加依赖为这个module,并把所有引用library_support依赖的这一项的scope改为provided即可

 


duplicate entry: com/google/gson/annotations/Expose.class

转载https://blog.csdn.net/zhizhuodewo6/article/details/79597789

项目在引入Retrofit2时,运行项目时会报出以下错误:

Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: com/google/gson/annotations/Expose.class
  • 仔细看了下错误报告,确定是gson这个库有重复导致的问题。 
    因为在项目的build.gradle中新加入
 compile 'com.squareup.retrofit2:retrofit:2.1.0'
 compile 'com.squareup.retrofit2:converter-gson:2.1.0'

那么问题就确定了,因为引入了converter-gson:2.1.0所以出现的错误。

我们先来查找一下Expose.class这个类是有哪些重复使用的类库,在Android Studio中双击Shift键,打开搜索窗口,输入Expose.class。如图: 
这里写图片描述 
可以发现确实是有两个重复了,那么现在就来解决这个问题。

解决方法:

在项目中找到External Libraries里面的converter-gson-2.1.0。如图: 
这里写图片描述 
这里写图片描述 
打开pom.xml,查看里面gson的groupId。如图: 
这里写图片描述 
找到gson的groupId后,我们就要把它去掉就可以了,现在就来把它去掉,步骤如下: 
打开项目的build.gradle,把原来的compile ‘com.squareup.retrofit2:converter-gson:2.1.0’ 改成这样:

 compile ('com.squareup.retrofit2:converter-gson:2.1.0'){
        exclude group : 'com.google.code.gson'
    }

其中com.google.code.gson就是gson的groupId。 
完成之后项目就可以正常运行了!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值