美文网首页安卓之美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