一個(gè)aar包多個(gè)項(xiàng)目依賴,每個(gè)項(xiàng)目ui資源不一樣,代碼邏輯一樣,需要編譯不通的項(xiàng)目依賴不同的UI資源
實(shí)現(xiàn)方案
- 采用sourceSets方式
- 采用module方式
sourceSets具體使用方式
- 目錄結(jié)構(gòu)
###########目錄結(jié)構(gòu)描述
├── app
│ ├── libs
│ └── src
│ ├── main
│ │ ├── assets
│ │ ├── java
│ │ ├── res-xxx
│ │ ├── res-yyy
│ │ └── res
│ └── test - 如上圖目錄結(jié)構(gòu),新建文件夾如:
res-xxx 目錄和res同級 - 定義pname,從外層打包時(shí)傳入,如:gradle assembleDebug -Ppname=xxx
//定義 適配不通項(xiàng)目UI需要引用的資源id,從命令中獲取項(xiàng)目名稱,獲取不到采用默認(rèn)res
def resDir = project.hasProperty('pname') ? "res-" + pname : "res"
- 設(shè)置編譯時(shí),所使用的res
//適配不通項(xiàng)目UI
sourceSets {
main {
res.srcDirs = ['src/main/' + resDir]
}
}
采用module依賴方式
- 目錄結(jié)構(gòu)
###########目錄結(jié)構(gòu)描述
├── app
│ ├── libs
│ └── src
│ ├── main
│ │ ├── assets
│ │ ├── java
│ │ └── res
│ └── test
└── resource
│ ├── xxxresource
│ │ ├── libs
│ │ └── src
│ │ └── main
│ └── yyyresource
│ ├── libs
│ └── src
│ └── main - 如上圖目錄結(jié)構(gòu),resource文件夾如:
創(chuàng)建 library module,兩個(gè)module packagename相同如:都設(shè)置為:com.test.resource
xxxresource
yyyresource - 定義pname,從外層打包時(shí)傳入,如:gradle assembleDebug -Ppname=xxx
//定義 適配不通項(xiàng)目UI需要引用的資源id,從命令中獲取項(xiàng)目名稱,獲取不到采用默認(rèn)res
def resDir = project.hasProperty('pname') ? "res-" + pname : "res"
- app項(xiàng)目中依賴
println('-----------resDir----000--->' + resDir)
api project(":resource:" + resDir + "resource")
兩種依賴方式優(yōu)缺點(diǎn)
- sourceSets方式
優(yōu)點(diǎn):
在同一個(gè)目錄里面避免創(chuàng)建過多module
缺點(diǎn):
res-xxx目錄中無法預(yù)覽layout.xml,無法看到效果,只能編譯后看效果
如果有自定義view,自定義view依賴不同的aar怎么辦?繼續(xù)修改build,編譯時(shí)動態(tài)拉依賴aar?耦合度過高 - 采用module依賴方式
module方式 一套UI創(chuàng)建一個(gè)resource lib
耦合度低,自定義view,或aar放入自己的module中
可擴(kuò)展性強(qiáng),后期需求,java類的實(shí)現(xiàn)不通,也可在此module中擴(kuò)展