1

想象一下我的 APK 版本需要有或没有广告,有或没有 CustomJarSDK 以及三个市场,GooglePlay、AmazonApps 和 SamsungApps 的情况。

在我的完美世界中,它应该只有 7 种口味:

  • 有广告
  • 无广告
  • 使用 CustomJarSDK
  • 没有 CustomJarSDK
  • 对于谷歌播放
  • 对于亚马逊商店
  • 对于三星应用

在我的完美世界中,应该有一种方法可以在 gradle 中结合口味,例如:

  • 带广告 + SamsungApps + CustomJarSDK
  • 没有广告 + GooglePlay
  • ETC...

那可能吗?或者你被诅咒并被迫拥有所有这些味道......??????

  • 对于带有广告的 GooglePlay
  • 对于带有广告和 CustomJarSDK 的 GooglePlay
  • 对于没有广告的 GooglePlay
  • 对于没有广告和 CustomJarSDK 的 GooglePlay
  • 对于有广告的亚马逊商店
  • 对于带有广告和 CustomJarSDK 的 AmazonStore
  • 对于没有广告的亚马逊商店
  • 对于没有广告和使用 CustomJarSDK 的 AmazonStore
  • 对于带有广告的三星应用
  • 对于带有广告和 CustomJarSDK 的 SamsungApps
  • 对于没有广告的 SamsungApps
  • 对于没有广告和 CustomJarSDK 的 SamsungApps
4

1 回答 1

1

很难回答你的问题。这取决于哪些资源在任何方面都有所不同。

目前您无法扩展风味或合并它们。

但是,您可以使用一些技巧来改进您的项目。

例如,您可以将通用源集资源用于不同的风格。

像这样的东西:

+ App // module
|- src
   |- common // shared srcDir
      |- java
   + flavor1
      |- java
   + flavor2
      |- java
   + flavor3
   + flavor4

然后你可以定义这样的东西:

 sourceSets {            
        flavor1.java.srcDir 'src/common/java'
        flavor2.java.srcDir 'src/common/java'
        flavor3.java.srcDir 'src/common/java'
    }

在您的情况下,您应该评估口味是否:

  • 对于带有广告的 GooglePlay
  • 对于带有广告和 CustomJarSDK 的 GooglePlay
  • 对于没有广告的 GooglePlay
  • 对于没有广告和 CustomJarSDK 的 GooglePlay

可以使用一个公共块:

 sourceSets {
            flavor1.java.srcDir = ['src/common/java', 'src/flavor1/java']
            flavor2.java.srcDir = ['src/common/java', 'src/flavor2/java']
            flavor3.java.srcDir = ['src/common/java', 'src/flavor3/java']
        }

每种风味都可以使用在另一种风味中定义的相同源集
像这样的东西:

flavor2{
        java.srcDirs = sourceSets.flavor1.java.srcDirs
        res.srcDirs = sourceSets.flavor1.res.srcDirs
        resources.srcDirs = sourceSets.flavor1.resources.srcDirs
        aidl.srcDirs = sourceSets.flavor1.aidl.srcDirs
        renderscript.srcDirs = sourceSets.flavor1.renderscript.srcDirs
        assets.srcDirs = sourceSets.flavor1.assets.srcDirs
    }

此外,每种风味都可以定义多个资源文件夹。例如:

android.sourceSets {
   flavor1.res.srcDirs = ['src/main/res', src/main/res2']
}
于 2016-01-27T10:59:40.467 回答