我正在尝试从Eclipse / ANT迁移到Android Studio / Gradle。
我们当前的ant-build支持N个客户(生成目标),并且客户由三元组外观/播放器/客户定义。
每个皮肤/玩家/客户可能包含src,资源, Assets ,...
在Gradle中对此建模的最佳方法是什么?
我目前为每个客户创建一个productFlavor,如下所示
productFlavors {
cust1{
applicationId='com.xyz.cust1'
customer="cust1"
skin="skinX"
player="playerA"
}
cust2{
applicationId='com.xyz.cust2'
customer="cust2"
skin="skinY"
player="playerB"
}
}
但是我很难以紧凑的方式定义相应的sourceSets。
我可以写类似
sourceSets.cust1 {
java.srcDir('pool/playerA/src')
res.srcDir('pool/skinX/res')
res.srcDir('pool/playerA/res')
res.srcDir('pool/cust1/res')
assets.srcDir('pool/playerA/assets')
assets.srcDir('pool/skinX/assets')
jniLibs.srcDir('pool/playerA/libs')
}
对于每个客户,但这将导致N个几乎相同的sourceSet
我希望有一个参数化的sourceSets像
sourceSets {
java.srcDir('pool/${player}/src')
res.srcDir('pool/${skin}/res')
res.srcDir('pool/${player}/res')
res.srcDir('pool/${customer}/res')
assets.srcDir('pool/${player}/assets')
assets.srcDir('pool/${skin}/assets')
jniLibs.srcDir('pool/${player}/libs')
}
这可能吗?
一种替代方法是为每个玩家,皮肤和客户创建一个sourceSet,并通过将主sourceSet与玩家,皮肤和客户中的一个组合来为productFlavor创建一个sourceSet
输入赞赏!
最佳答案
我将研究flavor dimensions(以前称为 flavor 组,也称为多 flavor 变体)。
使用这些,您将为皮肤,播放器和客户设置三个 flavor 维度。每个皮肤在productFlavor
维度中获得一个skin
,每个玩家在productFlavor
维度中获得一个player
,每个客户在productFlavor
维度中获得一个customer
。
然后,您将拥有诸如assembleSkinxPlayeraCust1Debug
之类的任务,该任务将从skinx
,playera
,cust1
和debug
源集构建一个应用。