一个aar包多个项目依赖,每个项目ui资源不一样,代码逻辑一样,需要编译不通的项目依赖不同的UI资源
实现方案
- 采用sourceSets方式
- 采用module方式
sourceSets具体使用方式
- 目录结构
###########目录结构描述
├── app
│ ├── libs
│ └── src
│ ├── main
│ │ ├── assets
│ │ ├── java
│ │ ├── res-xxx
│ │ ├── res-yyy
│ │ └── res
│ └── test - 如上图目录结构,新建文件夹如:
res-xxx 目录和res同级 - 定义pname,从外层打包时传入,如:gradle assembleDebug -Ppname=xxx
//定义 适配不通项目UI需要引用的资源id,从命令中获取项目名称,获取不到采用默认res
def resDir = project.hasProperty('pname') ? "res-" + pname : "res"
- 设置编译时,所使用的res
//适配不通项目UI
sourceSets {
main {
res.srcDirs = ['src/main/' + resDir]
}
}
采用module依赖方式
- 目录结构
###########目录结构描述
├── app
│ ├── libs
│ └── src
│ ├── main
│ │ ├── assets
│ │ ├── java
│ │ └── res
│ └── test
└── resource
│ ├── xxxresource
│ │ ├── libs
│ │ └── src
│ │ └── main
│ └── yyyresource
│ ├── libs
│ └── src
│ └── main - 如上图目录结构,resource文件夹如:
创建 library module,两个module packagename相同如:都设置为:com.test.resource
xxxresource
yyyresource - 定义pname,从外层打包时传入,如:gradle assembleDebug -Ppname=xxx
//定义 适配不通项目UI需要引用的资源id,从命令中获取项目名称,获取不到采用默认res
def resDir = project.hasProperty('pname') ? "res-" + pname : "res"
- app项目中依赖
println('-----------resDir----000--->' + resDir)
api project(":resource:" + resDir + "resource")
两种依赖方式优缺点
- sourceSets方式
优点:
在同一个目录里面避免创建过多module
缺点:
res-xxx目录中无法预览layout.xml,无法看到效果,只能编译后看效果
如果有自定义view,自定义view依赖不同的aar怎么办?继续修改build,编译时动态拉依赖aar?耦合度过高 - 采用module依赖方式
module方式 一套UI创建一个resource lib
耦合度低,自定义view,或aar放入自己的module中
可扩展性强,后期需求,java类的实现不通,也可在此module中扩展