我正在尝试从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之类的任务,该任务将从skinxplayeracust1debug源集构建一个应用。

09-04 23:01