android之多层module依赖改成依赖aar

来源:互联网 发布:dnfsao套装礼盒淘宝网 编辑:程序博客网 时间:2024/06/01 22:50

这里只谈aar多层依赖关系!!实用性与复杂性留给读者自行判断。毕竟人无完人,方案也不是全都完美无缺的嘛

1、背景

     由于公司有两个项目组,想将这两个项目组的某些功能模块相互使用,比如A项目组要使用B项目组的个人中心,B项目组怎么办呢,我们的办法是将个人中心独立成一个lib的module单独提供给A项目组;ok,这也已经满足了。然后过了段时间A项目组又发现B项目组的朋友圈模块不错,又想将这块应用到A项目组中,B项目组还是一样将朋友圈独立成一个lib的module提供给A项目组……其中当然B也是要A项目组中的某些功能模块,A项目组也是同样的方式提供给B……一而再再而三,一下子多了10多个lib……这是每次clean项目都需要半小时+,灰常烦银,这时无意使用aar编译会快一些。怎么获取aar,以及单个aar依赖下边给出别人的博客:
其实只要编译过app,都会在outputs目录下生成对应的aar(debug和release)
获取aar:aar依赖
http://blog.csdn.net/getchance/article/details/47257389

http://blog.csdn.net/yutao52shi/article/details/48015125

2、正题
  使用B项目来说,开始除了app其他都是lib,我们用依赖关系,一层层依赖还是挺麻烦的,关系如下:
1app-->lib_preg_home-->lib_home-->lib_topic-->lib_message-->lib_webview-->lib_share-->lib_bang-->lib_adv-->lib_search-->lib_baseproject -->lib_skin2lib_preg_home-->lib_draw_view3lib_preg_home-->spicy                           |--->lib_baseproject4lib_preg_home-->lib_live|                           |--->lib_share5lib_preg_home-->lib_imageselector
首先app依赖lib_preg_home,lib_preg_home依赖lib_home……以此类推……其中lib有些是A项目组的,有些事B项目组的,然后我们只想让app依赖lib_preg_home,lib_preg_home都只是依赖aar,从而可以中断其它lib的依赖,这时怎么办呢? 别着急,一下就来解决
假设已经从各个lib中的output目录拿到了lib中对应的所有aar,我们拿的是release,当然也可以用debug的如下图:

然后将所有的aar都放到libs中,当编译打包的时候都会在lib_preg_home的build下自动生成所需要的资源:如下图:

这时还要配置gradle,让其能识别libs下的aar文件,配置两个gradle如下:
第一:配置lib_preg_home的gradle如下:
  让当前libs下的aar文件能被识别编译
dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')//    compile project(':lib_draw_view')//    compile project(':lib_live')//    compile project(':lib_spicy')//    compile project(':lib_home')//    compile project(':lib_imageselector')    compile(name:'lib_skin-release', ext:'aar')    compile(name:'lib_baseproject-release', ext:'aar')    compile(name:'lib_home-release', ext:'aar')    compile(name:'lib_topic-release', ext:'aar')    compile(name:'lib_message-release', ext:'aar')    compile(name:'lib_webview-release', ext:'aar')    compile(name:'lib_share-release', ext:'aar')    compile(name:'lib_bang-release', ext:'aar')    compile(name:'lib_adv-release', ext:'aar')    compile(name:'lib_draw_view-release', ext:'aar')    compile(name:'lib_live-release', ext:'aar')    compile(name:'lib_spicy-release', ext:'aar')    compile(name:'lib_home-release', ext:'aar')    compile(name:'lib_imageselector-release', ext:'aar')    compile(name:'lib_search-release', ext:'aar')}

第二:配置项目下的gradle:注意不是app下的gradle,而是整个项目下的gradle:配置如下:

allprojects {    repositories {        jcenter()        flatDir {//            dirs '../lib_imageselector/libs'            dirs '../lib_preg_home/libs';        }    }}
重点是:

flatDir {//            dirs '../lib_imageselector/libs'            dirs '../lib_preg_home/libs';        }
其实这里主要是配置路径:这个是相对项目下的路径,一定要配上/lib_preg_home/libs,否则会由于路径不对找不到对应的aar;有些博客说是在lib下配置flatDir比如就拿lib_preg_home来说在lib_preg_home的gradle下配置flatDir{
dirs 'libs';}就行;但是亲测是无用的,必须在项目下的gradle中配置才能找到。大伙可是试试。

这里还要啰嗦两句使用aar:
一:个是lib比较稳定的情况下使用是最合适的,因为不用改动;
二:适合跨项目开发,那里只要提供aar就可以,但是会有一定的麻烦,因为毕竟没有源码想改也改不了,这也起到了保护lib的作用吧,看个人而定,不过依赖太多,肯定也会引来一些问题的
三:快去试试看看是不是clean或编译快一些了

到此就配置完事了。。。

0 0