Android新优化

aar依赖方式记录

2020-07-11  本文已影响0人  任振铭

近期在开发公司的广告sdk,最终的目标就是打包成aar提供给公司内部各项目组使用,方便集成公司广告功能。借此机会总结一下aar依赖方式

1.项目依赖单一aar

这种依赖的方式很简单

a.首先将我们打包好的aar放在项目的libs文件夹下
b.确认一下项目app/build.gradle 文件中根节点配置是否正确,确保如下
repositories {
    flatDir {
        dirs 'libs'
    }
} 
c.然后在dependency中添加依赖
//指定依赖所有的aar,你当然也可以指定aar名字,但是一般项目中都会依赖多个aar,这样最简单
implementation fileTree(dir: 'libs', include: ['*.aar'])  

2.项目依赖aar,aar还依赖其他aar

我们的sdk符合这种场景,首先广告sdk是一个aar,还有些通用功能单独打成了aar,比如下载功能,播放器功能等等类似的。广告sdk还要依赖这些aar,那么怎么处理呢。
那么此时我们手上有一个项目工程,一个sdk.aar,一个download.aar,三者的关系就是项目工程依赖sdk.aar,sdk aar依赖download.aar。但是项目又不直接依赖download aar

1.首先,因为sdk aar依赖download aar,那么我们需要在sdk中的libs文件下添加download.aar文件
2.然后确保sdk根目录下build.gradle文件中的根节点配置
repositories {
    flatDir {
        dirs 'libs'
    }
}
3.下一步在dependencies中添加依赖,这样依赖就完成了sdk对download的依赖
//implementation依赖没有传递效果,改成api依赖即可
implementation(name: 'download', ext: 'aar') 
4.接下来,是将sdk.aar和 download.aar两个文件拷贝到项目的libs文件夹下

也许你会问,既然项目没有直接依赖download aar,为什么还要将download aar一同拷贝到项目libs中,我们已经在sdk中添加download.aar了呀?实际上不添加是不行的,implementation依赖方式会报错找不到download.aar中的类,可以尝试一下api依赖方式,有穿透效果,在宿主中就不需要implementation download.aar了

5.再次确认项目根目录下build.gradle文件中的配置
repositories {
    flatDir {
        dirs 'libs'
    }
}
6.然后在dependencies中添加依赖,大功告成
implementation fileTree(dir: 'libs', include: ['*.aar'])

思考一下如果此时sdk中依赖的出了download之外,还依赖了类似glide这种图片加载框架,或者依赖了okhttp这种网络框架或者其他各种开源库,此时我们已经在sdk中implementation它了,在调用sdk的项目中如果不再次添加implementation可以吗,答案是不行的。这就是为什么sdk的实现应该最大原则的不使用第三方库的原因。用户并不想在使用你的sdk的同时,还要替你去做第三方开源库的依赖。

上一篇下一篇

猜你喜欢

热点阅读