美文网首页Android杂识androidandroid
Android Studio 中多个module引用同一个jar

Android Studio 中多个module引用同一个jar

作者: 风染墨 | 来源:发表于2016-08-01 23:38 被阅读7518次

    文章转自:http://blog.csdn.net/u013134391/article/details/51538511

    在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文件中删除

      //删除下面这行
      compile fileTree(include: ['*.jar'], dir: 'libs')
      
      //添加
      provided files('libs/Alipay.jar)
      
      
    4. 因为友盟推送jar是和Alipay的支付jar冲突,而不是引用同一个jar,所以解决方式是把友盟推送jar拆分成alipay.jar 和 去tuuid的友盟推送的jar。统一放入libs。

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

    相关文章

      网友评论

      • 苍蝇的梦:所以其实最后只是用一个,另一个jar没用的...
        版本不一致,用起来还是会出错啊

      本文标题:Android Studio 中多个module引用同一个jar

      本文链接:https://www.haomeiwen.com/subject/xmkfsttx.html