如何组合多个sourceSet

时间:2014-12-23 12:49:43

标签: android gradle android-gradle

我正在尝试从Eclipse / ANT迁移到Android Studio / Gradle。 我们当前的ant-build支持N个客户(构建目标),客户由三元组皮肤/玩家/客户定义。 每个皮肤/玩家/客户都可能包含src,资源,资产......

在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几乎相同的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

输入赞赏!

1 个答案:

答案 0 :(得分:1)

我调查flavor dimensions(以前称为风味组,也称为多种风味变体)。

使用这些,您可以为皮肤,玩家和客户设置三种风味尺寸。每个皮肤在productFlavor维度获得skin,每个玩家在productFlavor维度获得player,每个客户在{{productFlavor获得customer 1}}维度。

然后,您将拥有assembleSkinxPlayeraCust1Debug之类的任务,这些任务将构建来自skinxplayeracust1debug源集的应用。