为了功能模块化和功能的复用,我们可以把具体的模块封装成库,做成.aar文件供别人项目使用,但是在开发library的时候可能会用到其他第三方的库,一般我们会在library的gradle文件中进行添加依赖,但是在将library制作成.aar供其他的项目使用的时候,如果用到第三方远程库里面的资源会报错,找不到。
业务场景
- myapp 依赖于mylibrary-release.aar
- library-release.aar又依赖于xxx-第三方
- 当myapp使用xxx-第三方第三方的时候会出现资源找不到而崩溃
具体操作如下
1、 创建一个myapp测试项目
2、然后new Module创建一个library;
3、 library在开发的时候依赖第三方远程库 thirdLib
implementation 'xxx.xxx:thirdLib'
4、 library中功能写完了可以打包成 library-release.aar供别人使用,aar打包方法
5、myapp中使用library-release.aar,首先将library-release.aar复制到app的libs目录下,然后再app的gradle文件中做如下配置
android {
。。。。
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
//自定义库
compile(name: 'library-release', ext: "aar")
}
6、做完以上配置就可以run app到手机上进行验证library中的内容是否可用;会发现library中基础功能界面是没问题的,但是当涉及到thirdLib中的内容的时候就包资源找不到崩溃(比如thirdLib是调用扫码功能)
解决方案
将thirdLib的依赖同样的放到app的gradle中,如下
android {
。。。。
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
//自定义库
compile(name: 'library-release', ext: "aar")
//第三方依赖
implementation 'xxx.xxx:thirdLib'
}
这么配置了重新打包运行,就能找到thirdLib的资源了,(比如扫码功能就可以正常使用了)
与一番三
要是有n个第三方也是同样的操作;其实不依赖远程库,将远程库做成.aar供library使用也是同样的套路;不足就是应用的地方重复太多,给别人使用不怎么方便,得提供对应的配置文档,如果有更好的方式可以交流。所以我这是最笨的方式哦