美文网首页安卓之美Androidgradle
解决AAR包引用第三方依赖无效

解决AAR包引用第三方依赖无效

作者: one_cup | 来源:发表于2017-03-16 21:42 被阅读1484次

    解决AAR包引用第三方依赖无效

    遇到一个之前都没有注意到的问题,在拆分公共组件的时候,将一些公用模块打成aar,然后放到公司的私服maven上,出现这样一个问题,有的aar中引用了类似RxJava,Okhttp等第三方库,发现在主项目中仍需要添加相应依赖才能使用,按理来说,正常使用module的时候,主项目应该也是可以直接使用module中的依赖才对,不清楚为什么会出现这种原因,然后就各种查资料,查看公司maven中的pom文件等等方式,出现了分歧。

    A 方案

    作为一个反面例子。我第一反应是去查aar包中是否能使用compile这种方式的依赖,查到的都是一些垃圾,完全没有用的东西,然后又人说需要本地jar是可用的,远程依赖不行,之后又把aar文件打开看了看,确实没有远程依赖的jar,之后的思路就是想办法把当前项目依赖的远程库的jar移动到本地项目目录中,这样不aar打包的时候不就把第三方的带过去了嘛。当然这是反面例子。

    B 方案

    作为一个成功例子。公司老司机。第一反应是Gradle应该是支持这种多层依赖方式的,老司机先google了相关资料,然后去了解maven的加载机制,之后就去看了gradle的源码,并没有从网络上查各种二手的解决方式,然后经过大概两个小时之后,老司机告诉我解决了,当时我还在冥思苦想怎么从获取当前项目所依赖的jar包。

    解决方案

    源码中的注释:

    * apply plugin: 'java' //so that I can declare 'compile' dependencies
     *
     * dependencies {
     *   compile('org.hibernate:hibernate:3.1') {
     *     //in case of versions conflict '3.1' version of hibernate wins:
     *     force = true
     *
     *     //excluding a particular transitive dependency:
     *     exclude module: 'cglib' //by artifact name
     *     exclude group: 'org.jmock' //by group
     *     exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
     *
     *     //disabling all transitive dependencies of this dependency
     *     transitive = false
     *   }
     * }
    

    如果本地有gradle的源码,点击compile是可以跳转过去的,然后从最上面往下看,就会发现这段代码,其中最后一个标识:transitive ,表示当前依赖是否可以传递,默认是false,然后当使用aar的时候直接在主项目中加上这句话就可以了。具体的还有一些其他的使用有兴趣的可以自行去了解。

    总结

    不是说我大天朝不好,也不是说国内的技术环境差,这个事情给我最大的感觉就是,百度真是不行,你看到的和你想要知道根本就是刘亦菲和如花的区别,根本没有用,而且抄袭的气氛太严重,全是一样的内容,搬来搬去的,有什么意思?还有就是自我的总结,解决问题能力不行,习惯了吃二手的资料,不劳而获,会越来越降低解决问题的能力。同样的事情,我用了两个小时,收获甚微,而且没有解决,老司机也是两个小时,看了五六篇源码,了解其运行机制,并成功解决。这差距。。。

    相关文章

      网友评论

      • 只欠秋天:意思吧library里面的依赖用api不用im……打包为aar其他项目就能用吗?
      • Feliks:compile(name: 'mylibrary-debug', ext: 'aar'){
        transitive = true
        }

        这种方式无效
        Feliks:@H029982384 谢谢,我在看下
        one_cup:你先确定你的aar包中有你需要的依赖,然后确定aar中的依赖是可以传递的,就是用的是api, 不是im~
      • a458411bad82:尝试了,无效
      • Tmac50:看不明白,我用transitive = true了还是提示找不到类
      • Iamsoulmate:我这边是如果有远程依赖,在打包aar 的时候就报错了,找不到类
      • Leovany:transitive = false ??
        楼主能说明白点吗,不知道怎么用啊 。。。。。求救
      • 皇马船长:没看明白啊 ?是在app build.gradle文件中添加

        compile(name: 'mylibrary-debug', ext: 'aar'){
        transitive = true
        }
      • 渊祥:尝试了并不行?
        https://stackoverflow.com/questions/36916991/transitive-dependencies-for-local-aar-library
        渊祥:@one_cup 嗯,是的。后来才发现我是在本地直接用没有上传到 maven 上面
        one_cup:有可能你的问题并不是这样的
      • krmao:找了很多资料,最后在google找到了你这篇....哈哈哈,靠谱
        krmao:@Feliks
        试试 api "xx.xx.xx" 传递依赖
        Feliks:靠谱吗?我怎么不行
      • vihuela:帮了朋友大忙
        one_cup:@vihuela 很荣幸,因为之前我也是同样的查了好多资料都没有解决,很高兴能帮到其他人

      本文标题:解决AAR包引用第三方依赖无效

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