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

原文地址:http://blog.csdn.net/zhongwn/article/details/53022106


这里只谈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依赖


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_skin

2lib_preg_home-->lib_draw_view

3lib_preg_home-->spicy
                           |--->lib_baseproject
4lib_preg_home-->lib_live|
                           |--->lib_share
5lib_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或编译快一些了

到此就配置完事了。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值