一個aar包多個項目依賴场勤,每個項目ui資源不一樣慢逾,代碼邏輯一樣埃叭,需要編譯不通的項目依賴不同的UI資源
實現(xiàn)方案
- 采用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文件夾如:
創(chuàng)建 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")
兩種依賴方式優(yōu)缺點
- sourceSets方式
優(yōu)點:
在同一個目錄里面避免創(chuàng)建過多module
缺點:
res-xxx目錄中無法預覽layout.xml,無法看到效果厘惦,只能編譯后看效果
如果有自定義view偷仿,自定義view依賴不同的aar怎么辦?繼續(xù)修改build绵估,編譯時動態(tài)拉依賴aar炎疆?耦合度過高 - 采用module依賴方式
module方式 一套UI創(chuàng)建一個resource lib
耦合度低,自定義view国裳,或aar放入自己的module中
可擴展性強形入,后期需求,java類的實現(xiàn)不通缝左,也可在此module中擴展